java struts2入门学习实例--用户注册
一、用户注册示例
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="register" action="/struts2/RegisterAction" method="POST">
<table border="2" align="center">
<caption>新用户注册</caption>
<tr>
<th>用户名:</th>
<td><input name="username" id="username" type="text" /></td>
</tr>
<tr>
<th>密码:</th>
<td><input name="password" id="password" type="password" /></td>
</tr> <tr>
<td colspan="2" align="center"><input type="submit" value="提交"
width="120ppx" /></td>
</tr> </table>
</form>
</body>
</html>
RegisterAction.java
package com.amos.web.action; import com.opensymphony.xwork2.ActionSupport; /**
* @ClassName: RegisterAction
* @Description: TODO
* @author: amosli
* @email:amosli@infomorrow.com
* @date Jan 6, 2014 2:31:32 AM
*/
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = -3830387456224903276L;
private String username;
private String password; public void setUsername(String username) {
System.out.println("调用 username方法 ");
this.username = username;
} public void setPassword(String password) {
System.out.println("调用 password方法 ");
this.password = password;
} public String register() throws Exception {
System.out.println("用户名:"+username+" 密码:"+password);
return null;
}
}
register_struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="register" namespace="/" extends="struts-default">
<action name="RegisterAction" class="com.amos.web.action.RegisterAction"
method="register">
</action>
</package>
</struts>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!-- 加载其他配置文件 -->
<!--<include file="config/ip_struts.xml"></include>--> <include file="config/register_struts.xml"></include>
</struts>
运行结果如下图所示:

输入用户名:张三,密码:zs,点击提交,控制台输出结果如下:

代码分析:
程序的入口为register.jsp,其中定义了一个表单,其中定义了一个action为"/struts2/RegisterAction",调用方式为POST方式。/struts2项目访问路径,其中RegisterAction是由struts.xml进行加载register_struts.xml中的配置,在register_struts.xml中配置class为com.amos.web.action.RegisterAction,method为register,由此进行反射到RegisterAction.java类。然后调用setter/getter方法,进行数据输出。
二、用户注册(通过GET)
将register.jsp中的method由POST改为GET方式,再进行访问register.jsp,输入张三,zs ,结果如下所示:

