一.请求参数封装

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. Flask03 路由控制(转换器)、反转、请求方法控制

    1 提出问题 如何实现前端传过去的路径时动态的(即:多个url对应一个url视图函数) 例如: 浏览器中输入 http://127.0.0.1:5000/test/good/ 或者 http://12 ...

  2. oracle 新增字段

    alter table shop_procategory add (category_ORDER_FIELD number(10) default '0' not null);comment on c ...

  3. cocos2dx之tolua++全面分析(一):tolua++工具本身

    在cocos2dx/tools/tolua++下面,有大量pkg文件,这些是按tolua++要求格式写好的.需要导出到lua中的c++类描述文件. 每当在c++类里增加了新函数需要导出时,应同步修改相 ...

  4. 292C Beautiful IP Addresses

    传送门 题目 The problem uses a simplified TCP/IP address model, please read the statement carefully. An I ...

  5. JQuery获取body的大小

    $('body').height(); $('body').width();

  6. opesntack基础知识-软件包历史脉络

    软件包管理 软件包管理是每个OpenStack项目的基础,其目的是用来将项目代码打包成源码包或者二进制包进行分发.一个项目的代码可能会被打包放到PyPI上,这样你可以通过pip命令安装这个包:也可能会 ...

  7. [Windows]获取当前时间(年/月/日/时/分/秒)

    struct tm* GetCurTime(time_t inTime) { struct tm* curTime = localtime(&inTime); curTime->tm_y ...

  8. iOS模拟器的应用沙盒在MAC中的位置

    每个iOS应用都有自己专属的应用沙盒.分别为 应用程序包 Documents/ Library/Caches/ Library/Preferences/ tmp/ 当运行模拟时,在MAC下找到对应路径 ...

  9. 解读人:闫克强,Metabolic and gut microbial characterization of obesity-prone mice under high-fat diet(高脂饮食下易胖倾向小鼠的代谢和肠道微生物菌群特征分析)

    单位: 上海中医药大学 蚌埠医学院 上海交通大学附属第六人民医院 夏威夷大学癌症中心 第二军医大学 技术:非靶向代谢组学,16S rRNA测序技术 一. 概述: 本研究对小鼠进行高脂饮食,根据体重增长 ...

  10. JSONObject,JSONArray,String,Map间的互转

    引言      在平常的Web项目开发过程中,json和String.map是最常用的类型和返回结果集,其中也经常会涉及到之间的各种相互转换,下边就总结一下: 1.String转JSONObject ...