一、本节说明
进入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都是逻辑视图名

@Override
public 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中。

@Overridepublic String execute() throws Exception {ServiceImpl serviceImpl=new ServiceImpl();//验证通过if (serviceImpl.validate(username, password)){//调用Servlet APIActionContext 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添加上输入校验功能。

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

  1. Struts2项目实战 微云盘(六)主界面UI

    一.本节说明 进入github下载本项目(开源) 本节实现的是主界面UI 二.AJAX请求 在使用Jquery前先确认正确的引入了jquery. 1.获取文件结点 当文档加载完成后需要获取到用户根目录 ...

  2. Struts2项目实战 微云盘(一):项目分析

    一.项目简述 进入github下载本项目(开源) 这是一个模仿网盘的项目,主要是为了熟悉Struts2框架,该项目不涉及底层DAO操作,只涉及到Struts2的相关知识,底层DAO操作是使用数据单元进 ...

  3. Struts2项目实战 微云盘(三):DAO实现

    一.本节说明 本节主要实现用户对象.目录结点.数据单元.DAO接口.业务逻辑组件 查看项目效果 进入github下载本项目(开源) 二.Bean实现 1.User cn.lzf.bean包下的类 Us ...

  4. Struts2项目实战 微云盘 效果展示

    项目下载地址 进入github下载本项目(开源) 1.注册 2.登录 3.主页面 4.创建文件夹并上传三种类型文件 5.文件下载

  5. Struts2项目实战 微云盘(二):项目结构

    1.本节说明 进入github下载本项目(开源) 本节主要介绍项目的结构 2.项目结构 //项目名 StrutsDemo1||_src|//该包存放各种控制器|_cn.lzf.action|//处理文 ...

  6. Struts2项目实战 微云盘(八):Action异常处理

    一.本节说明 进入github下载该项目 进入github查看该项目的配置指南 本节是这个项目的最后一篇博文了,本节主要介绍Action的异常处理以及项目中出现的问题 二.Action的异常处理 1. ...

  7. Linux 15:基于C/S架构——微云盘

    文章目录 1. 项目简介 2. 图解 3. 代码serfile&clifile(初始版) 4. 协议 5. 客户端 5.1 代码图解 6. 断点续传(服务器-客户端) 7. 秒传(客户端-服务 ...

  8. 2018年最新Vue从基础入门到项目实战视频教程网盘学习地址

    2018年最新Vue从基础入门到项目实战视频教程网盘学习地址: https://pan.baidu.com/s/15D6GiHnSgA5Eo0n9G5Ws1A 若网盘地址失效,可访问此地址(下单有网盘 ...

  9. 【WEB API项目实战干货系列】- API登录与身份验证(三)

    上一篇: [WEB API项目实战干货系列]- 接口文档与在线测试(二) 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录API, API身份验证. ...

最新文章

  1. LeetCode 27移除元素28实现strStr()29两数相除
  2. 2020年终总结一下吧
  3. 【Spring】SpringMVC 作用域传值的 4 种方式
  4. QT中事件发送函数sendEvent()、postEvent()详解
  5. 小白十分钟-推荐导航栏
  6. batchsize大小对训练速度的影响
  7. autoline 手册
  8. 【DevCloud· 敏捷智库】如何进行需求结构化管理?
  9. Mongodb c#增删改查
  10. HBuilder搭建Android模拟器
  11. 小伙子自学C++编程简单DIY,即让你拥有一个屏幕画笔,非常实用!
  12. VS2017 CUDA编程学习实例1:CUDA实现向量点乘
  13. 网上找了c#仓库管理程序,编译的时候一直 报错
  14. 远程桌面管理工具的使用
  15. WMI的讲解(是什么,做什么,为什么)
  16. 小游戏开发设计之塔防类游戏
  17. 家装中,你最后悔的事是什么?上海极家装修公司简介!
  18. mysql启动报错: 某些服务在未由其他服务器或程序使用时即将自动停止-解决办法
  19. Ip探针_信息探针_社工查询个人信息php网站源码
  20. HP 打印机遇到各错误类型故障大全解释

热门文章

  1. 2017-2-1-moviesandbooks
  2. 天创速盈解密:直通车使用了有效果吗?
  3. 如何用matlab画出树,使用treeplot将嵌套单元格绘制为树:MATLAB
  4. K8s平台部署企业级项目案例
  5. mysql 80070057_安装iis错误
  6. 1范数+F范数求极小
  7. 什么蓝牙耳机好?性价比高又不贵的无线蓝牙耳机推荐
  8. Centos 查看网卡型号
  9. 用计算机套路别人,聊天用这个套路,据说能让对方秒回,不信就试试看!
  10. cm_plot.py