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";}}
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)。
二.测试单一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)。
图 8
三.验证自定义拦截器类的使用,完成基于登录验证的实验中增加用户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)所示:
四.基于登录验证实现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):
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- struts2
- Struts2
- Struts2
- Struts2
- struts2
- struts2
- STRUTS2
- Struts2
- Struts2
- NKOI 3804 机器人M号
- 用js提交表单
- LeetCode: Best Time to Buy and Sell Stock
- poj_2109 Power of Cryptography(技巧)
- 白宫对未来人工智能的规划报告
- struts2
- 第一次独立完成项目遇到的坑---天天阅读
- txt文件导入mysql
- Sublime Text 3安装破解+汉化包 + 教程
- HDU 3033 I love sneakers! (分组背包 每组至少选一个)
- [C++杂谈]:C++中宏的使用
- struts.xml配置文件入门小结
- [T][2]NOIP 2001 单词接龙
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)