目录结构:

POM:

   <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties> <dependencies> <!--测试JAR-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!--javaee.jar包是支持javaweb编程的基础jar包,跟javase编程需要jre一样!-->
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>
<!--Struts2-core核心-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.4.1</version>
</dependency>
<!--xwork 的核心包,最主要的功能是 支持了过滤器(interceptor)。-->
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.4.1</version>
</dependency> </dependencies>

RequestActionContext:

package com.gdbd.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware; import javax.servlet.http.HttpServletRequest;
import java.util.Map; /**
* 获取 request 三种方式
* 1):ActionContext.getContext().get("request")
* 2):ServletActionContext.getRequest()
* 3):实现 ServletRequestAware 接口
* 推荐使用 实现 ServletRequestAware 接口方式通过IOC机制注入request对象
*
* @author asus
*/
public class RequestActionContext implements Action, ServletRequestAware { private HttpServletRequest request; /***
* 默认执行的方法
* @return
* @throws Exception
*/
@Override
public String execute() throws Exception {
return "success";
} public String getRequest1() {
Map request = (Map) ActionContext.getContext().get("request");
request.put("message", "获取 request方式一:ActionContext.getContext().get(\"request\");");
return "success";
} public String getRequest2() {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("message", "获取 request方式二:ServletActionContext.getRequest();");
return "success";
} public String getRequest3() {
request.setAttribute("message", "获取 request方式三:实现 ServletRequestAware 接口;");
return "success";
} @Override
public void setServletRequest(HttpServletRequest httpServletRequest) {
this.request = httpServletRequest;
}
}

Session_ActionContext_SessionAware:

package com.gdbd.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import org.apache.struts2.interceptor.SessionAware; import java.util.Map; /**
* 获取 Session 两种解耦方式
* 1):ActionContext.getContext().getSession()
* 2):实现 SessionAway 接口
*
* @author asus
*/
public class Session_ActionContext_SessionAware implements Action,SessionAware { private Map<String, Object> map; /***
* 默认执行的方法
* @return
* @throws Exception
*/
@Override
public String execute() throws Exception {
return "success";
} public String getSession() {
//解耦方式实现
Map<String, Object> session = ActionContext.getContext().getSession();
session.put("message", "解耦方式一:ActionContext.getContext().getSession();");
return "success";
} public String getSession1() {
map.put("message", "解耦方式二:实现 SessionAway 接口;");
return "success";
} @Override
public void setSession(Map<String, Object> map) {
this.map = map;
}
}

Session_ServletActionContext_SessionRequestAware:

package com.gdbd.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map; /**
* 获取 Session 两种耦合方式
* 1):ActionContext.getContext().getSession()
* 2):实现 SessionAway 接口
*
* @author asus
*/
public class Session_ServletActionContext_SessionRequestAware implements Action,ServletRequestAware { private HttpServletRequest request; /***
* 默认执行的方法
* @return
* @throws Exception
*/
@Override
public String execute() throws Exception {
return "success";
} /***
* 耦合方式实现1
* @return
*/
public String getSession1() {
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("message", "ServletActionContext.getRequest().getSession()");
return "success";
}
/***
* 耦合方式实现2
* @return
*/
public String getSession2() {
HttpSession session = request.getSession();
session.setAttribute("message", "耦合方式二:实现ServletRequestAware接口;");
return "success";
}
@Override
public void setServletRequest(HttpServletRequest httpServletRequest) {
this.request=httpServletRequest;
}
}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts> <package name="default" namespace="/" extends="struts-default"> <!--获取Session 解耦两种方式-->
<action name="Session" class="com.gdbd.action.Session_ActionContext_SessionAware">
<result name="success">/main.jsp</result>
</action>
<!--获取Session 耦合两种方式-->
<action name="OSession" class="com.gdbd.action.Session_ServletActionContext_SessionRequestAware">
<result name="success">/main.jsp</result>
</action>
<!--获取request 三种方式-->
<action name="Request" class="com.gdbd.action.RequestActionContext">
<result name="success">/main.jsp</result>
</action> </package> </struts>

index.jsp:

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
Created by IntelliJ IDEA.
User: asus
Date: 2018/11/13
Time: 12:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>第一天第一次测试</title>
</head>
<body>
<fieldset>
<legend>获取Session 解耦方式一</legend>
<a href="/Session!getSession">ActionContext.getContext().getSession();</a>
</fieldset>
<br/>
<fieldset>
<legend>获取Session 解耦方式二</legend>
<a href="/Session!getSession1">实现 SessionAway 接口;</a>
</fieldset>
<br/><br/>
<fieldset>
<legend>获取Session 耦合方式一</legend>
<a href="/OSession!getSession1">ServletActionContext.getRequest().getSession();</a>
</fieldset>
<br/>
<fieldset>
<legend>获取Session 耦合方式二</legend>
<a href="/OSession!getSession2">实现ServletRequestAware 接口;</a>
</fieldset>
<br/><br/>
<hr/>
<br/><br/>
<fieldset>
<legend>获取Request 三种方式</legend>
<a href="/Request!getRequest1">获取 request方式一:ActionContext.getContext().get("request");</a>
&nbsp; &nbsp; &nbsp; &nbsp;
<a href="/Request!getRequest2">获取 request方式二:ServletActionContext.getRequest();</a>
&nbsp; &nbsp; &nbsp; &nbsp;
<a href="/Request!getRequest3">获取 request方式三:实现 ServletRequestAware 接口;</a>
<p style="color: red">
推荐使用 实现 ServletRequestAware 接口方式通过IOC机制注入request对象
<br/>
该方法必须要实现,而且该方法是自动被调用这个方法在被调用的过程中,会将创建好的request对象通过参数的方式传递给你,你可以用来赋给你本类中的变量,然后request就可以使用了
<br/>
注意:
<br/>
setServletRequest()方法一定会再execute()方法被调用前执行在jsp页面中获取其中的值
<br/>
在上面的代码中,在Action实现了一个ServletRequestAware接口,并且实现了setServletRequest方法。
<br/>
如果一个动作类实现了ServletRequestAware接口,Struts2在调用execute方法之前,就会先调用setServletRequest方法,并将Request参数传入这个方法。
<br/>
如果想获得HttpServletResponse、HttpSession和Cookie等对象,动作类可以分别实现ServletResponseAware、SessionAware和CookiesAware等接口。这些接口都在org.apache.struts2.interceptor包中。
</p>
</fieldset>
</body>
</html>

