![零基础学Struts](https://wfqqreader-1252317822.image.myqcloud.com/cover/999/602999/b_602999.jpg)
上QQ阅读APP看书,第一时间看更新
15.6 完成用户登录模块
15.6.1 创建用户登录页
新建用户登录页,该页面中包含一个表单,用来输入登录用户信息。同样为该登录页面添加图形验证码,代码如下所示。
<%@page contentType="text/html; charset=gb2312"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>用户登录</title> </head> <body> <center> <h2>用户登录</h2> <%--登录表单--%> <s:actionerror/> <s:form action="login"> <s:textfield name="username" label="用户名"></s:textfield> <s:password name="password" label="密码"></s:password> <s:textfield name="yanzhengma" label="验证码"></s:textfield> <s:submit value="登录"></s:submit> <s:reset value="重置"></s:reset> </s:form> 验证码:<img src="Yanzhengma"/> <a href="#" onClick="history.go(0) ">单击刷新</a> </center> </body> </html>
15.6.2 创建用户登录控制器
新建业务控制器LoginAction,该Action接收用户登录页传递的参数,并调用业务逻辑组件来判断用户的合法性,代码如下所示。
package net.hncu.action; import java.util.Map; import net.hncu.service.UserService; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { //用户名 private String username; //密码 private String password; //验证码 private String yanzhengma; private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } public String getUsername() { return username; public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { Map session = ActionContext.getContext().getSession(); if(yanzhengma.equalsIgnoreCase((String)session.get("yanzhengma"))) { //调用业务逻辑组件来判断 if(userService.isLogin(username, password)){ //如果为合法用户,在request范围中添加属性login,其属性值为true ServletActionContext.getRequest().setAttribute("login", "true"); return SUCCESS; }else{ addActionError("用户名或密码不正确"); } } else { addActionError("验证码输入有误!"); } return ERROR; } public String getYanzhengma() { return yanzhengma; } public void setYanzhengma(String yanzhengma) { this.yanzhengma = yanzhengma; } }
15.6.3 配置用户登录控制器
在Spring配置文件中配置业务控制器LoginAction,并为其注入业务逻辑组件,代码如下所示。
<! -- 创建LoginAction实例 --> <bean id="loginAction" class="net.hncu.action.LoginAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean>
在“struts.xml”文件中配置LoginAction,并定义处理结果与视图资源之间的关系,代码如下所示。
<action name="login" class="loginAction">
<! -- 定义处理结果与视图资源之间的关系-->
<result name="success">/login_success.jsp</result>
<result name="input">/login.jsp</result>
<result name="error">/login.jsp</result>
</action>
15.6.4 创建校验规则文件
新建校验规则文件,其中包含如下输入校验规则。
(1)用户名、密码必须输入。
(2)用户名只能是数字或者字母,长度在6~20之间。
(3)密码必须是数字或者字母,长度在6~20之间。
通过如上校验规则,编写校验规则文件,代码如下所示。
<? xml version="1.0" encoding="UTF-8"? > <! DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <validator type="requiredstring"> <param name="fieldName">username</param> <param name="trim">true</param> <message>必须输入用户名</message> </validator> <validator type="regex"> <param name="fieldName">username</param> <param name="expression"><! [CDATA[(\w{6,20})]]></param> <message>用户名长度必须在6~20之间</message> </validator> <validator type="requiredstring"> <param name="fieldName">password</param> <param name="trim">true</param> <message>必须输入密码</message> </validator> <validator type="regex"> <param name="fieldName">password</param> <param name="expression"><! [CDATA[(\w{6,20})]]></param> <message>密码长度必须在6~20之间</message> </validator> </validators>
15.6.5 测试用户登录
打开浏览器,运行用户登录页。从页面中可以看到一个登录表单以及一个图形验证码,如图15.5所示。
当输入一个错误的验证码进行登录时,页面会跳转回登录页面,并显示验证码输入错误提示信息,如图15.6所示。
![](https://epubservercos.yuewen.com/58F6E3/3590816703512601/epubprivate/OEBPS/Images/figure_0441_0001.jpg?sign=1738934808-4W50ygI2599TpouPstNNVIoCnBK6Dd2B-0-434bc29f4fa0d477857ac78a25f80b81)
图15.5 登录页面
![](https://epubservercos.yuewen.com/58F6E3/3590816703512601/epubprivate/OEBPS/Images/figure_0441_0002.jpg?sign=1738934808-uON2zXYeioJ0ZASGp2bcogTdOXcSTxvX-0-4d896255de46e8d8acead692ffa17c9c)
图15.6 验证码输入有误
当输入错误的用户名和密码进行登录时,页面会跳转回登录页面,并显示用户名或密码错误提示信息,如图15.7所示。
![](https://epubservercos.yuewen.com/58F6E3/3590816703512601/epubprivate/OEBPS/Images/figure_0442_0001.jpg?sign=1738934808-XdEyV00AOkV52mGuCUBy0LZUHfjFUAKW-0-bf7e4b146171f3bfaaa98f4ce982591a)
图15.7 非法用户登录