为什么出现乱码? 在struts2中,post方示默认会进行转码为utf-8,但get方式却要手工转码.
这里为了使用用户名显示正常,将RegisterAction.java中的setUsername方法更改如下:
public void setUsername(String username) {
System.out.println("调用 username方法 ");
try {
// 将tomcat默认编码转码为utf-8
username = new String(username.getBytes("ISO8859-1"), "utf-8");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
this.username = username;
}
tomcat默认的编码是欧洲的ISO8859-1,这里转换一下编码,再重新运行后,结果如下:

显示中文正常了,但是如果将jsp中的调用方式再改为POST时,将会再出现乱码现象,主要是因为已经是utf-8编码的文字再转一次编码就会转错。所以这里要进行判断一下调用方式,代码优化如下所示:
public void setUsername(String username) {
System.out.println("调用 username方法 ");
String method = ServletActionContext.getRequest().getMethod();
if(method.equals("GET")){
try {
// 将tomcat默认编码转码为utf-8
username = new String(username.getBytes("ISO8859-1"), "utf-8");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}else if(method.equals("POST")){
}
this.username = username;
}
首先取得客户端的请求方式,如果是get那么将首先转码,如是post方式那将什么也不需要做。
所以在实际开发中建议尽量使用POST提交方式,以避免不必要的麻烦。
三、将用户密码以jsp页面的方式显示
下面将先看效果,再看代码:


RegisterAction.java
package com.amos.web.action; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /**
* @ClassName: RegisterAction
* @Description: TODO
* @author: amosli
* @email:amosli@infomorrow.com
* @date Jan 6, 2014 2:31:32 AM
*/
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = -3830387456224903276L;
private String username;
private String password; public void setUsername(String username) {
System.out.println("调用 username方法 ");
String method = ServletActionContext.getRequest().getMethod();
if(method.equals("GET")){
try {
// 将tomcat默认编码转码为utf-8
username = new String(username.getBytes("ISO8859-1"), "utf-8");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}else if(method.equals("POST")){ }
this.username = username;
} public String getUsername() {
return username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
System.out.println("调用 password方法 ");
this.password = password;
} public String register() throws Exception {
System.out.println("用户名:" + username + " 密码:" + password);
return "toshow";
}
}
register_struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="register" namespace="/" extends="struts-default">
<action name="RegisterAction" class="com.amos.web.action.RegisterAction"
method="register">
<result name="toshow" type="dispatcher">/show.jsp</result>
</action>
</package>
</struts>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
用户名:<s:property value="username"/>
密码:<s:property value="password"/>
</body>
</html>
register.jsp和struts.xml都同上面一样,没有变化。
代码分析:
这里需求是将表单中输入的用户名和密码输出到另一个jsp页面中,那么这里RegisterAction中必须新增加getter方法,return值也不能为null,因为这里要用到result属性,这里配置register_struts.xml文件,将文件内容转发到show.jsp.
这里重点就是show.jsp,这里引入struts-core源码包里的/META-INF/struts-tags.tld,标签来进行调用数据,s是struts的简写,其中value值要和RegisterAction中的两个实例变量名保持一致。
注意,这里只标签取值仅限于转发的情况下,如果将register-struts.xml中的dispatcher改为redirect那么将取到空值"",如下图所:

java struts2入门学习实例--用户注册的更多相关文章
- java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器
实例1:实现客户端IP地址和访问方式输出到浏览器. IpAction.java package com.amos.web.action; import javax.servlet.http.HttpS ...
- java struts2入门学习实例--用户注册和用户登录整合
需求: 1.用户注册(user_register.jsp)-->注册成功(UserRegister.action)-->显示注册信息(register_success.jsp)2.用户登录 ...
- java struts2入门学习实例--使用struts进行验证
一.为什么要进行验证? 验证几乎是注册登录的必须前提,验证的主要作用有两点: 1.安全性 2.对用户提供差异化服务. 二.如何验证? ActionSupport类中有一个validate()方法,这是 ...
- java struts2入门学习实例--使用struts2快速实现上传
一.文件上传快速入门 1).关于上传表单三要素 >>尽量以POST请求方式上传,因为GET支持文件大小是有限制的. >>必须要加上enctype="multipart ...
- java struts2入门学习实例--使用struts2快速实现多个文件上传
一.错误提示信息配置 昨天说到更改默认错误配置信息,我测试很多遍,一直都不对.下面贴出来,待以后有好方法了再补充吧. 首先新建一个properties文件,这里命名为testupload.proper ...
- java struts2入门学习--OGNL语言常用符号和常用标签学习
一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...
- java struts2入门学习--OGNL语言基本用法
一.知识点学习 1.struts2中包含以下6种对象,requestMap,sessionMap,applicationMap,paramtersMap,attr,valueStack; 1)requ ...
- java struts2入门学习--防止表单重复提交.OGNL语言学习
一.知识点回顾 防止表单重复提交核心思想: 客户端和服务器端和写一个token,比较两个token的值相同,则非重复提交;不同,则是重复提交. 1.getSession三种方式比较: request. ...
- java struts2入门学习--基于xml文件的声明式验证
一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...
随机推荐
- HTML5基础扩展——地理位置、本地存储、缓存
HTML5扩展,继上两篇博客,我们来看一下HTML5的一些扩展的功能,由于HTML5更多是为了兼容电脑浏览器,安卓浏览器,苹果浏览器更多浏览器,或者说为这些浏览器提供一个统一的标准.因此目前在手机上的 ...
- Springboot读取自定义配置文件的几种方法
一.读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. ...
- 矩阵中的旋转(Rotation)
参考的是<游戏和图形学的3D数学入门教程>,算是读书笔记吧. 目录 [隐藏] 1.2D中的旋转 2.3D中的旋转 2.1绕x轴旋转: 2.2绕Y轴旋转 2.3绕Z轴旋转 1.2D中的旋转 ...
- 【Spark】SparkStreaming-加载外部配置文件
SparkStreaming-加载外部配置文件 spark加载配置文件_百度搜索 Spark加载外部配置文件 - CSDN博客 spark读取配置文件中的配置 - CSDN博客 spark加载prop ...
- discuz上传头像失败怎么解决
刚安装好的discuz程序,可能需要我们做许多修改,而头像上传失败则是最为常见的问题之一,那么discuz上传头像失败怎么解决呢 进入ftp,打开跟目录下config文件 下载"config ...
- 牛客网-《剑指offer》-包含min函数的栈
题目:http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49 辅助栈 C++ class Solution { public ...
- WinForm 之 程序启动不显示主窗体
在 WinForm 程序启动时,不显示主窗体的实现方法主要有以下5种,第五种最简单,而且效果也不错,第四种方法也值得推荐. 实例代码如下: //隐藏窗体的方法1/5:不指定任何窗体为主窗体 //注意: ...
- Linux shell中一些参数与变量简介
linux中shell变量$#,$@,$0,$1,$2,$!,$$,$*,$-,$@......等很多个,很容易记错,这里再次整理一下,相关含义解释如下,并附上一个实践截图. 多看几次,多用几次,应该 ...
- C++ 第十课:标准c时间与日期函数
asctime() 时间文本格式 clock() 返回自程序开始运行所经过的时间 ctime() 返回特定格式时间 difftime() 两时刻的间隔 gmtime() 返回指向当前格林威治时间的指针 ...
- Binutils工具集中的一些比较常用的工具
addr2line addr2line是用来将程序地址转换成其所对应的程序源文件.代码行以及所对应的函数. ar ar是用来管理档案文件的,在嵌入式系统开发中,ar主要是用来对静态库进行管理. ar常 ...