Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)

1:在Action中如何获得作用域(request,session,application)对象;

  取得Map(键值对映射集)类型的requet,session,application;

对数据操作的所有方法:(即把数据保存到域中)

主要使用的是方式2和方式3;

方式1:直接获取ServletApi,核心类是ServletActionContext提供的静态的方法;

 1 package com.bie.lesson04;
 2
 3 import javax.servlet.ServletContext;
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpSession;
 6
 7 import org.apache.struts2.ServletActionContext;
 8
 9 import com.opensymphony.xwork2.ActionSupport;
10
11 /**
12 * @author  Author:别先生
13 * @date Date:2017年9月11日 下午10:06:41
14 *
15 *
16 */
17 public class StrutsData extends ActionSupport{
18
19     /**
20      *
21      */
22     private static final long serialVersionUID = 1L;
23
24     @Override
25     public String execute() throws Exception {
26
27         //数据保存到域中
28         //方式一,直接拿到servletApi执行操作
29         HttpServletRequest request = ServletActionContext.getRequest();
30         HttpSession session = request.getSession();
31         ServletContext application = ServletActionContext.getServletContext();
32         //操作
33         request.setAttribute("request_data", "request_data");
34         session.setAttribute("session_data", "session_data");
35         application.setAttribute("application_data", "application_data");
36
37
38         return SUCCESS;
39     }
40 }

View Code

 方式2:通过ActionContext获取不同(代表request/session/application)的map;

 1 public class ScopeAction01 {
 2
 3     private Map<String,Object> request;
 4     private Map<String,Object> session;
 5     private Map<String,Object> application;
 6
 7
 8     public ScopeAction01(){
 9         request = (Map<String, Object>) ActionContext.getContext().get("request");
10         session = ActionContext.getContext().getSession();
11         application = ActionContext.getContext().getApplication();
12
13     }
14
15
16     public String execute(){
17         //向作用域中存储数据
18         request.put("requestKey", "requestValue");
19         session.put("sessionKey", "sessionValue");
20         application.put("applicationKey", "applicationValue");
21
22         return "success";
23     }
24
25 }

关键代码

方式3:实现接口的方法:(RequestAware/SessionAware/ApplicationAware);

 1 package com.bie.action01;
 2
 3 import java.util.Map;
 4
 5 import org.apache.struts2.interceptor.ApplicationAware;
 6 import org.apache.struts2.interceptor.RequestAware;
 7 import org.apache.struts2.interceptor.SessionAware;
 8
 9 /**
10 * @author 作者:别先生
11 * @version 创建时间:2017年5月7日 上午8:37:05
12 * 类说明
13 * 作用域的使用方法2
14 */
15
16 public class ScopeAction2 implements RequestAware,SessionAware,ApplicationAware{
17
18     private Map<String,Object> request;
19     private Map<String,Object> session;
20     private Map<String,Object> application;
21
22
23     public void setApplication(Map<String, Object> application) {
24         this.application = application;
25     }
26
27     public void setSession(Map<String, Object> session) {
28         this.session = session;
29     }
30
31     public void setRequest(Map<String, Object> request) {
32         this.request = request;
33     }
34
35     public String execute(){
36         //map使用put设置值
37         request.put("requestKey", "requestValue");
38         session.put("sessionKey", "sessionbValue");
39         application.put("applicationKey", "applicationValue");
40
41         return "success";
42     }
43
44
45 }

关键代码



方式1和方式2简介:

第一步: 引包,省去

