- 浏览: 632742 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
lizhuang:
这个方法的内部实现主要是依赖于类加载器,一般的自己实现的类是用 ...
Java中getResourceAsStream的用法 -
prince4426:
回答评论都很精彩
Java中getResourceAsStream的用法 -
kexuetou:
美人如此多娇 写道可能这样总结更好,路径前不带'/',则是相对 ...
Java中getResourceAsStream的用法 -
guoxin91:
...
Java中getResourceAsStream的用法 -
美人如此多娇:
可能这样总结更好,路径前不带'/',则是相对路径;若带,则是绝 ...
Java中getResourceAsStream的用法
在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest、HttpSession和ServletContext。Struts 2框架让我们可以直接访问和设置action及模型对象的数据,这降低了对HttpServletRequest对象的使用需求,但在某些应用中,我们可能会需要在action中去访问HttpServletRequest对象以及其他两种对象,例如,用户登录成功后,我们应该将用户信息保存到Session中。
Struts 2提供了多种方式来访问上述的三种对象,归结起来,可以划分为两大类:与Servlet API解耦的访问方式和与Servlet API耦合的访问方式.
与Servlet API解耦的访问方式
为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取数据。
要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类。
ActionContext是action执行的上下文,在ActionContext中保存了action执行所需的一组对象,包括parameters、request、session、application和locale等。ActionContext类定义了如下方法,用于获取HttpServletRequest、HttpSession和ServletContext对应的Map对象。
Ø public Object get(Object key)
ActionContext类没有提供类似getRequest()这样的方法来获取封装了HttpServletRequest的Map对象。要得到请求Map对象,你需要为get()方法传递参数“request”。
Ø public Map getSession()
获取封装了HttpSession的Map对象。
Ø public Map getApplication()
获取封装了ServletContext的Map对象。
通过ActionContext来获取request、session和application对象的LoginAction:
import java.util.Map; import com.opensymphony.xwork2.ActionContext; public class LoginAction { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @SuppressWarnings("unchecked") public String execute() { ActionContext context = ActionContext.getContext(); Map request = (Map) context.get("request"); Map session = context.getSession(); Map application = context.getApplication(); // 在请求中放置欢迎信息。 request.put("greeting", "欢迎您来到程序员之家"); // 在session中保存password属性 session.put("password", password); // 统计用户访问量,在application中保存用户访问量数据 Integer count = (Integer) application.get("counter"); if (null == count) count = 1; else count++; application.put("counter", count); return "success"; } }
在成功页面中,可以使用JSP内置的表达式语言来访问request、session和application范围的数据:
<%@ page contentType="text/html;charset=GBK" %> <html> <head><title>欢迎页面</title></head> <body> <h3>${sessionScope.username},${requestScope.greeting}。<br> 本站的访问量是:${applicationScope.counter}</h3> </body> </html>
除了利用ActionContext来获取request、session和application对象这种方式外,Action类还可以实现某些特定的接口,让Struts 2框架在运行时向Action实例注入request、session和application对象。与之对应的三个接口和它们的方法如下所示:
Ø org.apache.struts2.interceptor.RequestAware
框架利用该接口,向Action实例注入request Map对象。该接口只有一个方法,如下:
— public void setRequest(Map request)
Ø org.apache.struts2.interceptor.SessionAware
框架利用该接口,向Action实例注入session Map对象。该接口只有一个方法,如下:
— void setSession(Map session)
Ø org.apache.struts2.interceptor.ApplicationAware
框架利用该接口,向Action实例注入application Map对象。该接口只有一个方法,如下:
— void setApplication(Map application)
通过接口注入来获取request、session和application对象的LoginAction:
import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; @SuppressWarnings("unchecked") public class LoginAction2 implements RequestAware, SessionAware, ApplicationAware { private Map request; private Map session; private Map application; private String name; private String password; public void setRequest(Map request) { this.request = request; } public void setSession(Map session) { this.session = session; } public void setApplication(Map application) { this.application = application; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { // 在请求中放置欢迎信息。 request.put("greeting", "欢迎您来到程序员之家"); // 在session中保存user对象 session.put("password", password); // 统计用户访问量,在application中保存用户访问量数据 Integer count = (Integer) application.get("counter"); if (null == count) count = 1; else count++; application.put("counter", count); return "success"; } }
LoginAction类实现了RequestAware、SessionAware和ApplicationAware接口,框架在运行时会调用这三个接口中的方法,向LoginAction2注入request、session和application对象。在execute()方法中不再需要访问ActionContext,因此我们删除了与之相关的代码。
与Servlet API耦合的访问方式
直接访问Servlet API将使你的Action与Servlet环境耦合在一起,我们知道对于HttpServletRequest、HttpServletResponse和ServletContext这些对象,它们都是由Servlet容器来构造的,与这些对象绑定在一起,测试时就需要有Servlet容器,不便于Action的单元测试。但有时候,我们又确实需要直接访问这些对象,那么当然是以完成任务需求为主。
要直接获取HttpServletRequest和ServletContext对象,可以使用org.apache.struts2. ServletActionContext类,该类是ActionContext的子类,在这个类中定义下面两个静态方法:
Ø public static HttpServletRequest getRequest()
得到HttpServletRequest对象。
Ø public static ServletContext getServletContext()
得到ServletContext对象。
此外,ServletActionContext类还给出了获取HttpServletResponse对象的方法,如下:
Ø public static HttpServletResponse getResponse()
注意:ServletActionContext类并没有给出直接得到HttpSession对象的方法,HttpSession对象可以通过HttpServletRequest对象来得到。
除了上述的方法调用得到HttpServletRequest和ServletContext对象外,还可以调用ActionContext对象的get()方法,传递ServletActionContext.HTTP_REQUEST和ServletActionContext.SERVLET_CONTEXT键值来得到HttpServletRequest和ServletContext对象,如下所示:
Ø ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
得到与ServletActionContext.HTTP_REQUEST键值绑定的HttpServletRequest对象。
Ø ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);
得到与ServletActionContext.SERVLET_CONTEXT键值绑定的ServletContext对象。
同样的,也可以向ActionContext的get()方法传递ServletActionContext.HTTP_ RESPONSE键值来得到HttpServletResponse对象,如下:
Ø ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
建议读者采用第一种方式来获取HttpServletRequest和ServletContext对象,这样简单而又清晰。
通过ServletActionContext来获取HttpServletRequest和ServletContext对象的LoginAction:
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; public class LoginAction { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext context = ServletActionContext.getServletContext(); // 在请求中放置欢迎信息。 request.setAttribute("greeting", "欢迎您来到程序员之家"); // 在session中保存user对象 session.setAttribute("password", password); // 统计用户访问量,在application中保存用户访问量数据 Integer count = (Integer) context.getAttribute("counter"); if (null == count) count = 1; else count++; context.setAttribute("counter", count); return "success"; } }
除了利用ServletActionContext来获取HttpServletRequest对象和ServletContext对象这种方式外,Action类还可以实现ServletRequestAware和ServletContextAware接口,由Struts 2框架向Action实例注入HttpServletRequest和ServletContext对象。
org.apache.struts2.interceptor.ServletRequestAware接口只有一个方法,如下所示:
Ø void setServletRequest(HttpServletRequest request)
org.apache.struts2.util.ServletContextAware接口也只有一个方法,如下所示:
Ø void setServletContext(ServletContext context)
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.util.ServletContextAware; public class LoginAction implements ServletRequestAware, ServletContextAware { private HttpServletRequest request; private ServletContext context; private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() throws Exception { HttpSession session = request.getSession(); // 在请求中放置欢迎信息。 request.setAttribute("greeting", "欢迎您来到程序员之家"); // 在session中保存user对象 session.setAttribute("password", password); // 统计用户访问量,在application中保存用户访问量数据 Integer count = (Integer) context.getAttribute("counter"); if (null == count) count = 1; else count++; context.setAttribute("counter", count); return "success"; } public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletContext(ServletContext context) { this.context = context; } }
LoginAction类实现了ServletRequestAware和ServletContextAware接口,框架在运行时会调用这两个接口中的方法,向LoginAction4注入HttpServletRequest和ServletContext对象。在execute()方法中不再需要访问ServletActionContext,因此我们删除了与之相关的代码。
发表评论
-
HTTP协议解析
2010-01-27 20:39 4470掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在 ... -
TOMCAT指定JDK
2010-01-14 17:13 2361在windows环境下以批处理文件方式启动tomcat,只要运 ... -
Struts2的国际化
2010-01-01 11:30 1124Struts2国际化分为三类: ... -
总结Struts2的经典输入校验
2009-12-30 16:59 20741,输入校验介绍 Struts2提供了功能强大的输入校验机制 ... -
浅谈Struts2的内建校验器
2009-12-30 16:16 1268Struts2已经为我们准备了一些内建校验器,我们可以直接使用 ... -
Struts2输入校验
2009-12-30 16:12 1579struts2的输入校验针对输入进行业务规则的校验,譬如是否必 ... -
Struts2拦截器原理
2009-12-27 21:02 33001. 什么是拦截器 拦截器,在AOP(Aspect-O ... -
Struts2多文件上传
2009-12-27 17:36 1355Struts2也可以很方便地实现多文件上传。 在输入表 ... -
Struts2文件上传
2009-12-27 16:52 14881.文件上传原理 表单元素的enctype属性指定 ... -
Struts2类型转换
2009-12-26 23:01 1645一、 struts2类型转换一 1、struts2的类型转 ... -
Struts2请求参数的接收
2009-12-26 22:24 15841)--采用基本类型接收请求参数(get/post) ... -
Struts2动态方法调用
2009-12-26 16:48 4462Struts2支持动态方法调用,它指的是一 ... -
Struts2指定多个配置文件
2009-12-26 15:50 2829如果配置文件struts.xml的内容太多,或者是 ... -
Struts2命名空间
2009-12-26 15:24 1581Struts.xml命名空间规则 包的na ... -
Struts2框架的处理流程
2009-12-26 15:07 42221. Struts2架构图 请求首先通过F ... -
Struts2的常量详解
2009-12-26 11:43 3405通常struts2加载struts2常 ... -
HTML form包含的元素
2009-12-25 17:01 1735HTML form elements Object ... -
Struts2.1.x快速入门(二)
2009-12-23 20:02 1106------------------------------- ... -
Struts2.1.x快速入门(一)
2009-12-23 17:21 1185------------------------------- ... -
Hibernate常见集合映射(Set,List Array,Map,Bag)
2009-12-06 14:42 3688Hibernate常见的集合映射主要有Set,List,Arr ...
相关推荐
NULL 博文链接:https://aimilin6688.iteye.com/blog/1279546
一个Demo告诉你struts2如何创建 request response session application
本文讲述了serlvet API无耦合的方式
struts2访问application、session以及request等web资源的示例代码
NULL 博文链接:https://fish198398.iteye.com/blog/785319
2.修改题目1,将提交的“用户名信息”保存到request中,“密码信息”保存到session中,而“用户是否已经注册的判定信息”保存在application中,并在显示页面中,分别从request、session和application中获取数据并...
RequestMap,SessionMap,ApplicationMap, AttributeMap. struts提供两种方式访问session,request ,response,ActionContext 使用。 获得作用域及参数响应对象及三种符号说明
一:访问或添加request/session/application属性 代码如下:public String scope() throws Exception{ ActionContext ctx = ActionContext.getContext(); ctx.getApplication().put(“app”, “应用范围”);//往...
全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...
主要介绍Struts2中访问Web元素的方法,希望能给大家做一个参考。
主要实现了用户的登录系统..并且验证了struts中的跳转..还有跳转到另一个action中的类型..跳转另一个action后显示出书籍信息......并且从request域中,session域和application整个应用程序域中获取信息..
Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...
ActionForm maintains the session state for the Web application. ActionForm is an abstract class that is sub-classed for each input form model. When I say input form model, I am saying ActionForm ...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别? Java Bean 是可...
监听器 servlet application /session /request 6/8 个 1、拦截器 定义拦截器的包 <package name="myPackage" extends="struts-default"> 定义拦截器的核心 定义拦截器类 ...
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 ...
6.6、application对象 6.6.1、取得虚拟目录对应的绝对路径 6.6.2、范例讲解:网站计数器 6.6.3、查看application范围的属性 6.7、WEB安全性及config对象 6.7.1、WEB安全性 6.7.2、config对象 6.8、out对象 ...
Struts2中WebWork框架使用XWork基于HTTP参数名执行操作和调用,将每个HTTP参数名处理为OGNL(对象图形导航语言)语句,而OGNL将: user.address.city=Bishkek&user['favoriteDrink']=kumys 转换为: action....
d) 在bb.jsp中使用session的getAttribute方法取出的对象和aa.jsp中的beanName所引用的对象无关。 10) 用JSP2.0表达式语法在JSP页面上正确显示10+20的结果的是()。 a) ${10+20} b) ${10+20}; c) $(10+20)...