一.请求参数封装

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. 12、scala隐式转换与隐式参数

    一.隐式转换 1.介绍 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象. 通过这些功能,可以实 ...

  2. 功防技术与实践第1.2章,kali初步了解

    20169314 2016-2017-2 <网络攻防实践>/<网络攻击与防范>第2周学习总结 一.教材学习内容总结 1.hacker和cracker的区别 网络攻防分三部分:系 ...

  3. 微信小程序分列显示数据

    效果图 wxml代码 <view class='onehandle5'> <block wx:for="{{3}}" wx:for-index="k&q ...

  4. [WIP]laravel 构成的概念

    创建: 2019/06/21 生命周期  概论    检索service provider               service container                     se ...

  5. 《OD学hadoop》20160903某旅游网项目实战

    一.大数据的落地点 1.数据出售 数据商城:以卖数据为公司的核心业务 2. 数据分析 百度统计 友盟 GA IBM analysis 3.搜索引擎 4. 推荐系统 mahout 百分比 5.精准营销 ...

  6. 2017-10-6 清北刷题冲刺班p.m

    1.数组异或 #include<iostream> #include<cstdio> #define maxn 100010 #define mod 1000000007 us ...

  7. 关于在SSM框架下使用PageHelper

    首先,如果各位在这块配置和代码有什么问题欢迎说出来,我也会尽自己最大的能力帮大家解答 这些代码我都是写在一个小项目里的,项目的github地址为:https://github.com/Albert-B ...

  8. nodejs + webpack4 + babel6 结合写Chrome浏览器插件记录

    最近任务不忙,有时间了看一下Chrome插件相关的东西,于是想用nodejs + webpack写一个能直出插件的小工具. 1.nodejs + babel6 + webpack4 在写之前,是有把它 ...

  9. 你的php

    最开始学习做网页,用的是HTML,现在开始php了,那么要想用php,首先你得安装对不对,那么问题来了,你上哪安去啊(一看小编就是东北人),那么小编给各位提供了两个链接(不要告诉其他人哦)https: ...

  10. noi省选 [九省联考2018]一双木棋题解(状压dp)

    比浙江简单多了........ 题目转送:https://www.luogu.org/problemnew/show/P4363 分析: 我们注意到n和m都很小,考虑一下状压dp. 显然,棋子摆成的形 ...