Struts2(七) Struts2访问Servlet的API
当接受表单参数,向页面保持数据时。要用到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的更多相关文章
- 七 Struts2访问Servlet的API方式二:原生方式
Struts2访问Servlet的API方式二:原生方式 和解耦合的方式不同,原生方式既可以拿到域对象,也可以调用域对象中的方法 前端jsp: <%@ page language="j ...
- struts2的action访问servlet API的三种方法
学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...
- struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装
一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...
- (转)Struts2访问Servlet的API及......
http://blog.csdn.net/yerenyuan_pku/article/details/67315598 Struts2访问Servlet的API 前面已经对Struts2的流程已经执行 ...
- 八 Struts2访问Servlet的API方式三:接口注入
Struts2访问Servlet的API方式三:接口注入 通过实现ServletRequestAware, ServletContextAware 接口,拿到Request.ServletContex ...
- Struts2笔记--Action访问Servlet API
Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.se ...
- Struts2学习二----------访问Servlet API
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2提供了三种方式去访问Servlet API -ActionContext -实现*Aware接口 -ServletActionConte ...
- 六 Struts2访问Servlet的API方式一:完全解耦合的方式
注意: 完全解耦合的方式,这种方式只能获得代表request.session.application的数据的Map集合. 不能操作这些对象的本身的方法. 1 jsp: <%@ page lang ...
- 在Struts2框架中使用Servlet的API
1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...
随机推荐
- Cookie、session和localStorage、以及sessionStorage之间的区别
一.Cookie.session和localStorage的区别 cookie的内容主要包括:名字.值.过期时间.路径和域.路径与域一起构成cookie的作用范围.若不设置时间,则表示这个cookie ...
- Image Style Transfer:多风格 TensorFlow 实现
·其实这是一个选修课的present,整理一下作为一篇博客,希望对你有用.讲解风格迁移的博客蛮多的,我就不过多的赘述了.讲一点几个关键的地方吧,当然最后的代码和ppt也希望对你有用. 1.引入: 风格 ...
- 启动mysql遇到1067问题
最近安装sql的时候,出现一些问题:启动的时候出现1067错误 在网上找了很多方法,比如删除mysql安装目录下date的bdata1, ib_logfile0, .. 等innodb的文件, 比如修 ...
- 似懂非懂的Comparable与Comparator
jdk1.8.0_41 一知半解写代码, 集合排序用个啥. 抄起键盘胡乱打, 似懂非懂最可怕. Comparable与Comparator都是用于集合的排序,对于大多数人来说Comparator可能略 ...
- 快速构建一个简单的单页vue应用
技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...
- ajax请求 readyState为0 可能原因之一
问题:同样的代码逻辑,PC端和iOS都能正常访问,但是Android系统请求都是报错: 上网查阅,关于ajax请求失败且状态码都是0的情况有很多,最后排查的原因是:域名证书问题:
- Nginx的try_files指令和命名location使用实例
Nginx的配置语法灵活,可控制度非常高.在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率. 下面是一个使用实 ...
- PHP中cookies跨目录无法调用解决办法
localhost/a/test.php 中写入: <?php setcookie("user","zhangsan",time()+3600); ?&g ...
- Zabbix监控之迁移zabbix server
abbix监控中有时会根据需要对zabbix服务器进行迁移,zabbix迁移是非常简单的,因为zabbix的前端所有的操作都存在zabbix数据库里.所以zabbix迁移只需对zabbix库中相应的表 ...
- 开始使用PHPUnit单元测试
何为单元测试: 指对软件中的基本单元进行测试,如函数.方法等,以检查其返回值或行为是否符合预期:实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文 ...