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

1.struts2通过ActionContext访问

com.opensymphony.xwork2.ActionContext;类有很多方法这里只列举几个常用的方法;

列举个小例子

Struts2的核心配置web.xml 就不做说明了  。前面已经操作过;

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>
<!-- 2.变量设置 在Struts.xml文件里面配置 -->
<!--i18n :国际化 解决post提交乱码。输出中文乱码 省去过滤器字节编码-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.devMode " value="true"></constant>
<constant name="struts.action.extension" value="action,,"></constant> <package name="hello" namespace="/" extends="struts-default">
<!-- 3注意 这里没有method属性 默认对应的是Action类的execute方法 -->
<action name="Demo1" class="com.sturts2.day02.action.RequestDemo1">
<result name="success">/demo2.jsp</result>
</action>
</package>
</struts>

RequestDemo1.java      Action类

 public class RequestDemo1  extends ActionSupport{
@Override
public String execute() throws Exception {
//ac 相当于Servlet 的request
ActionContext ac=ActionContext.getContext();
Map<String ,Object> paramMap=ac.getParameters();
for(String key: paramMap.keySet()){
String [] value=(String[]) paramMap.get(key);
System.out.println(key+" "+value[0]);
} ac.put("request1", "张三");
ac.getSession().put("session1","李四");
ac.getApplication().put("application1", "王五");
return SUCCESS;
}
}

demo1.jsp

<body>
<h1>访问Servlet API 方式之一</h1>
<form action="${pageContext.request.contextPath}/Demo1.action" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交">
</form>
</body>

demo2.jsp

<body>
<h1>获取数据</h1>
requet: ${request1 } <br/><br/>
session: ${session1 } <br/><br/>
application: ${application1 } <br/><br/>
</body>

在服务器上运行 ,打开demo1 :

输入数据提交表单: 控制台显示

浏览器跳转页面:

2.通过特定接口访问

Struts2 的ActionContext访问Servlet API  无法直接获得Servlet  API 实例。以下接口可以直接访问Servlet  API ;

  • ServletRequestAware  :实现该接口的Action可以直接访问web应用的HttpServletRequest
  • ServletResponseAware  :实现该接口的Action可以直接访问web应用的HttpServletResponse
  • SessionAware :实现该接口的Action可以直接访问web应用的TttpSession
  • ServletContextAware  :实现该接口的Action可以直接访问web应用的ServletContex实例
 <?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>
<package name="api" namespace="/" extends="struts-default"> <action name="Demo5Action" class="com.sturts2.day02.b_api.Demo5Action">
<result name="success" >/api.jsp</result>
</action> </package>
</struts>

3.通过ServletActionContext访问

借助ServletActionContext 类,避免action实现ServletRequestAware  ,ServletResponseAware、SessionAware 和ServletContextAware 等 XxxAware接口。但Action直接与ServletAPI耦合,不利于程序的解耦。建议使用ActionContext

代码如下:

  • static HttpServletResquest getRequest();  获取Web应用HttpServletResquest对象
  • static HttpServletResponse getResponse();  获取Web应用HttpServletResponse对象
  • static ServletContext  getServletContext();    获取Web应用ServletContext对象
  • static PageContext getPageContext();       获取Web应用pageContext对象

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>
<package name="api" namespace="/" extends="struts-default"> <action name="Demo5Action" class="com.sturts2.day02.b_api.Demo5Action">
<result name="success" >/api.jsp</result>
</action> </package>
</struts>

Action类

package com.sturts2.day02.b_api;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class Demo5Action  extends  ActionSupport  implements ServletRequestAware {
private HttpServletRequest request;
@Override
public String execute() throws Exception {
System.out.println("原生request:"+request);
return SUCCESS;
} @Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
} }

api.jsp

 <body>
request:${request1 } <br/>
session:${session1 } <br/>
application:${application1 } <br/> </body>

页面显示:

控制台输出

Struts2(七) Struts2访问Servlet的API的更多相关文章

  1. 七 Struts2访问Servlet的API方式二:原生方式

    Struts2访问Servlet的API方式二:原生方式 和解耦合的方式不同,原生方式既可以拿到域对象,也可以调用域对象中的方法 前端jsp: <%@ page language="j ...

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

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

  3. struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装

    一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...

  4. (转)Struts2访问Servlet的API及......

    http://blog.csdn.net/yerenyuan_pku/article/details/67315598 Struts2访问Servlet的API 前面已经对Struts2的流程已经执行 ...

  5. 八 Struts2访问Servlet的API方式三:接口注入

    Struts2访问Servlet的API方式三:接口注入 通过实现ServletRequestAware, ServletContextAware 接口,拿到Request.ServletContex ...

  6. Struts2笔记--Action访问Servlet API

    Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.se ...

  7. Struts2学习二----------访问Servlet API

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2提供了三种方式去访问Servlet API -ActionContext -实现*Aware接口 -ServletActionConte ...

  8. 六 Struts2访问Servlet的API方式一:完全解耦合的方式

    注意: 完全解耦合的方式,这种方式只能获得代表request.session.application的数据的Map集合. 不能操作这些对象的本身的方法. 1 jsp: <%@ page lang ...

  9. 在Struts2框架中使用Servlet的API

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

随机推荐

  1. 自用lca模板

    人丑常数大,总是卡在1000多ms... #include <cstdio> #include <cstring> #include <iostream> #def ...

  2. 使用VS Code开发asp.net core (下)

    第一部分: https://www.cnblogs.com/cgzl/p/8450179.html 本文是基于Windows10的. Debugging javascript 打开wwwroot/js ...

  3. 较复杂makefile跟lds脚本程序的编写

    首先看个makefile范例: /*指明工具链,并为其取个简单的别名*/ CC = arm-linux-gcc LD = arm-linux-ld AR = arm-linux-ar OBJCOPY ...

  4. tcp 网络编程

    网络编程同时也是进程间的一种通信:服务器进程和应用进程间的通信. OSI:开放式系统互联 OSI 7层模型:                                               ...

  5. 快速构建一个简单的单页vue应用

    技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...

  6. Redis 实践2-数据结构

    alias redis-cli='/usr/local/redis/bin/redis-cli'   vi .bashrc 编辑加入  alias redis-cli='/usr/local/redi ...

  7. Jetty容器

    ♣Jetty和Tomcat的区别 ♣Jetty下载.安装 ♣eclipse安装jetty插件 ♣第一个jetty测试(maven+jetty) 1.Jetty和Tomcat的区别   Jetty 是一 ...

  8. Conemu, Msys2 工具整合,提升windows下控制台工作效率

    与windows cmd相比较git-bash这类的console工具好用很多,但是git-bash的命令和功能相对简单,功能扩展起来不方便,git-bash本身也是基于msys的. 昨天发现使用Ms ...

  9. POJ - 1984 Navigation Nightmare 种类并查集

    思路:记录每个点与其根结点的横向距离和纵向距离,当知道其父节点与根结点的关系,很容易推出当前节点与根结点的关系: 直接相加即可. int p = a[x].par; a[x].dx += a[p].d ...

  10. SQL2005查询死锁的表和具体的语句

    查是哪个进程死锁了哪些表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName fro ...