当接受表单参数,向页面保持数据时。要用到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. BZOJ 3790: 神奇项链 [Manacher 贪心]

    3790: 神奇项链 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 405  Solved: 200[Submit][Status][Discuss] ...

  2. Vue中,父组件向子组件传值

    1:在src/components/child/文件夹下,创建一个名为:child.vue的子组件 2:在父组件中,设置好需要传递的数据 3:在App.vue中引入并注册子组件 4:通过v-bind属 ...

  3. JDBC【事务、元数据、改造JDBC工具类】

    1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...

  4. vscode php跳转

    最近在写一个php项目,最后选定使用vscode编辑器,然后研究了一下断点调试.格式代码.点击跳转 以下是配置步骤,记录一下 1.代码格式化及跳转  1.前提条件:安装7.0以上版本php,     ...

  5. HAProxy+Nginx 负载均衡

    一.什么是HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...

  6. Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程

    一.修改hosts文件 在主节点,就是第一台主机的命令行下; vim /etc/hosts 我的是三台云主机: 在原文件的基础上加上; ip1 master worker0 namenode ip2 ...

  7. c中const定义的问题

    /* 这题有个疑问: const double BASE1=BREAK1*RATE1; //第二个分界点前总共要缴的税收 const double BASE2=BASE1+(BREAK2-BREAK1 ...

  8. Ansible playbook循环实践总结<一>

    1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...

  9. Java经典编程题50道之十三

    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? public class Example13 {    public static void main(St ...

  10. java9 - 异常处理

    Java异常 1.异常初见 System.out.println(1/0); 运行上面语句之后打印出: Exception in thread "main" java.lang.A ...