Structs2获得request,reponse,session的几种方式

在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式。分别为servlet 不相关的 非IoC 取得Request等对象的方式servlet 不相关的 IoC 取得Request等对象的方式servlet 相关的 非IoC 取得Request等对象的方式servlet 相关的 IoC 取得Request等对象的方式以下分别叙述。首先请看struts.xml文件文件内容:

01 <?xmlversion="1.0"encoding="UTF-8"?>
02 <!DOCTYPE struts PUBLIC
03 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
04 "http://struts.apache.org/dtds/struts-2.0.dtd">
05
06 <struts>
07
08 <packagename="default"extends="struts-default">
09 <actionname="login"class="struts2.login.LoginAction">
10 <resultname="success">result.jsp</result>
11 </action>
12
13 <actionname="login2"class="struts2.login.Login2Action">
14 <resultname="success">result.jsp</result>
15 </action>
16
17 <actionname="login3"class="struts2.login.Login3Action">
18 <resultname="success">result.jsp</result>
19 </action>
20
21 <actionname="login4"class="struts2.login.Login4Action">
22 <resultname="success">result.jsp</result>
23 </action>
24 </package>
25
26 </struts>


其中的LoginAction,Login2Action,Login3Action,Login4Action分别对应四种方式的Action。

文件名:result.jsp
文件内容:
1 <%@ page contentType="text/html; charset=gb2312" %>
2 <%@ taglib uri="/struts-tags" prefix="s"%>
3
4 <html>
5 request 属性是 ${requestScope.attribute}<br>
6 session 属性是 ${sessionScope.attribute}<br>
7 application 属性是 ${applicationScope.attribute}<br>
8 </html>


文件名:getrequest.jsp
文件内容:
1 <%@ page contentType="text/html; charset=gb2312" %>
2 <%@ taglib uri="/struts-tags" prefix="s"%>
3 <html>
4 <ahref="login.action">servlet 不相关的 非IoC 取得Request等对象的方式</a><br>
5 <ahref="login2.action">servlet 不相关的 IoC 取得Request等对象的方式</a><br>
6 <ahref="login3.action">servlet 相关的 非IoC 取得Request等对象的方式</a><br>
7 <ahref="login4.action">servlet 相关的 IoC 取得Request等对象的方式</a><br>
8 </form>
9 </html>


然后分别叙述4种方式,
1,servlet 不相关的 非IoC 取得Request等对象的方式
这种方法先取得ActionContext,然后获取Map类型的request等对象

Action文件:
01 packagestruts2.login;
02
03 importjava.util.Map;
04
05 importcom.opensymphony.xwork2.ActionContext;
06 importcom.opensymphony.xwork2.ActionSupport;
07
08 publicclassLoginAction  extendsActionSupport{
09 privateActionContext context;
10 privateMap request;
11 privateMap session;
12 privateMap application;
13
14 @Override
15 publicString execute() throwsException {
16 // TODO Auto-generated method stub
17 this.context = ActionContext.getContext();
18 this.request = (Map)this.context.get("request");
19 this.session = this.context.getSession();
20 this.application = this.context.getApplication();
21 this.request.put("attribute", "request value servlet 不相关的 非IoC ");
22 this.session.put("attribute", "session value servlet 不相关的 非IoC ");
23 this.application.put("attribute", "application value servlet 不相关的非IoC ");
24 returnSUCCESS;
25 }
26 }


2,servlet 不相关的 IoC 取得Request等对象的方式
这种方法,是实现特定的接口,由container来设定request等对象。请注意如下代码示例中红色文字的部分。

