Struts 2(三):示例→基于Struts 2的用户注册模块
示例→基于Struts2的用户注册模块
1.用户注册模块需求描述
在用户注册页面中填写用户信息,包括用户名、用户密码、确认密码、姓名等信息,填写完成后提交注册表单给Struts 2的业务控制器Action,控制器处理提交的参数并决定跳转页面,若页面跳转到用户信息显示页面,则在该页面中显示用户信息。
2.模块实现
我们用如下表所示的代码文件来实现“用户注册模块”

(1)首先添加一个注册表单页面,该页面用来提交用户注册信息
Register.jsp:
<%@page language="java" pageEncoding="gb2312"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>用户注册页面</title>
</head>
<body>
<form action="register.action" method="post">
<table>
<tr><td colspan="2"><s:actionerror/></td></tr>
<tr><td>用户名:</td>
<td><input type="text" name="username"></td></tr>
<tr><td>密码:</td>
<td><input type="password" name="upassword"></td></tr>
<tr><td>确认密码:</td>
<td> <input type="password" name="repassword"></td></tr>
<tr><td>姓名:</td>
<td><input type="text" name="name"></td></tr>
<tr><td>年龄:</td>
<td><input type="text" name="age"></td></tr>
<tr><td>出生日期:</td>
<td><input type="text" name="birth"></td></tr>
<tr><td>邮箱地址:</td>
<td><input type="text" name="email"></td></tr>
<tr><td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td></tr>
</table>
</form>
</body>
</html>
(2)添加注册Action,该Action用来接收用户提交的参数,并进行业务逻辑处理,最后进行页面跳转,在这里我们添加如下的判断处理
A、密码和确认密码必须输入,否则提示错误信息
B、密码和确认密码必须相同,否则提示错误信息
package com.sanqing.action;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private String username; //用户名信息
private String upassword; //密码信息
private String repassword; //确认密码
private String name; //姓名
private String age; //年龄
private String birth; //出生日期
private String email; //email地址
public String getUsername() { //获得用户名
return username;
}
public void setUsername(String username) {//设置用户名
this.username = username;
}
public String getUpassword() {//获得密码
return upassword;
}
public void setUpassword(String upassword) {//设置密码
this.upassword = upassword;
}
public String getRepassword() {//获得重复密码
return repassword;
}
public void setRepassword(String repassword) {//设置重复密码
this.repassword = repassword;
}
public String getName() {//获得姓名
return name;
}
public void setName(String name) {//设置姓名
this.name = name;
}
public String getAge() {//获得年龄
return age;
}
public void setAge(String age) {//设置年龄
this.age = age;
}
public String getBirth() {//获得出生日期
return birth;
}
public void setBirth(String birth) {//设置出生日期
this.birth = birth;
}
public String getEmail() {//获得email地址
return email;
}
public void setEmail(String email) {//设置email地址
this.email = email;
}
public void validate() {
if(upassword == null || "".equals(upassword)){
this.addActionError("密码必须输入");
}
if(repassword == null || "".equals(repassword)) {
this.addActionError("确认密码必须输入");
}
if(upassword != null && repassword != null && !repassword.equals(upassword)){
this.addActionError("密码和确认密码必须相同");
}
}
public String execute() throws Exception {//执行方法
return "success";
}
}
解说:上述代码中添加了一个execute()方法,该方法是Action的执行方法,可以通过在该方法中添加业务逻辑代码或调用业务逻辑方法来完成逻辑操作,同时该方法返回一个普通的字符串,这个字符串对应着配置文件struts.xml中的一个视图文件。
上述代码中RegisterAction继承了ActionSupport,其目的是为了能够使用ActionSupport中定义的一些方法来完成校验操作,如上述代码中RegisterAction实现了ActionSupport的validate()方法,在validate()方法中添加输入校验代码来判断密码和确认密码是否输入及是否相同,其中通过ActionSupport的addActionError()方法来添加错误信息。
(3)添加完Action后,需要在struts.xml文件中配置该Action,包括请求地址和处理结果与视图资源之间的关系
<?xml version="1.0" encoding="UTF-8" ?><!-- XML声明 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"><!-- 指定Struts 2配置文件的DTD信息 -->
<struts><!-- 根节点 -->
<constant name="struts.i18n.encoding" value="gb2312"></constant>
<package name="struts2" extends="struts-default">
<!-- 定义register的Action,其实现类为com.sanqing.action.RegisterAction-->
<action name="register" class="com.sanqing.action.RegisterAction">
<!-- 定义处理结果与视图资源之间的关系-->
<result name="success">/ShowUserInfo.jsp</result>
<result name="input">/Register.jsp</result>
</action>
</package>
</struts>
解说:上述代码定义了一个"input"处理结果,其对应的页面为Register.jsp,也就是用户注册页面。在前面的业务控制器RegisterAction中并没有返回“input”结果,如何会自动跳转到注册页面呢?这个与Struts 2的拦截机制有关,当代码中使用了addActionError()方法添加错误信息时,Struts 2会自动发现这些错误信息,并返回结果“input”,在前面的Register.jsp页面中有输出校验错误语句:<s:actionerror/>。
<s:actionerror/>是属于Struts 2标签库中的标签,用来输出ActionError中的错误信息,因为在用户注册页面Register.jsp中使用了Struts 2的标签库,所以还需要使用taglib指令来引入标签库,代码如下:
<%@taglib prefix="s" uri="/struts-tags"%>
该标签指令表示Struts 2的所有标签都是用"s"作为前缀,Struts的标签库的URI为"/struts-tags"。
(4)添加结果显示页,在该结果页面中显示用户提交的所有参数
ShowUserInfo.jsp:
<%@page language="java" pageEncoding="gb2312"%>
<html>
<head>
<title>用户信息</title>
</head>
<body>
用户名:${username}<br> <!-- 显示用户名信息 -->
密码:${upassword}<br> <!-- 显示密码信息 -->
确认密码:${repassword}<br> <!-- 显示确认密码信息 -->
姓名:${name}<br> <!-- 显示姓名信息 -->
年龄:${age}<br> <!-- 显示年龄信息 -->
出生日期:${birth}<br> <!-- 显示出生日期信息 -->
邮箱地址:${email}<br> <!-- 显示邮箱地址信息 -->
</body>
</html>
解说:在上述代码中使用了EL表达式,使用时没有指定范围,而是直接使用${username},这时EL将默认从page范围开始查找,如果找不到,再依次到request、session、application范围中找,如果没有找到就返回null,在网页中也就没有显示。
3.功能测试
打开浏览器,在浏览器地址栏中输入 http://localhost:8080/StrutsPro/Register.jsp打开用户注册页面,不输入任何用户信息,单击“提交”按钮进行注册,弹出错误提示页面,提示“密码必须输入”和“确认密码必须输入”等信息
小结
(1)为什么在struts.xml中定义包时需要继承struts-default包?
答:Struts 2中的所有Action都必须定义在包(package)下,在struts-default包中定义了许多Struts 2的默认配置,如拦截器、返回结果类型等,通过继承struts-default包可以使用这些默认配置。
(2)Struts 2的Action为什么能自动获得参数值?
答:这个与Struts2的拦截器有关,Struts 2通过拦截器机制对参数进行拦截,并通过参数名称在相应Action中寻找匹配的setter方法将参数值设置上,Action中的属性名称必须和表单提交参数保持一致。
(3)提交中文参数值时得到的是乱码,该如何处理?
答:需要在配置文件struts.xml中配置参数编码格式,在package包前添加如下代码:
<constant name="struts.i18n.encoding" value="gb2312"></constant>
Struts 2(三):示例→基于Struts 2的用户注册模块的更多相关文章
- GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台
注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...
- Java Web整合开发实战:基于Struts 2+Hibernate+Spring 目录
第1篇 Java Web开发基础第1章 Web的工作机制( 教学视频:31分钟) 1.1 理解Web的概念 1.1.1 Web的定义 1.1.2 Web的三个核心标准 1.2 C/S与B/S两种软件体 ...
- Struts入门(三)深入Struts用法讲解
访问Servlet API Action搜索顺序 动态方法调用 指定多个配置文件 默认Action Struts 后缀 接收参数 处理结果类型 1.访问Servlet API 首先我们了解什么是Ser ...
- (三)、Struts第三天
(三).Struts第三天 Struts核心业务: (Struts提供了哪些功能?) 1. 请求数据自动封装(params拦截器) 2. struts数据处理方式 * ActionContext ...
- 简述基于Struts框架Web应用的工作流程
简述基于Struts框架Web应用的工作流程 解答:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们 ...
- Struts2(三) 配置struts.xml的提示(在不联网的情况下)
开发过程中如果可以上网,struts.xml 会自动缓存dtd,提供提示功能.如果不能联网需要我们配置本地dtd,这样才能让struts2 产生提示 1.首先,在EClipse中依次点击工具栏中的wi ...
- 基于struts环境下的jquery easyui环境搭建
下载地址: http://download.csdn.net/detail/cyberzhaohy/7348451 加入了json包:jackson-all-1.8.5.jar,项目结构例如以下: 測 ...
- Struts框架——(二)Struts原理with登录实例
二. Struts基本工作流程 假设现在有以下情景: 用户正在浏览一个用STRUTS的技术构建的网站主页,主页上有个登陆表单,用户填好登陆名和密码,单击"登陆"按钮,就激活了以下一 ...
- GJM :用JIRA管理你的项目(三)基于LDAP用户管理 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
随机推荐
- 【JavaScript】富文本编辑器
这是js写的富文本编辑器,还存在一些bug,但基本功能已经实现,通过这个练习,巩固了js富文本编辑方面的知识,里面包含颜色选择器.全屏.表情.上传图片等功能,每个功能实际对应的就是一个小插件啦 部分程 ...
- 智慧监狱来了!SaCa EMM 助推现代监狱建设迈上新台阶
近几年来,移动化已经成为警务信息化建设的必然方向,为紧急和突发事件的处理提供了信息依据.为监狱民警提供移动警务所需的信息管理系统,司法系统从很早就开始推动警务通项目.为了落实移动警务的工作需求,很多监 ...
- Session["userName"]与Session["userName"].ToString()是不一样的~~
今天调了个代码,发现老是跟预期的结果不一样,找了半天的原因,一个一个的往回找,终于逮出元凶了! 我今天才发现,下面两个是不一样的: //有问题的代码 if (Session["uid&quo ...
- 为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?
项目中有一个.NET Core控制台项目叫ConsoleCoreApp,写好代码后准备发布: 结果发布后生成的是一个dll文件...为不是一个exe的可执行文件: 后来了解到.NET Core的项目分 ...
- Java中如何判断一个字符串是否为数字
方法一:异常处理 public static boolean isInteger(String str){ try { Integer i = Integer.parseInt(str); retur ...
- 「微信小程序」PHP异步进程async-helper实例详解
PHP异步进程async-helper实例详解 PHP 的异步进程助手,借助于 AMQP 实现异步执行 PHP 的方法,将一些很耗时.追求高可用.需要重试机制的操作放到异步进程中去执行,将你的 HTT ...
- C# 参数关键字params的作用
为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,要求: (1)在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params ...
- javascript 中x++和++x的不同
x++和++x都是给x加一,但是前者是完成赋值之后再递增x,后者相反. 例如:如果x是5,y=x++会将y设置为5,x设置为6:而y=++x会将x和y都设置为6.
- ubuntu 如何进行文件、夹删除等操作
rm [选项] 文件-f, --force 强力删除,不要求确认-i 每删除一个文件或进入一个子目录都要求确认-I 在删除超过三个文件或者递归删除前要求确认-r, -R 递归删除子目录-d, --di ...
- ABAP术语-Update Module
Update Module 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/20/1114178.html Part of an update ...