struts2
我 是用idea写的。
需求分析:
用户进入首页,选择登陆,跳转到登陆 / 注册页面的登陆模块,如有账户,登陆成功跳转首页,并显示用户名;如没有账户,注册一个账户成功后,跳回登陆模块。在这里没有实现用户存储功能
1、首页的效果
2、登陆/注册页面的效果
登陆成功后
一、准备工作
1、导入jar包。下面是struts2的核心jar包
2、web.xml 和 struts.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-APP xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--拦截所有用户的请求-->
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml(我放在src目录下)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--在这里设置好每一个Action-->
</struts>
下面开始码代码
二、开始
我准备好了三个页面 class文件
创建一个LoginAction.java和RegisterAction.java,还有一个Model类User.java。MapData.java是模拟数据库,存储一些用户数据
Action类都继承ActionSupport类
LoginAction.java
- 验证用户名,密码
public class LoginAction extends ActionSupport {
private User user=new User();
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println("zhixing");
if (Info(user)){
return SUCCESS;
}else {
return ERROR;
}
}
public boolean Info(User user){
boolean flag=false;
//这里只写了一个用户的验证方式
if(user.getUsername().equals("clmmei")&&user.getPassword().equals("123456")){
flag=true;
}
return flag;
}
}
RegisterAction.java
- 验证用户名,密码是否已经存在
public class RegisterAction extends ActionSupport {
private User user=new User();
private String errorMsg="";
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
MapData mapData=new MapData();
mapData.addMapDate(user);
if (mapData.errorMsg==""&&mapData.errorEmail==""){
return SUCCESS;
}else {
this.errorMsg=mapData.errorMsg+","+mapData.errorEmail;
return ERROR;
}
}
}
注意到 每个Action类都有一个自动执行的execute()方法
@Override
public String execute() throws Exception {
//实现的功能
//...
return SUCCESS;
//return ERROR;
}
完整的struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--在这里设置好每一个Action-->
<package name="musicLoRe" extends="struts-default">
<action name="login" class="com.music.action.LoginAction">
<result name="success">index.jsp</result>
</action>
<action name="register" class="com.music.action.RegisterAction">
<result name="success">login_register.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>
<package>标签是区别每一个包(可随意区别)
<action>标签代表每一个Action类,<result>代表execute()方法返回的结果,
例如 :
<action name="login" class="com.music.action.LoginAction"> <result name="success">index.jsp</result><!--返回SUCCESS,默认转发到index.jsp页面--> </action>
<result name=" " type="dispatcher(默认) /redirect/redirectAction/...">
1) dispatcher:转发(默认的,可不写)
2) redirect :重定向
3)redirectAction :( 请求重定向到指定的Action,注意当前路径和重定向的路径 )
4)chain :用于把相关的几个action连接起来,共同完成一个功能(处于chain中的action属于同一个http请求,共享一个actioncontext )
5) plaintextj :结果类型用于直接在页面上显示源代码
注意:
1)当注册成功时,将该用户的用户名显示在登陆模块上,这个效果我是用js实现的
login_register.js部分代码
window.onload=function () { var myUser=GetQueryString("User.username"); if (myUser!=""&&myUser!=null){ document.getelementbyid("username").value=myUser } } function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg);//从问号 (?) 开始的 URL(查询部分) if(r!=null)return unescape(r[2]); return null; }2)登陆成功后,用户名显示在index.jsp页面时也用js实现
index.js的部分代码
window.οnlοad=function () { var myUser=GetQueryString("User.username"); if (myUser!=""&&myUser!=null){ var a=document.getElementById("userId"); a.innerHTML=myUser; a.href="#"; } } function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]);return null; }
登陆模块的部分jsp中的代码:
<form action="login">
<ul>
<li>用户名:<input type="text" name="User.username" id="username" value=""></li>
<li>密 码:<input type="text" name="User.password" id="password"></li>
<li><button type="submit">登陆</button> <button type="reset">重置</button></li>
<li class="lo_re2">还没有注册!请先注册</li>
</ul>
</form>
可以注意到,<input>的name值是User.username,这是直接给LoginAction.java的User赋值的方式
同理,
注册模块的JSP部分代码:
<form action="register">
<ul>
<li>用 户 名:<input type="text" name="User.username" id="username0"></li>
<li>密 码:<input type="text" name="User.password" id="password0"></li>
<li>确认密码:<input type="text" name="password" id="password1"></li>
<li>邮 箱:<input type="email" name="User.email" id="email"></li>
<li>出生年月:</li>
<li><button type="submit">登陆</button> <button type="reset">重置</button></li>
</ul>
</form>
完整代码,请点击 登陆/注册
我在GitHub上放了这个项目,提醒一下,我的 idea是 ideaIU-2017.3.4
相关阅读
在Excel中录入数据后需要进行数据统计,把符合条件的数据值都用不同颜色来标注,这个时候就需要用到条件格式了,这个方法在历代版本中
2016年1212支付宝活动将于12月10日至12月12日举行。在此活动期间用户只要集齐“吃喝玩乐”四宝(口碑宝)就有机会获得1212现金红包
关键词: 哈希碰撞 Birthday attack blake2 SHA-1存在严重的安全问题 这一次破解的只是SHA-1的抗碰撞性。类似HMAC-SHA-1(使用HM
2016淘宝双12亲亲节店铺红包攻略 教你抢1212元红包!
伴随着淘宝双12预热活动的开始,淘宝双12亲亲节店铺红包在12月1日的时候就已经开抢啦!淘宝买家不禁问道:“2016淘宝双12亲亲节店铺红
A5创业网(公众号:iadmin5)4月22日报道,金斧子宣布获得1.72亿的Pre-D轮融资,由正心谷创新资本领投,启诚资本跟投。金斧子已获得多轮融资