第二步:配置Struts2的过滤器

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3   <display-name>struts2_20170221</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12
13   <!-- struts2过滤器 -->
14   <filter>
15       <!-- 过滤器名称 -->
16       <filter-name>struts2</filter-name>
17       <!-- 过滤器类 -->
18       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
19   </filter>
20   <!-- struts2过滤器映射 -->
21   <filter-mapping>
22       <!-- 过滤器名称 -->
23       <filter-name>struts2</filter-name>
24       <!-- 过滤器映射 -->
25       <url-pattern>/*</url-pattern>
26   </filter-mapping>
27
28 </web-app>

第三步:开发Action,方式一和方式二的对比

 1 package com.bie;
 2
 3 import java.util.Map;
 4
 5 import javax.servlet.ServletContext;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpSession;
 8
 9 import org.apache.struts2.ServletActionContext;
10
11 import com.opensymphony.xwork2.ActionContext;
12 import com.opensymphony.xwork2.ActionSupport;
13
14 /**
15 * @author BieHongLi
16 * @version 创建时间:2017年2月21日 下午4:46:14
17 *
18 */
19 public class FinalAction extends ActionSupport{
20
21     private static final long serialVersionUID = 1L;
22
23     @Override
24     public String execute() throws Exception {
25         //1:请求数据封装       2:调用service处理业务逻辑,拿到结果数据
26         //3:数据保存到域中
27
28         //【struts2和servlet耦合的方法,
29         //    比如获取目录application.getRealPath("");等等】
30         //Struts中对数据操作,方式1:直接拿到ServletApi,执行操作
31         /*HttpServletRequest  request=ServletActionContext.getRequest();
32         HttpSession session=request.getSession();
33         ServletContext application=ServletActionContext.getServletContext();
34
35         request.setAttribute("request_data", "request请求的数据");
36         session.setAttribute("session_data", "session请求的数据");
37         application.setAttribute("application_data", "application请求的数据");*/
38
39
40
41         //[推荐:解耦的方式实现对数据的操作,没有和servlet有耦合,
42         //  向域对象中存储值推荐]
43         //Struts中对数据操作,方式2:直接拿到ActionContext,执行操作
44         //getContext()发发一个静态方法,可以直接调用,返回值就是ActionContext
45         ActionContext ac=ActionContext.getContext();
46         //得到Strust对HttpServletRequest对象进行了封装,封装为了一个Map
47         //拿到表示request对象 的map
48         Map<String, Object>  request=ac.getContextMap();
49         //拿到session对象的map
50         Map<String, Object> session=ac.getSession();
51         //拿到application对象的map
52         Map<String, Object> application=ac.getApplication();
53
54         //数据
55         request.put("request_data", "request_data_actionContext");
56         session.put("session_data", "session_date_actionContext");
57         application.put("application_data", "application_date_actionContext");
58         return SUCCESS;
59     }
60
61 }

第四步:Struts2的配置文件。

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5
 6 <struts>
 7
 8     <!-- 声明包 -->
 9     <package name="finalPackage" extends="struts-default">
10         <action name="requestAction" class="com.bie.FinalAction">
11             <result name="success">success.jsp</result>
12         </action>
13
14         <action name="ImplAction" class="com.bie.ImplAction">
15             <result name="success">success.jsp</result>
16         </action>
17     </package>
18
19 </struts>


方式三:只有开发Action的过程不一样,其他一样,这里只写了开发Action的代码

 1 package com.bie;
 2
 3 import java.util.Map;
 4
 5 import org.apache.struts2.interceptor.ApplicationAware;
 6 import org.apache.struts2.interceptor.RequestAware;
 7 import org.apache.struts2.interceptor.SessionAware;
 8
 9 import com.opensymphony.xwork2.ActionSupport;
10
11 /**
12 * @author BieHongLi
13 * @version 创建时间:2017年2月21日 下午7:40:02
14 *
15 */
16 public class ImplAction extends ActionSupport
17     implements RequestAware,SessionAware,ApplicationAware{
18
19     private static final long serialVersionUID = 1L;
20     private Map<String, Object> request;
21     private Map<String, Object> session;
22      private Map<String,Object> application;
23
24     //struts2运行的时候,会把代表request的map对象注入
25     @Override
26     public void setRequest(Map<String, Object> request) {
27         this.request=request;
28     }
29
30     //struts2运行的时候,会把代表session的map注入
31     @Override
32     public void setApplication(Map<String, Object> session) {
33         this.session=session;
34     }
35
36     //struts2运行的时候,会把代表application的map注入
37     @Override
38     public void setSession(Map<String, Object> application) {
39         this.application=application;
40     }
41
42     @Override
43     public String execute() throws Exception {
44         request.put("request_data", "request_dataAware");
45         session.put("session_data", "session_dataAware");
46         application.put("application_data","application_dataAware");
47         return SUCCESS;
48     }
49 }

 

