struts2

来源:互联网 发布:windows手机壁纸 编辑:程序博客网 时间:2024/06/07 23:49

1.基于Struts2的登录验证;
2.测试单一Action类中配置多个action名(多方法);
3.验证自定义拦截器类的使用,完成基于登录验证的实验中增加用户session检测的功能;
4.基于登录验证实现Struts2的国际化。 


一.基于Struts2的登录验证:


1.导入struts2相关jar包

2.MVC模式剖析项目结构

2.1 Model层

验证密码和用户名(核心代码Action类):

public class LoginAction {private String username;private String pwd;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public String execute1(){LoginService ls=new LoginService();boolean flag=ls.login(username, pwd);if(flag){return "success";}else{return "fail";}}


LoginService类:

  public class LoginService {  public boolean login(String username,String pwd){if(username.equals("wjz") && pwd.equals("520")){return true;}else{return false;  }   } 


2.2 View层

登录界面:login.jsp 核心代码:

    <s:form action="login">    <s:textfield name="username" label="用户名"></s:textfield>    <s:password name="pwd" label="密 码"></s:password>    <s:submit value="登录"></s:submit>    </s:form>

欢迎界面:welcome.jsp

登录失败界面:fail.jsp


2.3 Controller

在struts.xml中配置,针对Action不同的result返回值,向客户端返回不同的页面

核心代码:

<action name="login" class="com.login.LoginAction" method="execute1"><result name="success">/welcome.jsp</result><result name="fail">/fail.jsp</result></action>


3.测试结果:

用户登录(图 1);
用户登录成功(图2);
用户登录失败(图 3)



图 1


图 2


图 3



二.测试单一Action类中配置多个action名(多方法):

1.在同一Action中编写execute1和execute2两种方法:

核心代码:

public String execute1(){//自定义execute1函数LoginService ls=new LoginService();boolean flag=ls.login(username, pwd);if(flag){return "success";}else{return "fail";}}public String execute2(){      //自定义execute2函数LoginService ls=new LoginService();boolean flag=ls.login(username, pwd);if(flag){return "success2";}else{return "fail2";}}


2.在struts.xml中通过method属性为不同的登录页面配置不同的方法:

配置execute1:

<action name="login" class="com.login.LoginAction" method="execute1"><!-- 调用第一个method -->
配置execute2

<action name="vipLogin" class="com.login.LoginAction" method="execute2"><!-- 调用第二个method -->


3.测试结果:

普通用户登录(调用execute1)(图 4),成功返回普通用户欢迎界面(图 5),失败返回失败界面(图 6);

VIP用户登录(调用execute2)(图 7),成功返回VIP用户欢迎界面(图 8),失败返回失败界面(图 9)。



图 4


图 5


图 6


图 7


图 8



图 9


三.验证自定义拦截器类的使用,完成基于登录验证的实验中增加用户session检测的功能:

1.在Action中针对密码验证成功和失败两种情况往session中同一变量”rsignal”赋不相同的值”y”或者”n”:

Public String execute1(){LoginService ls=new LoginService();boolean flag=ls.login(username, pwd);if(flag){ActionContext ctxt=ActionContext.getContext();Map<String, Object> session=ctxt.getSession();session.put("rsignal","y" );return "success";}else{ActionContext ctxt=ActionContext.getContext();Map<String, Object> session=ctxt.getSession();session.put("rsignal","n" );return "fail";}

2.定义拦截器,取出session中”rsignal”中的值,根据值得不同返回不同的结果:

public class InterceptorTest implements Interceptor{private static final long serialVersionUID = 1L;public void init(){}public void destroy(){}public String intercept (ActionInvocation ai) throws Exception{ActionContext ctxt=ActionContext.getContext();Map<String, Object> session=ctxt.getSession();String str=(String) session.get("rsignal");if(str=="n"){return "globle";    //密码验证失败返回”global”}else{ai.invoke();return null;}}

3.配置struts.xml:

<interceptors><interceptor name="test" class="com.login.InterceptorTest"></interceptor>  </interceptors><global-results><result name="globle">/fail.jsp</result>  <--当拦截器返回”global”时,调到登录失败页面。!-></global-results><action name="login" class="com.login.LoginAction" method="execute1"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="test"></interceptor-ref><result name="success">/welcome.jsp</result><result name="fail">/fail.jsp</result></action>

4.在welcome.jsp中验证session中”rsignal”的值,当值为null,””和n时自动跳转到pleaseLogin.jsp页面:

      <%String str=(String)session.getAttribute("rsignal");if(str==null||str==""||str=="n")response.sendRedirect("pleaseLogin.jsp");   %>


5.测试结果:

当用户没有没有成功登录直接在地址栏输入welcome.jsp的地址就会自动跳转到pleaseLogin.jsp界面。如(图 10)所示:


图 10



四.基于登录验证实现Struts的国际化:

1.创建国际化资源文件:

messageResource_en_US.properties:

username.label=input your usernamepassword.label=input your passwordregister.button=Login

messageResource_zh_CN.properties:

username.label=\u8F93\u5165\u7528\u6237\u540Dpassword.label=\u8F93\u5165\u5BC6\u7801register.button=\u767B\u5F55

2.在登录界面login.jsp中引用资源:

<s:form action="Login">    <s:textfield name="username" key="username.label"></s:textfield>    <s:textfield name="pwd" key="password.label"></s:textfield>    <s:submit key="register.button"></s:submit></s:form>

3.配置struts.xml(核心代码):

<constant name="struts.custom.i18n.resources" value="messageResource"></constant>

4.测试结果:

当ie浏览器在中文环境时访问登录页面显示中文(图 11):


图 11


当ie浏览器在英文环境时访问登录页面显示英文(图 12):


图 12









2 0
原创粉丝点击