- 浏览: 312603 次
- 性别:
- 来自: 山西太原
文章分类
最新评论
-
A741841403:
core-renderer-CN.jar这个包是怎么引入的啊, ...
flying saucer 中文不显示、以及中文换行的问题解决 -
A741841403:
您好,能提供下,中文字体换行包的jar文件吗
flying saucer 中文不显示、以及中文换行的问题解决 -
nightw13h:
楼主 我也遇到了这个问题 照你的套路也把问题解决了 当时没 ...
maven 单元测试 Absent Code attribute in method that is not native or abstract in cl -
devilyard:
借地请教个问题:fatal: open /dev/null o ...
msysGit 安装后的配置 -
tiancai2:
如果在action中定义不是string类型的,而是一个Per ...
Struts2 、jquery之ajaxfileupload异步上传插件
非IoC方式
要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前 Action的上下文对象。 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。
- <pre name="code" class="java"><pre name="code" class="java">///我们平时用的,这个很好理解
- HttpServletRequest request = ServletActionContext.getRequest ();
- HttpServletResponse response=ServletActionContext.getResponse();
- HttpSession session=ServletActionContext.getRequest().getSession();
- ///////通过ActionContext获得
- ActionContext ac = ActionContext.getContext();
- //request
- HttpServletRequest request2 = (HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);
- //response
- HttpServletResponse response2 = (HttpServletResponse)ac.get(ServletActionContext.HTTP_RESPONSE);
- //session以下是错误的,会报异常
- java.lang.ClassCastException:
- org.apache.struts2.dispatcher.SessionMap cannot be cast to javax.servlet.http.HttpSession
- //对于session因为从ActionContext 获取的是Map类型,不能强转化成HttpSession类型,这是ActionContext与ServletActionContext的区别<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">
- HttpSession session2=(HttpSession)ac.get(ServletActionContext.SESSION);//错
- HttpSession session3=(HttpSession)ac.getContext().getSession();//同上
- HttpSession session4=(HttpSession)ac.get(ActionContext.SESSION);//错
- //session对象被封装成Map,我们对Map操作就可以
- Map session5=ac.getSession();
- Map session6=ServletActionContext.getContext().getSession();
- session5.put("key5", "value5");
- session6.put("key6", "value6");
写个例子测试一下:
- package com.visit.frame.test;
- import java.util.Map;
- import javax.servlet.ServletRequest;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.struts2.*;
- import org.apache.struts2.dispatcher.*;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class HelloAction extends ActionSupport{
- private String leaveMessage;
- public String execute(){
- this.setLeaveMessage("here me");
- ///我们平时用的,这个很好理解
- HttpServletRequest request = ServletActionContext.getRequest ();
- // HttpServletResponse response=ServletActionContext.getResponse();
- HttpSession session=ServletActionContext.getRequest().getSession();
- ///////通过ActionContext获得
- ActionContext ac = ActionContext.getContext();
- //request
- HttpServletRequest request2 = (HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);
- //response
- // HttpServletResponse response2 = (HttpServletResponse)ac.get(ServletActionContext.HTTP_RESPONSE);
- //session
- Map session2= (Map) ac.get(ServletActionContext.SESSION);
- Map session3=ac.getContext().getSession();//同上
- Map session4=(Map) ac.get(ActionContext.SESSION);
- //session对象被封装成Map,我们对Map操作就可以
- Map session5=(Map)ac.getSession();
- Map session6=ServletActionContext.getContext().getSession();
- //
- request.setAttribute("request", "request0");
- session.setAttribute("session", "session0");
- request2.setAttribute("request2", "request2");
- session2.put("session2", "session2");
- session3.put("session3", "session3");
- session4.put("session4", "session4");
- session5.put("session5", "session5");
- session6.put("session6", "session6");
- return SUCCESS;
- }
- public String getLeaveMessage() {
- this.leaveMessage="hhhh";
- return leaveMessage;
- }
- public void setLeaveMessage(String leaveMessage) {
- this.leaveMessage = leaveMessage;
- }
- }
请求的页面是:
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <html>
- <head><title>Simple ha page</title></head>
- <body>
- <h3>hahaha</h3>
- <h3>you success,ha</h3>
- <br>
- request---<%=request.getAttribute("request") %><br>
- request2----<%=request.getAttribute("request2") %><br>
- session--<%=session.getAttribute("session") %><br>
- <br>------
- session2--<%=session.getAttribute("session2") %><br>
- session3--<%=session.getAttribute("session3") %><br>
- session4--<%=session.getAttribute("session4") %><br>
- session5--<%=session.getAttribute("session5") %><br>
- session6--<%=session.getAttribute("session6") %><br>
- </body>
- </html>
页面显示:
hahaha
you success,ha
request---request0
request2----request2
session--session0
------ session2--session2
session3--session3
session4--session4
session5--session5
session6--session6
//////////////////////////////以下转载/////////////////////////////////////////////////////////
在Struts1.*中,要想访问request、response以及session等Servlet对象是很方便的,因为它们一直是作为形参在各个方法之间进行传递的,而在Struts2中我们就很难看到它们的芳踪了,因为我们获得表单中的值都是通过预先设置好了的get方法来得到的,那么如果有些参数我们必须通过request.getParametre或者session.getAttribute来得到,那么应该怎么做呢?按照Max的教程上的说法,可以分为两种:IoC方式和非IoC方式,如何理解这两种方式的区别呢?IoC是Spring里面的特征之一,字面意思是反转控制,说白了就是依赖注入,比方说类A依赖类B,那么就主动的给A注入一个类B的对象,下面看一下这两种方法的具体实现。1.非Ioc方式这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类,具体的方法如下所示。获得request对象:
- HttpServletRequest request = ServletActionContext.getRequest ();
- ActionContext ct= ActionContext.getContext()
- HttpServletRequest request=
- (HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);
获得session对象:在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。
- Map session=ActionContext.getSession();
- Map session=(Map)ActionContext.getContext().getActionContext.SESSION);
得到这个SessionMap之后我们就可以对session进行读写了,如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作,我们不必再去碰底层的session了。2.IoC方式这种方式相对来说变化就比较少了,具体流程如下所示。获得request对象:第一步:让action实现ServletRequestAware接口第二步:在action中声明一个HttpServletRequest类型的实例变量第三步:在action中实现ServletRequestAware接口的setServletRequest方法,实现方式很简单,如下所示。private HttpServletRequest request;public void setServletRequest(HttpServletRequest request) {this.request = request;}获得Session对象(注意,此时的session是SessionMap类型):第一步:让action实现SessionAware接口第二步:在action中声明一个HttpServletRequest类型的实例变量第三步:在action中实现SessionAware接口的setSession方法,实现方式很简单,如下所示。private Map session;publicvoid setSession(Map session) {this. session = session;}以下是另一篇关于得到Request和Session的文章:
- 在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到
- 1.通过ActionContext class中的方法getSession得到
- 2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作
- 下面先看一个采用第一种方式,在action中得到session的例子
- package s2.ex.action;
- import java.util.Map;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class SessionTestAction extends ActionSupport {
- public String execute() {
- ActionContext actionContext = ActionContext.getContext();
- Map session = actionContext.getSession();
- session.put("USER_NAME", "Test User");
- return SUCCESS;
- }
- }
- 在这个例子中,通过ActionContext得到session,并往session里放置一个key为USER_NAME,值为Test User的内容。
- 下面是一个实现org.apache.struts2.interceptor.SessionAware接口来对session操作的例子
- package s2.ex.action;
- import java.util.Map;
- import org.apache.struts2.interceptor.SessionAware;
- import com.opensymphony.xwork2.ActionSupport;
- public class SessionTest1Action extends ActionSupport implementsSessionAware {
- private Map session;
- public void setSession(Map session) {
- this.session = session;
- }
- public String execute() {
- this.session.put("USER_NAME", "Test User 1");
- return SUCCESS;
- }
- }
- 在这个例子中实现了接口SessionAware中的setSession方法。
- 上面两种方式都可以得到session,能实现的功能都是一样的。
- 这里推荐通过第二种方式来使用session,原因是便于做单体测试,用第二种方式,只需要构造一个Map就可以对action class进行单体测试了。
- 在一个项目中可能会有很多action都需要用到session,如果每个action都来实现org.apache.struts2.interceptor.SessionAware这个接口,可能会显得比较麻烦,所以建议作一个抽象的BaseAction类来实现org.apache.struts2.interceptor.SessionAware接口,以后所有的action只要继承这个BaseAction就可以了。
- 下面是一个如何在JSP中使用session的例子。
- <%@ page contentType="text/html; charset=UTF-8" %>
- <%@page pageEncoding="utf-8" %>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <html>
- <head>
- <title>Session Test</title>
- </head>
- <body>
- <h1><s:property value="#session.USER_NAME"/></h1>
- <h1></h1>
- </body>
- </html>
- 一般在项目中往往会往session里放置一个Object,必如说user,user里有个boolean admin和String userName,如果user里存在isAdmin的方法,在jsp中可以通过<s:if test="#session.user.admin">来判断用户有没有管理权限,通过<s:propertyvalue="#session.user.userName">或者来取得用户名。
发表评论
-
普通类调用Spring bean对象
2013-10-31 13:35 1030转:http://412887952-qq-com. ... -
spring mvc绑定对象String转Date
2013-07-31 15:20 945使用spring的mvc,直接将页面参数绑定到对象中,对象中 ... -
Spring与Hibernate调整自动扫描时的陷阱
2013-07-09 17:09 1137Spring与Hibernate整合自动扫描时的陷阱 在配置 ... -
Java多线程大总结
2013-03-27 10:37 1153转载:http://50vip.com/blog.php?i ... -
Hibernate中最重要、最常考察的知识点整合和总结
2013-03-27 10:31 1136一、简述 Hibernate 和 JDB ... -
Spring MVC Ajax 操作
2012-12-16 14:42 1508配置文件: <!-- spring ... -
Quartz 任务调度
2012-10-16 13:33 11521.实现一个管理类 ,对计时的程序进行管理 [ja ... -
struts2注解
2012-03-30 14:28 1373一、配置web.xml <fil ... -
通过程序命令查找类文件
2012-03-09 14:40 839import java.io.File; imp ... -
java的double的大数值时 如何才能不显示成科学计数法
2012-02-14 13:33 3494Double d = new Double(" ... -
Struts2截取字符串的方法
2011-12-06 15:46 1059在开发中,经常会遇到字符串太长,需要适当截取后再显示的问题,其 ... -
Struts2的properties配置文件详解
2011-10-26 15:11 759### 指定加载struts2配置文件管理器,默认 ... -
hibernate 原生态sql 别名 查询 取值
2011-09-07 18:03 1926//查询的sql语句 StringBuffer sql = ... -
spring filter 过滤器 注入 对象 属性
2011-09-05 18:30 3233配置一: <filter> & ... -
java ip 查询定位 QQwry.dat
2011-09-05 18:00 1157ip定位 已经不是什么新的技术,但是在做项目中却会常常用到。找 ... -
jsp struts2 数据采集
2011-08-31 11:58 863转到... -
jsp 获得当前url以及url参数
2011-08-13 15:57 4871//获得当前url StringBuffer url = n ... -
jsp获得访问者来源和request.getHeader方法的内容
2011-06-16 16:31 3245System.out.println("Protoc ... -
Struts2.0自定义标签
2011-03-21 10:58 10031.编写自定义标签类。 2. 创建taglib文件(.tld) ... -
s2sh整合所有jar包以及json整合
2010-11-01 09:06 1621s2sh整合所有jar包以及json整合jar下载 详细配置. ...
相关推荐
以下将详细介绍如何在Struts2的Action中获取request、response、session。 ### 1. 使用ActionContext获取request、response、session Struts2的Action可以通过`ActionContext`来间接获取`request`、`response`和`...
在Struts2中,虽然request、response和session被隐藏起来,但是提供了多种便捷的方式来获取这些对象,使得开发者可以在自定义的方法中灵活地使用它们。通过使用Struts2提供的接口、注解或ActionContext,开发者能够...
在Struts2中,ActionContext不仅仅是获取request和response的工具,它还包含了其他有用的上下文信息,如session、application等。例如,你可以通过ActionContext获取session中的数据: ```java Map, Object> ...
在Struts2框架中,理解并正确使用request、response、session和application范围对于有效地管理数据和状态至关重要。这些范围帮助我们在Web应用程序中实现逻辑和数据流的分离,提高代码的可维护性和可扩展性。通过...
在 Struts2 中,处理用户请求时经常需要使用到 Servlet 的内置对象,比如 Request、Session 和 Application,这些对象可以帮助开发者存储和获取数据。然而,在实际应用中,为了避免代码与 Servlet API 过度耦合,...
在Struts2中,获取Response对象是常见的操作,用于设置HTTP响应头、重定向、或者向客户端发送数据。以下是对"struts2获取response的方法"的详细说明。 1. **ActionSupport类的实现** Struts2中的Action类通常会...
以下是关于如何在Struts2中Action获取JSP页面参数以及相关上下文对象的详细说明: 1. **ActionContext获取请求参数** - `ActionContext`是Struts2框架中的一个重要组件,它是一个存储执行Action时所需对象的容器,...
6. **URL重写和URL生成**:Servlet API提供了`RequestDispatcher`用于转发和重定向,而在Struts2中,`ActionSupport`类的`redirectAction()`和`generateUrl()`方法可以帮助我们生成和重定向到特定的Action。...
2. Struts2的ActionContext保存了当前请求的上下文信息,包括参数、session、request和response等。 3. 拦截器链开始执行,其中的ParameterInterceptor负责将请求参数绑定到Action实例的属性上,使用OGNL(Object-...
本文将深入探讨如何在Struts2中访问Servlet API。 首先,理解Struts2的执行流程至关重要。当一个请求到达服务器时,Struts2的过滤器(通常名为`FilterDispatcher`或`StrutsPrepareAndExecuteFilter`)会捕获这个...
- **Action类**:在Struts2中,Action类是处理用户请求的中心组件,它封装了业务逻辑,并通过调用Service层来处理实际的业务操作。 - **配置文件**:`struts.xml`是Struts2的主要配置文件,用于定义Action、结果...
而对Struts2来说,需要action时都要重新new出一个对象。 四、Namespace Namespace决定了action的访问路径,默认为“”,可以接受所有路径的action。Namespace后面可以加/也可以加/xx或/xx/yy,则action的访问路径...
通过以上分析可以看出,在Struts2项目中配置过滤器是一种非常实用的方法,可以有效地实现对用户请求的预处理工作。需要注意的是,在实际应用中还应考虑更多细节问题,比如如何处理不同环境下的配置差异、如何更灵活...
1. **Action与结果**:在Struts2中,业务逻辑处理主要由Action类负责。Action类执行特定的操作,并通过Result返回不同的视图。Result可以是JSP、FreeMarker模板或者其他类型的视图。 2. **拦截器(Interceptors)**...
10. **Action上下文(ActionContext)**:存储了当前请求的环境信息,如Session、Request、Response、Parameters等,是Action与其他组件通信的桥梁。 通过深入学习并熟练运用这些知识点,开发者可以高效地利用...
#### Struts2中获取request、response和session对象 在Struts2中,可以通过注入的方式直接在Action中使用`HttpServletRequest`, `HttpServletResponse`和`HttpSession`对象,无需手动从Servlet API中获取。这简化了...
5. **ActionContext**:ActionContext封装了当前线程的上下文信息,包括ValueStack、Parameters、Session、Request和Response等。它使得在不同线程间共享数据变得简单,同时也提供了线程安全的环境。 6. **...
3. **ActionContext**:存储请求上下文信息,包括Action实例、值栈、Session、Request、Response等。 四、Struts2的注解配置 Struts2支持使用注解进行配置,简化XML配置文件,提高开发效率。例如,@Action、@...
7. **ActionContext**:封装了当前请求的所有上下文信息,包括session、request、response、parameters等,可以用来在Action之间共享数据。 8. **Struts2的注解支持**:Struts2提供了丰富的注解,如@Action、@...
1. **Action**: Struts2中的Action是业务逻辑处理的核心,它负责接收用户请求,处理数据,并返回结果。每个Action类通常对应一个特定的用户交互场景。 2. **Action Mapping**: 这是配置中定义Action与URL路径的映射...