时间: 2024-09-12 07:52:04

Struts2中的数据处理的三种方式对比(Action中三种作用域request,session,application对象)的相关文章

Struts2中操作request,session,application的方法

  Map类型--request,session,application 真实类型--HttpServletRequest,HttpSession,ServletContext Map类型是Struts对真实类型的一个封装,会将真实类型映射到Map类型中   取得上述元素有以下4种方法 1  通过ActionContext来访问request,session,application对象 2  通过实现RequestAware.SessionAware.ApplicationAware接口来访问r

Struts2中的数据处理的三种方式对比

对数据操作的所有方法:(即把数据保存到域中) 主要使用的是方式2和方式3: 方式1:直接获取ServletApi,核心类是ServletActionContext提供的静态的方法; 方式2:通过ActionContext获取不同(代表request/session/application)的map: 方式3:实现接口的方法:(RequestAware/SessionAware/ApplicationAware); 方式1和方式2简介: 第一步: 引包,省去 第二步:配置Struts2的过滤器 1

JSP中的page,request,session,application

application|js|request|session application和session比较简单,这里主要说明request和page的作用范围.application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止.session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态.生命周期:会话超时,或者服务器端强制使会话失效.request:请求作用域,就是客户端的一次请求.page:一个J

struts2 获得request session application的四种方式

(一)Map(在web.xml中必须使用2.1以上的配置) public class LoginAction1 extends ActionSupport { private Map request;private Map session;private Map application; public LoginAction1() {request = (Map)ActionContext.getContext().get("request");session = ActionCont

php连接MySQL的两种方式对比_Mysql

记录一下PHP连接MySQL的两种方式. 先mock一下数据,可以执行一下sql. /*创建数据库*/ CREATE DATABASE IF NOT EXISTS `test`; /*选择数据库*/ USE `test`; /*创建表*/ CREATE TABLE IF NOT EXISTS `user` ( name varchar(50), age int ); /*插入测试数据*/ INSERT INTO `user` (name, age) VALUES('harry', 20), ('

SPRING 数据库密码加密存储 在配置文件的两种方式 下一篇第二种方式

分析 SPRING通过 1.property-placeholder spring3.1以前实现是PropertyPlaceholderConfigurer,3.1以后是PropertySourcesPlaceholderConfigurer <context:property-placeholder local-override="true" properties-ref="dataSourceProperties" file-encoding="

MVC中DevExpress DataGirdView 表单回发到Action中如何获取数据

问题描述 如DataGirdView定义2列:UserID,UserName实体层为UserModel,请问在Button按钮中回发整个表单数据到Action,DataGirdView中的数据如何获取并转换为List<Model>?麻烦详细说明,谢谢! 解决方案 解决方案二: 解决方案三:用ajax遍历表格构造json,自定义一个json模型绑定器,控制器接收.参考:http://forums.asp.net/t/1517358.aspx这个例子演示了这个过程(除了遍历表单构造数据需要你自己去

Java创建多线程的两种方式对比_java

采用继承Thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread()方法. 劣势:因为这种线程类已经继承了Thead类,所以不能再继承其它类. 示例代码: 复制代码 代码如下:  package org.frzh.thread;    public class FirstThread extends Thread{      private int i;           //重写run方法,run方法的方法体就是线程

实现 Java 平台的三种方式

广泛地说,只要能执行 Java bytecode 者,就可以称为 Java 平台(Java platform).大致上,实现 Java 平台的方式有三种,分别是: Java 虚拟机器(Java Virtual Machine,JVM) Java 操作系统(Java Operating System) Java 芯片(Java Chip) 以下就此三种 Java 平台提出解说,并比较之. Java 虚拟机器 所谓的 Java 虚拟机器,指的是在操作系统上执行的一种程序,此程序可以解读 Java b