Action文件:
01 packagestruts2.login;
02
03 importjava.util.Map;
04
05 importorg.apache.struts2.interceptor.ApplicationAware;
06 importorg.apache.struts2.interceptor.RequestAware;
07 importorg.apache.struts2.interceptor.SessionAware;
08
09 importcom.opensymphony.xwork2.ActionSupport;
10
11 publicclassLogin2Action  extendsActionSupport
12 implementsRequestAware , SessionAware, ApplicationAware{
13 privateMap request;
14 privateMap session;
15 privateMap application;
16
17 @Override
18 publicString execute() throwsException {
19 // TODO Auto-generated method stub
20 this.request.put("attribute", "request value servlet 不相关的 IoC ");
21 this.session.put("attribute", "session value servlet 不相关的 IoC ");
22 this.application.put("attribute", "application value servlet 不相关的 IoC ");
23 returnSUCCESS;
24 }
25
26 @Override
27 publicvoidsetRequest(Map<String, Object> arg0) {
28 // TODO Auto-generated method stub
29 this.request = arg0;
30 }
31
32 @Override
33 publicvoidsetSession(Map<String, Object> arg0) {
34 // TODO Auto-generated method stub
35 this.session = arg0;
36 }
37
38 @Override
39 publicvoidsetApplication(Map<String, Object> arg0) {
40 // TODO Auto-generated method stub
41 this.application = arg0;
42 }
43 }

3,servlet 相关的 非IoC 取得Request等对象的方式
这种方法可以获取servlet相关的request等对象,也就是说这种方式取出的request对象不单单是设定属性的作用,而是可以获取http相关的信息。
取出方法,请参看代码中的蓝字部分。

Action文件:
01 packagestruts2.login;
02
03 importjavax.servlet.ServletContext;
04 importjavax.servlet.http.HttpServletRequest;
05 importjavax.servlet.http.HttpSession;
06
07 importorg.apache.struts2.ServletActionContext;
08
09 importcom.opensymphony.xwork2.ActionSupport;
10
11 publicclassLogin3Action  extendsActionSupport{
12 privateHttpServletRequest request;
13 privateHttpSession session;
14 privateServletContext application;
15
16 @Override
17 publicString execute() throwsException {
18 // TODO Auto-generated method stub
19 this.request = ServletActionContext.getRequest();
20 this.session = this.request.getSession();
21 this.application = ServletActionContext.getServletContext();
22 this.request.setAttribute("attribute", "request value servlet 相关的非IoC ");
23 this.session.setAttribute("attribute", "session value servlet 相关的非IoC ");
24 this.application.setAttribute("attribute", "application value servlet 相关的 非IoC ");
25 returnSUCCESS;
26 }
27
28 }



4,servlet 相关的 IoC 取得Request等对象的方式

这种方法也可以获取servlet相关的request等对象,也就是说这种方式取出的request对象不单单是设定属性的作用,而是可以获取http相关的信息。
但是取出方法是通过接口进行实现,也就是由struts2的container来设定,请参看代码中的红字部分。

Action文件:
01 packagestruts2.login;
02
03 importjavax.servlet.ServletContext;
04 importjavax.servlet.http.HttpServletRequest;
05 importjavax.servlet.http.HttpSession;
06
07 importorg.apache.struts2.interceptor.ServletRequestAware;
08 importorg.apache.struts2.util.ServletContextAware;
09
10 importcom.opensymphony.xwork2.ActionSupport;
11
12 publicclassLogin4Action  extendsActionSupport
13 implementsServletRequestAware , ServletContextAware{
14 privateHttpServletRequest request;
15 privateHttpSession session;
16 privateServletContext application;
17
18 @Override
19 publicString execute() throwsException {
20 // TODO Auto-generated method stub
21 this.request.setAttribute("attribute", "request value servlet 相关的 IoC ");
22 this.session = this.request.getSession();
23 this.session.setAttribute("attribute", "session value servlet 相关的 IoC ");
24 this.application.setAttribute("attribute", "application value servlet 相关的 IoC ");
25 returnSUCCESS;
26 }
27
28 @Override
29 publicvoidsetServletRequest(HttpServletRequest arg0) {
30 // TODO Auto-generated method stub
31 this.request = arg0;
32 }
33
34 @Override
35 publicvoidsetServletContext(ServletContext arg0) {
36 // TODO Auto-generated method stub
37 this.application = arg0;
38 }
39 }


你可能感兴趣的:(session,request,STRUCTS2,REPONSE)