一、用户注册示例

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那么将取到空值"",如下图所:

最新文章

  1. arch+xfce4系统配置
  2. JVM之方法区
  3. C#之Winform中treeview控件绑定数据库
  4. 【简单易懂的AMV图文教程-2】VEGAS基础进阶——认识关键帧
  5. POJ 3468 区间更新,区间求和(经典)
  6. Android之路-------Activity的详解
  7. angular.js学习
  8. java public protect default private
  9. MVC 常用方法
  10. 脚本之家 前端jQuery js 学习 网站
  11. Linux下进程通信之管道
  12. show()封装没有想象中那么简单
  13. MySql由于编码问题,存储过程执行出错。
  14. hive小文件合并设置参数
  15. 使用Stickers拓展集成iMessage简单功能
  16. List中存放字符串进行排序
  17. IO model
  18. SRA秘钥生成与解密
  19. qperf测量网络带宽和延迟
  20. 通过jquery获得某个元素的位置, 透明div, 弹出框, 然后在旁边显示toggle子级联菜单-hover的bug解决

热门文章

  1. https://www.cnblogs.com/xubing-613/p/5895948.html
  2. oracle 嵌套查询
  3. (算法)AA制
  4. 小教程:自己创建一个jQuery长阴影插件
  5. CentOS7安装 Apache HTTP 服务器
  6. Mybatis源码分析之Cache二级缓存原理 (五)
  7. Angularjs 中的 controller
  8. Provide your license server administrator with the following information.error code =-42,147
  9. LintCode: Delete Node in the Middle of Singly Linked List
  10. Hive Web Interface的安装