Struts2笔记2
一.请求参数封装
1.属性驱动:
(1).无实体类情况:属性和动作类在一起
a.编写jsp页面,提交数据,例如name和age
1 <form action="${pageContext.request.contextPath}/demo1.action" method="post">
2 用户名:<input type="text" name="name"/><br/>
3 年龄:<input type="text" name="age"/><br/>
4 <input type="submit" value="提交"/>
5 </form>
b.编写动作类
1 package huguangqin.com.cnblogs.action;
2 import com.opensymphony.xwork2.ActionSupport;
3 //它要想封装成功,有如下要求: 表单元素的name属性取值必须和动作类中的属性一致(get/set方法后面的部分)
4 public class UserAction extends ActionSupport {
5 private String name;
6 private Integer age;// struts2会自动转为String.表单可以提交的数据类型包括:String/String[]/资源
7
8 public String demo1() {
9 System.out.println("name=" + name + ",age=" + age);
10 return this.SUCCESS;
11 }
12
13 public String getName() {
14 return name;
15 }
16
17 public void setName(String name) {
18 this.name = name;
19 }
20
21 public Integer getAge() {
22 return age;
23 }
24
25 public void setAge(Integer age) {
26 this.age = age;
27 }
28
29 }
30
c.编写struts.xml配置
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- 导入dtd约束 -->
3 <!DOCTYPE struts PUBLIC
4 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
5 "http://struts.apache.org/dtds/struts-2.3.dtd">
6 <struts>
7 <package name="u" extends="struts-default">
8 <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
9 <result name="success">/success.jsp</result>
10 </action>
11 </package>
12 </struts>
(2).有实体类情况
动作类和模型数据分开
* 使用要求:
* 首先动作类中需要提供模型的get/set方法
* 模型中要提供私有成员变量的get/set方法
* 并且这些get/set方法必须和表单的name属性取值能对应上。
a.编写jsp--注意OGNL语语
1 <form action="${pageContext.request.contextPath}/demo1.action" method="post">
2 用户名:<input type="text" name="user.name"/><br/>
3 年龄:<input type="text" name="user.age"/><br/>
4 <input type="submit" value="提交"/>
5 </form>
b.编写实体类
1 package huguangqin.com.cnblogs.entity;
2 public class User {
3 private String name;
4 private Integer age;
5
6 public String getName() {
7 return name;
8 }
9
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public Integer getAge() {
15 return age;
16 }
17
18 public void setAge(Integer age) {
19 this.age = age;
20 }
21
22 @Override
23 public String toString() {
24 return "User [name=" + name + ", age=" + age + "]";
25 }
26
27 }
28
c.编写动作类
1 package huguangqin.com.cnblogs.action;
2 import com.opensymphony.xwork2.ActionSupport;
3 import huguangqin.com.cnblogs.entity.User;
4
5 //使用要求:首先动作类中需要提供模型的get/set方法;
6 //模型中要提供私有成员变量的get/set方法
7 //并且这些get/set方法必须和表单的name属性取值能对应上
8 public class UserAction extends ActionSupport {
9 // 提供模型的实例化对象
10 private User user = new User();
11
12 // 提供get/set方法
13 public User getUser() {
14 return user;
15 }
16
17 public void setUser(User user) {
18 this.user = user;
19 }
20
21 public String demo1() {
22 System.out.println(user);
23 return this.SUCCESS;
24 }
25
26 }
27
d.编写struts.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- 导入dtd约束 -->
3 <!DOCTYPE struts PUBLIC
4 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
5 "http://struts.apache.org/dtds/struts-2.3.dtd">
6 <struts>
7 <package name="u" extends="struts-default">
8 <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
9 <result name="success">/success.jsp</result>
10 </action>
11 </package>
12 </struts>
(3)封装到list
a.编写jsp--注意模型属性取值
1 <form action="${pageContext.request.contextPath}/demo1.action" method="post">
2 用户名1:<input type="text" name="users[0].name"/><br/>
3 年龄1:<input type="text" name="users[0].age"/><br/>
4 用户名2:<input type="text" name="users[1].name"/><br/>
5 年龄2:<input type="text" name="users[1].age"/><br/>
6 用户名3:<input type="text" name="users[2].name"/><br/>
7 年龄3:<input type="text" name="users[2].age"/><br/>
8 <input type="submit" value="提交"/>
9 </form>
b.编写实体类
1 package huguangqin.com.cnblogs.entity;
2 public class User {
3 private String name;
4 private Integer age;
5
6 public String getName() {
7 return name;
8 }
9
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public Integer getAge() {
15 return age;
16 }
17
18 public void setAge(Integer age) {
19 this.age = age;
20 }
21
22 @Override
23 public String toString() {
24 return "User [name=" + name + ", age=" + age + "]";
25 }
26
27 }
28
c.编写动作类
1 package huguangqin.com.cnblogs.action;
2 import java.util.List;
3 import com.opensymphony.xwork2.ActionSupport;
4 import huguangqin.com.cnblogs.entity.User;
5 //使用要求: 首先动作类中需要提供模型的get/set方法; 模型中要提供私有成员变量的get/set方法
6 //并且这些get/set方法必须和表单的name属性取值能对应上
7 public class UserAction extends ActionSupport {
8 private List<User> users;
9
10 public List<User> getUsers() {
11 return users;
12 }
13
14 public void setUsers(List<User> users) {
15 this.users = users;
16 }
17
18 public String demo1() {
19 System.out.println(users);
20 return this.SUCCESS;
21 }
22
23 }
24
d.编写Struts
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- 导入dtd约束 -->
3 <!DOCTYPE struts PUBLIC
4 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
5 "http://struts.apache.org/dtds/struts-2.3.dtd">
6 <struts>
7 <package name="u" extends="struts-default">
8 <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
9 <result name="success">/success.jsp</result>
10 </action>
11 </package>
12 </struts>
(4)封装到map
a.编写jsp--注意模型属性
1 <form action="${pageContext.request.contextPath}/demo1.action" method="post">
2 用户名1:<input type="text" name="users['one'].name"/><br/>
3 年龄1:<input type="text" name="users['one'].age"/><br/>
4 用户名2:<input type="text" name="users['two'].name"/><br/>
5 年龄2:<input type="text" name="users['two'].age"/><br/>
6 用户名3:<input type="text" name="users['three'].name"/><br/>
7 年龄3:<input type="text" name="users['three'].age"/><br/>
8 <input type="submit" value="提交"/>
9 </form>
b.编写实体类
c.编写动作类
1 package huguangqin.com.cnblogs.action;
2 import java.util.Map;
3 import com.opensymphony.xwork2.ActionSupport;
4 import huguangqin.com.cnblogs.entity.User;
5 // 使用要求: 首先动作类中需要提供模型的get/set方法; 模型中要提供私有成员变量的get/set方法
6 // 并且这些get/set方法必须和表单的name属性取值能对应上
7 public class UserAction extends ActionSupport {
8 private Map<String, User> users;
9
10 public Map<String, User> getUsers() {
11 return users;
12 }
13
14 public void setUsers(Map<String, User> users) {
15 this.users = users;
16 }
17
18 public String demo1() {
19 System.out.println(users);
20 return this.SUCCESS;
21 }
22
23 }
24
d.编写struts.xml
2.模型驱动
a.编写jsp
1 <form action="${pageContext.request.contextPath}/demo1.action" method="post">
2 用户名:<input type="text" name="name"/><br/>
3 年龄:<input type="text" name="age"/><br/>
4 <input type="submit" value="提交"/>
5 </form>
b.编写实体类
1 package huguangqin.com.cnblogs.entity;
2 public class User {
3 private String name;
4 private Integer age;
5
6 public String getName() {
7 return name;
8 }
9
10 public void setName(String name) {
11 this.name = name;
12 }
13
14 public Integer getAge() {
15 return age;
16 }
17
18 public void setAge(Integer age) {
19 this.age = age;
20 }
21
22 @Override
23 public String toString() {
24 return "User [name=" + name + ", age=" + age + "]";
25 }
26
27 }
28
c.编写动作类
1 package huguangqin.com.cnblogs.action;
2 import com.opensymphony.xwork2.ActionSupport;
3 import com.opensymphony.xwork2.ModelDriven;
4 import huguangqin.com.cnblogs.entity.User;
5
6 //* 使用要求:
7 //* 1.动作类必须实现ModelDriven接口,其中泛型提供的是模型对象
8 //* 2.在动作类中需要定义一个模型对象,并且必须由我们自己来实例化
9 //* 3.提供接口中抽象方法的实现,方法的返回值是我们定义的模型对象
10 //* 模型驱动没有要求生成get/set方法
11
12 public class UserAction extends ActionSupport implements ModelDriven<User> {
13 //实例化模型对象
14 private User user = new User();
15
16 public String demo1() {
17 System.out.println(user);
18 return this.SUCCESS;
19 }
20 //实现抽象方法,返回模型对象
21 @Override
22 public User getModel() {
23 return user;
24 }
25
26 }
27
d.编写struts
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- 导入dtd约束 -->
3 <!DOCTYPE struts PUBLIC
4 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
5 "http://struts.apache.org/dtds/struts-2.3.dtd">
6 <struts>
7 <package name="u" extends="struts-default">
8 <action name="*" class="huguangqin.com.cnblogs.action.UserAction" method="{1}">
9 <result name="success">/success.jsp</result>
10 </action>
11 </package>
12 </struts>
二.结果视图的配置
1.result标签:
name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。
type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher。
type的常用取值:
dispatcher:(默认值)
使用请求转发,转向一个页面。
redirect:
使用重定向,转向一个页面。它可以用于重定向到另外一个动作。
redirectAction:
使用重定向,前往指定的动作。
2.全局结果视图:<global-results>
1 <package name="myDefault" extends="struts-default" abstract="true">
2 <global-results>
3 <result name="login">/login.jsp</result>
4 </global-results>
5 </package>
三.访问Servlet的API的三种方式
1.使用ServletActionContext
1 public class HelloAction extends ActionSupport{
2
3 private HttpServletRequest request;
4 private HttpServletResponse response;
5 private HttpSession session;
6 private ServletContext application;
7
8 public String sayHello(){
9 request = ServletActionContext.getRequest();
10 response = ServletActionContext.getResponse();
11 session = request.getSession();
12 application = ServletActionContext.getServletContext();
13
14 System.out.println(request);
15 System.out.println(response);
16 System.out.println(session);
17 System.out.println(application);
18 return SUCCESS;
19 }
20 }
21
2.使用ActionContext的方式(ActionContext 是一个map结构的对象)
1 public class Hello2Action extends ActionSupport{
2
3 private HttpServletRequest request;
4 private HttpServletResponse response;
5 private HttpSession session;
6 private ServletContext application;
7
8 public String sayHello(){
9 request = (HttpServletRequest) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.HttpServletRequest");
10 response = (HttpServletResponse) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.HttpServletResponse");
11 session = request.getSession();
12 application = (ServletContext) ActionContext.getContext().get("com.opensymphony.xwork2.dispatcher.ServletContext");
13
14 System.out.println(request);
15 System.out.println(response);
16 System.out.println(session);
17 System.out.println(application);
18 return SUCCESS;
19 }
20 }
21
3.通过实现接口的方式
1 public class Hello3Action extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
2
3 private HttpServletRequest request;
4 private HttpServletResponse response;
5 private HttpSession session;
6 private ServletContext application;
7
8 public String sayHello(){
9
10 session = request.getSession();
11
12 System.out.println(request);
13 System.out.println(response);
14 System.out.println(session);
15 System.out.println(application);
16 return SUCCESS;
17 }
18
19 @Override
20 public void setServletRequest(HttpServletRequest request) {
21 this.request = request;
22 }
23 @Override
24 public void setServletResponse(HttpServletResponse response) {
25 this.response = response;
26 }
27 @Override
28 public void setServletContext(ServletContext application) {
29 this.application = application;
30 }
31
32
33 }
34
Struts2笔记2的更多相关文章
- struts2笔记(3)
关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...
- struts2笔记(2)
<context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...
- struts2笔记
Struts2 中, HTML 表单将被直接映射到一个 POJO,通过params拦截器,类中定义对应属性,及对应set方法即可. Struts2 中,任何一个POJO都可以是一个action类. S ...
- struts2笔记4
1.自定义struts拦截器 应用场景:如果用户登陆后可以访问action中的所有方法,如果用户没有登陆不允许访问action中的方法,并且提示“你没有操作权限” 1)两个页面,一个用户登陆user. ...
- struts2 笔记04 杂记
流程: 1. StrutsPrepareAndExcuteFilter:StrutsPrepareAndExcuteFilter作为前端控制器,是整个Struts2的调度中心. 2. ActionMa ...
- struts2 笔记03 异常支持、防止页面刷新和后退、方法验证
Struts2对异常支持(声明式异常.自动的异常处理), 异常处理(运行期异常事务自动回滚) 1. 自定义异常类,继承RuntimeException或Exception实现构造方法. 2. 配置异常 ...
- struts2 笔记02 文件上传、文件下载、类型转换器、国际化的支持
Struts2的上传 1. Struts2默认采用了apache commons-fileupload 2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload ...
- struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...
- Struts2笔记——利用token防止表单重复提交
在一些项目中经常会让用户提交表单,当用户点击按钮提交后,如果再次浏览器刷新,这就会造成表单重复提交,若是提交的内容上传至服务器并请求数据库保存,重复提交的表单可能会导致错误,然后跳转到错误界面,这是一 ...
- Struts2笔记——struts常用标签
使用struts标签前,首先要配置struts2架构,然后导入标签库,jsp插入如下语句: <%@taglib uri="/struts-tags" prefix=" ...
随机推荐
- C++中队列的建立和操作
什么是队列结构 队列结构是从数据运算来分类的,也就是说队列结构具有特殊的运算规则.而从数据的逻辑结构来看,队列结构其实就是一种线性结构.如果从数据的存储结构来进一步划分,队列结构可以分成两类. 顺序队 ...
- DNA甲基化及其测量方法(转)
转自声明的奥秘 www.lifeomics.com DNA甲基化与肿瘤发生: DNA甲基化水平和模式的改变是肿瘤发生的一个重要因素.这些变化包括CpG岛局部的高甲基化和基因组DNA低甲 ...
- 新安装的 ubuntu 下 make menuconfig 报错
环境:Ubtuntu 12.04 LTS 新安装的ubuntu 出现不能使用make menuconfig. 1.sudo apt-get update 更新软件 2.安装下面的软件 sudo apt ...
- C# 将数组转换为以逗号分隔的字符串
例子: string[] array = { "A", "B", "C", "D" }; string str = st ...
- Glance代码分析
V2版本的glance-api采用Proxy的方式来构建对象(对象套对象),有点类似装饰器模式,包裹的顺序是 Auth(外层) -> Notifier -> Policy -> Qu ...
- java整理(一)
1.方法重载:方法名称相同,参数的类型或个数不同.但是返回值类型不同,不是方法重载. 2.引用数据类型:数组,类,接口.内存地址分为两类,栈内存和对内存.栈内存保存的是对内存的地址,简单理解就是保存了 ...
- 测试之美 Part 1
1. 本人曾经在一次电话面试中被问到,为什么你作为一个测试人员,还要别人来告诉你要在哪些平台上去测试,你完全可以自己去定夺.下面的这段话是来自<测试之美>,我觉得很有逻辑的反驳了那位面试官 ...
- 我的省选 Day -12
Day -12 今天是三月份的最后一天,春天真的也就走过了1/3了呢. 昨晚做了个神秘而悲伤的梦.(这样子写下来会不会不太好.. 我梦见欢洛了. 那是在新校区的门口,我看见他,然后向他跑过去,他转身对 ...
- 原生JS轮播-各种效果的极简实现
寒假持续摸鱼中~此为老早以前博客的重写,当时还是分开写的,这里汇总重写,正好复习一遍~ 春招我来了! 所有有意思的,一股脑先扔进收藏,然后再也不看哈哈,真是糟糕. 今日事,今日毕,说起来容易. 当时竟 ...
- Sharepoint JSCOM 列表操作
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', retrieveListItemsInclude); //确保js文件加载,再执行方法 function ...