搭建环境:

引入jar包,src下建立struts.xml文件

项目配置文件web.xml.

web.xml:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>struts2Test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <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>*.action</url-pattern>
</filter-mapping> </web-app>

struts.xml:

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/gys" extends="struts-default">
<action name="test" class="action.GetServletAPIAction">
<result name="api">/servletApi.jsp</result>
</action>
</package>
</struts>

Struts2的Action类并不直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不在于Servlet API耦合,从而能更轻松地测试该Action.

Web中通常访问Servlet API就是HttpServletRequest,HttpSession和ServletContext,这3个类分别代表JSP内置对象中的request,session,application.

Struts2提供了一个ActionContext类来访问API,

该类提供了几个常用的方法:

Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法.

Map getApplication():返回一个Map对象,该对象模拟了ServletContext实例.

static ActionContext getContext():静态方法,获取系统的ActionContext实例.

Map getParameters():获取所有的请求参数.类似于调用HttpServletRequest对象的getParameterMap方法.

Map getSession()返回一个Map对象,模拟了HttpSession实例.

void setApplication(Map application)直接传入一个Map实例,将该Map实例里的key-value转换成application的属性名,属性值.

void setSession(Map session)直接传入一个Map实例,将该Map实例里的key-value转换成session的属性名,属性值.

建立action类:

 package action;

 import com.opensymphony.xwork2.ActionContext;

 public class GetServletAPIAction {
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
} public void getServletAPI1(){
//获取ActionContext实例,通过该实例访问Servlet API
ActionContext ctx=ActionContext.getContext();
//获取ServletContext里的count属性
Integer count=(Integer)ctx.getApplication().get("count");
if(count==null){
count=1;
}
else {
count++;
}
//将访问人数设置成application的一个属性
ctx.getApplication().put("count", count);
ctx.getSession().put("username", "思思博士"); } public String execute(){
getServletAPI1();
return "api";
} }

建立页面servletApi.jsp:

 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<h1>访问次数:${applicationScope.count }</h1>
<h1>登陆人:${sessionScope.username }</h1>
</body>
</html>

测试一下:

虽然Struts2提供了ActionCotext来访问Servlet API,但这种访问毕竟不能直接获得Servlet API实例,为了在Action中直接访问Servlet API,struts2还提供了如下系统接口.

ServletContextAware:实现该接口的Action可以直接访问web应用的ServletContext实例.

ServletRequestAwart:实现该接口的Action可以直接访问用户请求的HttpServletRequest实例

ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse实例.

下面以ServletRequestAware为例,介绍如何在Action中访问HttpServletRequest对象.

修改上面的代码:

ServletApi.jsp

 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<%-- <h1>访问次数:${applicationScope.count }</h1>
<h1>登陆人:${sessionScope.username }</h1> --%>
<h3>${requestScope.API }</h3>
</body>
</html>

GetServletAPIAction.java

package action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware; import com.opensymphony.xwork2.ActionContext; public class GetServletAPIAction implements ServletRequestAware{
private HttpServletRequest request; private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
} public void getServletAPI1(){
//获取ActionContext实例,通过该实例访问Servlet API
ActionContext ctx=ActionContext.getContext();
//获取ServletContext里的count属性
Integer count=(Integer)ctx.getApplication().get("count");
if(count==null){
count=1;
}
else {
count++;
}
//将访问人数设置成application的一个属性
ctx.getApplication().put("count", count);
ctx.getSession().put("username", "思思博士"); }
public void getServletAPI2(){
request.setAttribute("API","我来自于struts2中直接访问servletAPI的request");
} @Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public String execute(){
//getServletAPI1();
getServletAPI2();
return "api";
} }

测试结果:

struts2访问servlet API的更多相关文章

  1. 配置Struts2及Struts2访问servlet api的方式

    Struts2的起源与背景 在很长的一段时间内,在所有的MVC框架中,Struts1处于绝对的统治地位,无论是从市场的普及范围,还是具体的使用者数量. 其他MVC框架都无 法与其相比,作为一一款优秀的 ...

  2. Struts2访问Servlet API的三种方式

    有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...

  3. Struts2访问Servlet API的几种方式

    struts2提供了三种方式访问servlet API:大致分为两类 1. ActionContext:  public static ActionContext getContext() :获得当前 ...

  4. 3.struts2访问Servlet API,并和mybaits实现全套增删改查

    1.创建数据库脚本userinfo.sql prompt PL/SQL Developer import file prompt Created on 2016年5月19日 by pc set fee ...

  5. struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  6. struts2中访问servlet API

    Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts ...

  7. struts2的action访问servlet API的三种方法

    学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...

  8. Struts2(七) Struts2访问Servlet的API

    当接受表单参数,向页面保持数据时.要用到Struts访问Servlet 的API .下面只做参考,有错误或不同意见可以发送邮箱2440867831@qq.com  .建议大家看struts文档,源代码 ...

  9. 关于Struts2自动装配和访问Servlet API

    自动装配 1.根据属性的getter和setter获取值  index.jsp <s:form action="hello" method="POST"& ...

随机推荐

  1. 安装SQL Server驱动到Maven仓库[转]

    from:http://raysen.blog.51cto.com/324335/1159232 Maven does not directly support some libraries, lik ...

  2. OpenJudge计算概论-Tomorrow never knows【输入日期计算下一天的日期】

    /*====================================================================== Tomorrow never knows? 总时间限制 ...

  3. 【转】Win7注册表的使用(更新中)

    一.注册表的存储结构和数据类型 1.基本概念: Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键. 键(Key):“位于左侧窗格如同文件夹图 ...

  4. Ext is not defined

    最近由于项目设计到Extjs所以也准备研究一下,可是谁知道刚写好一个demo,运行的时候死活出不来界面,于是用firebug看了一下,出现:Ext is not defined,因为刚开始学也不知道是 ...

  5. mysql5.7.9 源码安装 (转)

    1,安装所有包 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libxml libgc ...

  6. POJ #1042 Gone Fishing - WA by a DP solution. TODO

    I used DP instead of Greedy. But got WA on PoJ, though it passed all web-searched cases. Maybe I hav ...

  7. Spring实战4:面向切面编程

    主要内容 面向切面编程的基本知识 为POJO创建切面 使用@AspectJ注解 为AspectJ的aspects注入依赖关系 在南方没有暖气的冬天,太冷了,非常想念北方有暖气的冬天.为了取暖,很多朋友 ...

  8. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数

    我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数 ...

  9. 128. Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  10. C# is和as操作符

    is和as操作符 is操作符:检查对象是否与给定类型兼容. 说明: 1.如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true, ...