Struts2项目实战 微云盘(四):登录注册

来源:互联网 发布:gta5ol女神捏脸数据 编辑:程序博客网 时间:2024/04/20 05:33

一、本节说明
进入github下载本项目(开源)
本节实现登录、注册的逻辑以及UI。

二、Struts相关配置
在使用Struts前必选先配置Struts。

Step1:引入Struts所需jar包
如果没有引入,请参考:Struts2项目实战 微云盘(二):项目结构

Step2:配置Struts的核心Filter
在WEB-INF新建web.xml文件修改为如下格式:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://xmlns.jcp.org/xml/ns/javaee"    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"    version="3.1">    <!-- 定义sruts2的核心Filter -->    <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>

Step3:Struts配置文件
在src路径下创建struts.xml文件,struts.xml负责配置控制器、拦截器、异常等一系列与Struts有关的东西,以下代码只创建了一个包,修改为如下格式:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <!-- 允许动态方法调用 -->    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>    <constant name="struts.ognl.allowStaticMethodAccess" value="true" />    <constant name="struts.il8n.encoding" value="UTF-8" />    <package name="lzf" namespace="/" extends="struts-default">    <!--这里配置Action-->    <!--匹配所有请求Action-->    <action name="*">        <result>/WEB-INF/content/{1}.jsp</result>    </action>    </package></struts>

三、注册功能
网页收集用户注册信息->提交给注册控制器->控制器调用业务逻辑组件实现用户注册->返回逻辑视图名->struts根据逻辑视图名与资源视图的映射关系转向对应的资源视图

Step1:实现控制器
RegisterAction类是注册的控制器,负责调用业务逻辑组件。它继承自ActionSupport,在RegisterAction中封装了User对象的属性用来接收请求传过来的参数,这几个属性以及setter、getter方法与User对象中属性相同,所以不再细说,对用户请求的处理要放在execute()方法中,该方法返回逻辑视图名。

该控制器的代码很简单,通过ServiceImpl对象调用用户注册方法,如果注册成功,返回SUCCESS,否则返回ERROR。

这里的SUCCESS和ERROR都是逻辑视图名

@Overridepublic String execute() throws Exception {    ServiceImpl serviceImpl=new ServiceImpl();    boolean result=serviceImpl.register(username, password, sex, age, phone);    if(result) return SUCCESS;    else return ERROR;}

Step2:配置Action
仅仅实现了Action还不够,还需要在struts.xml中配置该Action。

    <!-- 注册Action -->    <action name="registerAction" class="cn.lzf.action.RegisterAction">        <result name="error">/WEB-INF/content/register_err.jsp</result>        <result>/WEB-INF/content/register_succ.jsp</result>    </action>

Step3:注册界面
第2步中配置两种逻辑视图与资源视图的映射关系,所以我们需要先定义注册页面register.jsp,还要定义register_err.jsp、register_succ.jsp。
register_err.jsp、register_succ.jsp这两个页面比较简单

<!--注册失败页面 register_err.jsp--><body>    注册失败! </body>
<!--注册成功页面 register_succ.jsp--><body>    注册成功!<a href="login">去登录</a></body>

register.jsp页面也没什么可说的,就一个表单提交给registerAction:

<s:form action="registerAction" id="form1">    <s:textfield label="用户名" name="username"></s:textfield>    <s:password label="密码" name="password"></s:password>    <s:radio list="{'男','女'}" name="sex"></s:radio>    <s:textfield label="年龄" name="age"></s:textfield>    <s:textfield label="电话" name="phone"></s:textfield>    <s:submit value="注册账号" id="submit"></s:submit></s:form>

div垂直居中解决方案:
div的水平居中很好解决:设置margin:0 auto ;就行了。要设置div垂直居中怎么做呢?
首先设置该div的祖先宽高都设为100%,然后将该div设为相对定位脱离文档流,设置top值50%,现在div会变成下面这个样子:
这里写图片描述
所以还需要设置div的margin-top的值为div高度的一半

四、登录实现
Step1:实现控制器
LoginAction是登录控制器,它会调用业务逻辑组件对用户信息验证,验证成功后将用户信息保存到session中。

@Override    public String execute() throws Exception {        ServiceImpl serviceImpl=new ServiceImpl();        //验证通过        if (serviceImpl.validate(username, password)){            //调用Servlet API            ActionContext ctx=ActionContext.getContext();            ctx.getSession().put("username", getUsername());            ctx.getSession().put("password", getPassword());            return SUCCESS;        }        else return ERROR;    }

Step2:配置Action

<!-- 登录Action --><action name="loginAction" class="cn.lzf.action.LoginAction">    <result name="error">/WEB-INF/content/err.jsp</result>    <result>/WEB-INF/content/index.jsp</result></action>

index.jsp是主页面视图,稍后会实现。到此,登录注册功能大致已经实现完了,但是还有不足:没有对用户输入进行校验。

五、为登录注册添加输入校验功能
在LoginAction控制器所在包下创建LoginAction-validation.xml文件,Struts会自动为LoginAction添加输入校验功能。这里为了示范,只对username字段进行了输入校验,登录的校验文件如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators>    <field name="username">        <field-validator type="requiredstring">        <param name="trim">true</param>        <message>必须输入名字</message>        </field-validator>        <field-validator type="regex">        <param name="expression"><![CDATA[(\w{4,10})]]></param>        <message>用户名只能是数字或字母,且长度在4-10之间</message>        </field-validator>    </field></validators>

添加了输入校验功能后如果数据没有通过校验页面会转向“input”逻辑视图所对应的资源视图,所以我们还应该为LoginAction、RegisterAction添加一个”input”的结果。
输入格式不正确会转向自身页面,struts标签库提供的表单会自动把message输出来

<!-- 登录Action --><action name="loginAction" class="cn.lzf.action.LoginAction">    <result name="error">/WEB-INF/content/err.jsp</result>    <result>/WEB-INF/content/index.jsp</result>    <result name="input">/WEB-INF/content/login.jsp</result></action>

同理,也可为RegisterAction添加上输入校验功能。

原创粉丝点击