一.请求参数封装

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的更多相关文章

  1. struts2笔记(3)

    关于回显: 如果是int型,默认就会回显为0,如果不想让回显,则Integer就好 //**************************************声明式验证************* ...

  2. struts2笔记(2)

    <context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...

  3. struts2笔记

    Struts2 中, HTML 表单将被直接映射到一个 POJO,通过params拦截器,类中定义对应属性,及对应set方法即可. Struts2 中,任何一个POJO都可以是一个action类. S ...

  4. struts2笔记4

    1.自定义struts拦截器 应用场景:如果用户登陆后可以访问action中的所有方法,如果用户没有登陆不允许访问action中的方法,并且提示“你没有操作权限” 1)两个页面,一个用户登陆user. ...

  5. struts2 笔记04 杂记

    流程: 1. StrutsPrepareAndExcuteFilter:StrutsPrepareAndExcuteFilter作为前端控制器,是整个Struts2的调度中心. 2. ActionMa ...

  6. struts2 笔记03 异常支持、防止页面刷新和后退、方法验证

    Struts2对异常支持(声明式异常.自动的异常处理), 异常处理(运行期异常事务自动回滚) 1. 自定义异常类,继承RuntimeException或Exception实现构造方法. 2. 配置异常 ...

  7. struts2 笔记02 文件上传、文件下载、类型转换器、国际化的支持

    Struts2的上传 1. Struts2默认采用了apache commons-fileupload  2. Struts2支持三种类型的上传组件 3. 需要引入commons-fileupload ...

  8. struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  9. Struts2笔记——利用token防止表单重复提交

    在一些项目中经常会让用户提交表单,当用户点击按钮提交后,如果再次浏览器刷新,这就会造成表单重复提交,若是提交的内容上传至服务器并请求数据库保存,重复提交的表单可能会导致错误,然后跳转到错误界面,这是一 ...

  10. Struts2笔记——struts常用标签

    使用struts标签前,首先要配置struts2架构,然后导入标签库,jsp插入如下语句: <%@taglib uri="/struts-tags" prefix=" ...

随机推荐

  1. koa2,koa1框架安装

    koa2版本安装: npm install koa@ -g hello2.js var Koa = require('koa'); var app = new Koa(); app.use(ctx = ...

  2. DOS查看端口占用及杀掉进程命令

    转载自:http://www.cnblogs.com/rainman/p/3457227.html 1. 查看端口占用 在windows命令行窗口下执行: netstat -aon|findstr & ...

  3. miRNA

    MicroRNA (miRNA)  是一类内生的.长度约为20-24个核苷酸的小 RNA,其在细胞内具有多种重要的调节作用.每个 miRNA 可以有多个靶基因的表达,而几个 miRNA 也可以调节同一 ...

  4. p2320&bzoj1192 鬼谷子的钱袋

    传送门(洛谷) 传送门(bzoj) 题目 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一 ...

  5. Linux 启动顺序

    Linux 启动顺序:1. BIOS自检2. 运行系统内核并检测硬件3. 运行系统的第一个进程init4. init读取系统引导配置文件/etc/inittab中的信息进行初始化            ...

  6. C# 写 LeetCode easy #28 Implement strStr()

    28.Implement strStr() Implement strStr(). Return the index of the first occurrence of needle in hays ...

  7. 反射实现数据库增删改查DAO及DAOImpl源代码(二)

    配置文件源码 配置文件主要用于配置数据库对象(javaBean),配置表名,配置查询条件,配置删除条件 文件名称:objectConfigPath.properties 这个配置文件里面配置的是另外一 ...

  8. XML之DTD

    前言 上篇我们知道了,XML的应用范围还是很广的,那么无规矩不成方圆,如果我们每个人写XML的风格不一致,那么读起来是不是很费劲呢?所以格式良好的XML就渐渐的被我们所需要. 内容 格式良好指:拥有正 ...

  9. 移动web 的viewport设置注意事项的详细解释 六一快乐=-_-_

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 今天实现一个T-sql的小编程,分享给大家,看看就好~(列值赋值)

    介绍:将一个表的某列值插入到另一个表的列里,暂定为表aa和表nn DECLARE @a int set @a=1 while @a<nn.列1.length    --(注:语法不对你可以用查询 ...