- 浏览: 301591 次
- 性别:
- 来自: 山西太原
文章分类
最新评论
-
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 974转:http://412887952-qq-com. ... -
spring mvc绑定对象String转Date
2013-07-31 15:20 897使用spring的mvc,直接将页面参数绑定到对象中,对象中 ... -
Spring与Hibernate调整自动扫描时的陷阱
2013-07-09 17:09 1093Spring与Hibernate整合自动扫描时的陷阱 在配置 ... -
Java多线程大总结
2013-03-27 10:37 1102转载:http://50vip.com/blog.php?i ... -
Hibernate中最重要、最常考察的知识点整合和总结
2013-03-27 10:31 1097一、简述 Hibernate 和 JDB ... -
Spring MVC Ajax 操作
2012-12-16 14:42 1465配置文件: <!-- spring ... -
Quartz 任务调度
2012-10-16 13:33 10821.实现一个管理类 ,对计时的程序进行管理 [ja ... -
struts2注解
2012-03-30 14:28 1318一、配置web.xml <fil ... -
通过程序命令查找类文件
2012-03-09 14:40 797import java.io.File; imp ... -
java的double的大数值时 如何才能不显示成科学计数法
2012-02-14 13:33 3354Double d = new Double(" ... -
Struts2截取字符串的方法
2011-12-06 15:46 1019在开发中,经常会遇到字符串太长,需要适当截取后再显示的问题,其 ... -
Struts2的properties配置文件详解
2011-10-26 15:11 720### 指定加载struts2配置文件管理器,默认 ... -
hibernate 原生态sql 别名 查询 取值
2011-09-07 18:03 1805//查询的sql语句 StringBuffer sql = ... -
spring filter 过滤器 注入 对象 属性
2011-09-05 18:30 3188配置一: <filter> & ... -
java ip 查询定位 QQwry.dat
2011-09-05 18:00 1096ip定位 已经不是什么新的技术,但是在做项目中却会常常用到。找 ... -
jsp struts2 数据采集
2011-08-31 11:58 795转到... -
jsp 获得当前url以及url参数
2011-08-13 15:57 4824//获得当前url StringBuffer url = n ... -
jsp获得访问者来源和request.getHeader方法的内容
2011-06-16 16:31 3202System.out.println("Protoc ... -
Struts2.0自定义标签
2011-03-21 10:58 9541.编写自定义标签类。 2. 创建taglib文件(.tld) ... -
s2sh整合所有jar包以及json整合
2010-11-01 09:06 1545s2sh整合所有jar包以及json整合jar下载 详细配置. ...
相关推荐
Struts2的Action中获得request response session几种方法
(五) jsp内置对象(request,response.session,out) 121 1. request和response 121 2. session 122 (六) Servlet的 xml配置 126 1. xml的文件结构 127 2. 通过web.xml配置文件访问servlet的流程 129 (七) servlet里面...
struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet....
全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...
此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别? Java Bean 是可...
• Before passing it to the Action class, Struts will also conduct form state validation by calling the validation() method on UserActionForm. Note: This is not always wise to do. There might be ways ...
答:Struts1和Struts2是两个完全不同的框架,Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts2以核心控制器FilterDispatcher为基础,包含了框架内部的控制流程和处理机制。 ...
1、struts2对servlet封装(request,response) ,资源调配和资源的映射 2、框架设计的思想 istruts 配置,过滤器,反射 istruts.properties 3、starts2的使用思路 1、jar 2、配置文件 3、常用类 ...
76 5.5.2 JavaBean动作 78 5.6 隐式对象 78 5.6.1 request对象 78 5.6.2 response对象 78 5.6.3 application对象 78 5.6.4 out对象 79 5.6.5 page对象 79 5.6.6 session对象 79 5.6.7 exception对象 80 5.6.8 ...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 20、EJB与JAVA BEAN的区别? Java Bean 是可复用...
我就是靠这个文档实现logic:iterate的循环的 struts 标签 logic:iterate使用 logic:iterate <br>第一页 是struts官方的说明, 第二页 是个例子 第三页 是我实现的arrayList放入标签的方法。 这是页面...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...