`

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 <?xml version="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 <package name="default" extends="struts-default">
09 <action name="login" class="struts2.login.LoginAction">
10 <result name="success" >result.jsp</result>
11 </action>
12  
13 <action name="login2" class="struts2.login.Login2Action">
14 <result name="success" >result.jsp</result>
15 </action>
16  
17 <action name="login3" class="struts2.login.Login3Action">
18 <result name="success" >result.jsp</result>
19 </action>
20  
21 <action name="login4" class="struts2.login.Login4Action">
22 <result name="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 <a href="login.action">servlet 不相关的 非IoC 取得Request等对象的方式</a><br>
5 <a href="login2.action">servlet 不相关的 IoC 取得Request等对象的方式</a><br>
6 <a href="login3.action">servlet 相关的 非IoC 取得Request等对象的方式</a><br>
7 <a href="login4.action">servlet 相关的 IoC 取得Request等对象的方式</a><br>
8 </form>
9 </html>



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

Action文件:

01 package struts2.login;
02  
03 import java.util.Map;
04  
05 import com.opensymphony.xwork2.ActionContext;
06 import com.opensymphony.xwork2.ActionSupport;
07  
08 public class LoginAction extends ActionSupport{
09 private ActionContext context;
10 private Map request;
11 private Map session;
12 private Map application;
13  
14 @Override
15 public String execute() throws Exception {
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 return SUCCESS;
25 }
26 }



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

Action文件:

01 package struts2.login;
02  
03 import java.util.Map;
04  
05 import org.apache.struts2.interceptor.ApplicationAware;
06 import org.apache.struts2.interceptor.RequestAware;
07 import org.apache.struts2.interceptor.SessionAware;
08  
09 import com.opensymphony.xwork2.ActionSupport;
10  
11 public class Login2Action extends ActionSupport
12 implements RequestAware , SessionAware, ApplicationAware{
13 private Map request;
14 private Map session;
15 private Map application;
16  
17 @Override
18 public String execute() throws Exception {
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 return SUCCESS;
24 }
25  
26 @Override
27 public void setRequest(Map<String, Object> arg0) {
28 // TODO Auto-generated method stub
29 this.request = arg0;
30 }
31  
32 @Override
33 public void setSession(Map<String, Object> arg0) {
34 // TODO Auto-generated method stub
35 this.session = arg0;
36 }
37  
38 @Override
39 public void setApplication(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 package struts2.login;
02  
03 import javax.servlet.ServletContext;
04 import javax.servlet.http.HttpServletRequest;
05 import javax.servlet.http.HttpSession;
06  
07 import org.apache.struts2.ServletActionContext;
08  
09 import com.opensymphony.xwork2.ActionSupport;
10  
11 public class Login3Action extends ActionSupport{
12 private HttpServletRequest request;
13 private HttpSession session;
14 private ServletContext application;
15  
16 @Override
17 public String execute() throws Exception {
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 return SUCCESS;
26 }
27  
28 }




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

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

Action文件:

01 package struts2.login;
02  
03 import javax.servlet.ServletContext;
04 import javax.servlet.http.HttpServletRequest;
05 import javax.servlet.http.HttpSession;
06  
07 import org.apache.struts2.interceptor.ServletRequestAware;
08 import org.apache.struts2.util.ServletContextAware;
09  
10 import com.opensymphony.xwork2.ActionSupport;
11  
12 public class Login4Action extends ActionSupport
13 implements ServletRequestAware , ServletContextAware{
14 private HttpServletRequest request;
15 private HttpSession session;
16 private ServletContext application;
17  
18 @Override
19 public String execute() throws Exception {
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 return SUCCESS;
26 }
27  
28 @Override
29 public void setServletRequest(HttpServletRequest arg0) {
30 // TODO Auto-generated method stub
31 this.request = arg0;
32 }
33  
34 @Override
35 public void setServletContext(ServletContext arg0) {
36 // TODO Auto-generated method stub
37 this.application = arg0;
38 }
39 }
分享到:
评论

相关推荐

    Struts2的Action中获得request response session几种方法

    Struts2的拦截器机制也是获取request、response、session的一种方式。默认情况下,Struts2已经配置了一些拦截器,例如`servletConfig`拦截器,它可以提供对servlet API的访问,包括request、response、session等。 ...

    java学习(ssh) action structs spring hibernet

    JSP提供了多个内置对象,如`out`、`request`、`response`、`session`、`pageContext`、`application`、`config`、`page`、`exception`等,用于简化页面开发和后端数据交互。 ### 8. Struts2标签库的使用 Struts2...

    structs2.0源码

    8. **ActionContext**:ActionContext保存了当前请求的环境信息,如ValueStack、Session、Request、Response等。它是连接Action与外部环境的关键桥梁。 9. **Exception Handler(异常处理器)**:Struts2提供了一种...

    structs1.x的配置及一个简单的登陆和增删改查的例子

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm loginForm = (LoginForm) form; if ...

    ssh(structs,spring,hibernate)框架中的上传下载

    具体的调用是将Web层将response.getOutputStream()传给write(OutputStream os,String fileId)接口,业务层直接将文件数据输出到这个响应流中。具体实现请参见错误!未找到引用源。节下载文件部分。  2、业务层接口...

    音乐网站项目

    例如,用户登录、注册、播放音乐等操作都可以通过JSP页面来完成,开发者可以通过JSP的内置对象如request、response、session等来处理HTTP请求和响应,同时利用EL(Expression Language)和JSTL(JavaServer Pages ...

    图书管理系统

    JSP页面结合HTML和Java代码,通过内置对象如request、response、session等处理用户请求,与数据库进行交互,展示数据。在图书管理系统中,JSP主要负责用户界面的展示和业务逻辑的处理,比如用户登录、图书查询、借阅...

    JSP+Struct+MySql基于BBS管理系统设计与实现(源代码+论文+中英资料+开题报告+答辩PPT).rar

    在本项目中,JSP主要负责用户界面的渲染,通过JSP的内置对象(如request、response、session等)与后台JavaBean或Servlet进行数据交互,提供用户友好的界面和交互体验。 2. **Structs框架**:Structs是一款轻量级的...

    JSP 一个 成功软件

    JSP的内置对象如`request`, `response`, `session`, `application`等被用来处理HTTP请求和响应。 2. **模型层**:利用Hibernate作为ORM工具,建立Java实体类来代表数据库表,通过Hibernate的API进行CRUD(创建、...

    很多技术的复习考试题目

    复习ASP,需了解VBScript或JScript编程基础,ASP内置对象如Response、Request、Session、Application等的使用,以及ASP.NET的升级改进。 .LAMP指的是Linux、Apache、MySQL和PHP的组合,是开源Web开发平台。复习LAMP...

    JAVA程序员面试题收集.pdf,这是一份不错的文件

    JSP通过隐式对象如request, response, session访问CGI变量。 9. **J2EE相关知识**: - J2EE(Java Platform, Enterprise Edition)是企业级应用开发平台,包括J2SE(标准版)和J2ME(微型版)。Application Server...

    java面试题

    多线程几种实现方法,同步? 答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数...

    JSP+Struct+MySql基于BBS管理系统设计与实现(源代码+论文+中英资料+开题报告+答辩PPT).zip

    开发者可以利用JSP的内置对象,如Request、Response、Session、Application等,来处理HTTP请求、发送响应,并管理用户的会话状态。 **Struts框架** Struts是基于Model-View-Controller(MVC)设计模式的Java Web...

    javaweb毕业设计文献.docx

    - 关键知识点包括JSP页面的生命周期、JSP内置对象(如request、response、session等)、JSP指令元素、JSP动作元素等。 2. **《软件工程》**(王家华、王宜贵) - 这两本书分别从不同角度介绍了软件工程的概念和...

Global site tag (gtag.js) - Google Analytics