一.请求参数封装

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. Entity Framework Code-First(8):Configure Domain Classes

    Configure Domain Classes in Code-First: We learned default Code-First Conventions in the previous se ...

  2. 6.5 通过命令安装git

    本来是一头雾水,以为很麻烦,结果,一句命令就搞定: 安装完后,在搜索框搜索,即出现github.

  3. AI学习指南

    这是一份关于如何学习深度学习以及为AI面试做准备的指南,个人觉得写的很不错,文章中还有很多有用的资料链接,源自机器之心,下面是文章的链接: https://mp.weixin.qq.com/s/kKB ...

  4. Hashtable类中的四种遍历方法对比

    要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...

  5. jquery抽奖插件+概率计算

    写了一个抽奖的jquery插件和计算概率的方法, 结合起来就是一个简单的概率抽奖, 不过实际项目中基本不会把抽奖概率的计算放在前端处理~. demo lottery.jquery.js $.fn.ex ...

  6. C# 原码与补码的转换

    /// <summary> /// 求一个16位数数的补码 /// </summary> /// <param name="OriginalCode" ...

  7. OpenStack基础知识-项目打包的步骤

    学习过包管理相关的知识后,我们就要以OpenStack的方法来创建一个我们自己的项目.这个项目的名称是webdemo,就是一个简单的web服务器.这个项目会贯穿这个系列文章.在本文中,我们首先要创建w ...

  8. go语言web开发框架_Iris框架讲解(六):Session的使用和控制

    在实际的项目开发中,我们会经常有业务场景使用到Session功能.在iris框架中,也为我们提供了方便使用,功能齐全的Session模块.Session模块的源码目录为kataras/iris/ses ...

  9. 使用pods添加第三方的时候,出现ld: library not found for -lpop

    ld: library not found for -lpop 错误,是在使用pods添加第三方的时候,出现的编译错误,同时伴随着的是error: linker command failed with ...

  10. 高斯消元法的C++简单实现

    高斯消元法 首先,我们导入几个概念. 定义1: 一个矩阵称为阶梯形(行阶梯形),若它有以下三个性质: 1.每一非零行在每一零行之上: 2.某一行的先导元素所在的列位于前一行先导元素的后面: 3.某一行 ...