main.jsp:

<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
Created by IntelliJ IDEA.
User: asus
Date: 2018/11/13
Time: 12:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>第一天第一次测试</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>

web.xml:

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name>
<!--核心过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

源码下载:https://github.com/MlqBeginner/BlogGardenWarehouse/blob/master/StrutsDay02.rar

--欢迎评论:若有不足之处多多指教

Face your past without regret. Handle your present with confidence.Prepare for future without fear. keep the faith and drop the fear.

面对过去无怨无悔,把握现在充满信心,备战未来无所畏惧。保持信念,克服恐惧!一点一滴的积累,一点一滴的沉淀,学技术需要不断的积淀!

分享知识-快乐自己:Struts2中 获取 Request和Session的更多相关文章

  1. struts2中获取request、response,与android客户端进行交互(文件传递给客户端)

    用struts2作为服务器框架,与android客户端进行交互需要得到request.response对象. struts2中获取request.response有两种方法. 第一种:利用Servle ...

  2. struts2在action中获取request、session、application,并传递数据

    假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...

  3. Struts2 在Action中获取request、session、servletContext的三种方法

    首页message.jsp: <body> ${requestScope.req }<br/> ${applicationScope.app }<br/> ${se ...

  4. 在SpringMVC中获取request对象

    1.注解法 @Autowired private  HttpServletRequest request; 2. 在web.xml中配置一个监听 <listener> <listen ...

  5. 在SpringMVC中获取request对象的几种方式

    1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...

  6. 如何在SpringMVC中获取request对象

    1.注解法 @Autowired private HttpServletRequest request; <listener> <listener-class> org.spr ...

  7. struts2获取request、session、application

    struts2获取request.session.application public class LoginAction extends ActionSupport implements Reque ...

  8. Struts2中获取HttpServletRequest,HttpSession等的几种方式

    转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...

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

    转载自~ 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为se ...

随机推荐

  1. HttpRuntime Cache用法及参数解释

    自己用到的: HttpRuntime.Cache.Insert("SchoolBindKcChangci", SchoolBindKcChangci, null, DateTime ...

  2. 转 FreeBSD通过PORTS安装软件的几个常用命令

    1.怎样找到我想安装的包路径:# cd /usr/ports# make search name=mysql2.仅仅下载源码包,而不安装:# cd /usr/ports/directory# make ...

  3. 15:取近似值ApproximateValue

    题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述:输入一个正浮点数值 输出描述:输出该数值的近似整数值 输入例子 ...

  4. phpQuery—基于jQuery的PHP实现(转)

    Query的选择器之强大是有目共睹的,phpQuery 让php也拥有了这样的能力,它就相当于服务端的jQuery. 先来看看官方简介: phpQuery is a server-side, chai ...

  5. Space is not allowed after parameter prefix ':'

    问题:在hibernate中执行mysql语句,如果mysql语句中含有@a := 1 之类的变量,回报这个错误 语句类似于“set @rownum=0, @preval=null; select @ ...

  6. HDFS源码分析数据块复制监控线程ReplicationMonitor(一)

    ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列.其定义及作为线程核心的run()方法如下: ...

  7. HDFS源码分析之数据块及副本状态BlockUCState、ReplicaState

    关于数据块.副本的介绍,请参考文章<HDFS源码分析之数据块Block.副本Replica>. 一.数据块状态BlockUCState 数据块状态用枚举类BlockUCState来表示,代 ...

  8. js中insertAdjacentHTML的玩法

    原型:insertAdajcentHTML(swhere,stext) insertAdjacentHTML方法:在指定的地方插入html标签语句 参数:swhere: 指定插入html标签语句的地方 ...

  9. PowerBuilder -- Tab控件

    在tab中关闭窗口 Close(tab_1.getparent()) 调整tab中的控件的tab oder 鼠标右键tabpage_1,选择 Tab Order菜单.

  10. Python学习总结之三 -- 优雅的字符串

    优雅的字符串 前言 记得我在Python学习总结第一篇中有提到字符串,那个可以算是先打个招呼吧,因为没有提到任何关于字符串的处理方法.今天,给大家详细讲解一下Python中字符串的使用方法,如有不当或 ...