零基础学Struts
上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所示。

图15.5 登录页面

图15.6 验证码输入有误

当输入错误的用户名和密码进行登录时,页面会跳转回登录页面,并显示用户名或密码错误提示信息,如图15.7所示。

图15.7 非法用户登录