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的 ...
随机推荐
- BZOJ 3790: 神奇项链 [Manacher 贪心]
3790: 神奇项链 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 405 Solved: 200[Submit][Status][Discuss] ...
- Vue中,父组件向子组件传值
1:在src/components/child/文件夹下,创建一个名为:child.vue的子组件 2:在父组件中,设置好需要传递的数据 3:在App.vue中引入并注册子组件 4:通过v-bind属 ...
- JDBC【事务、元数据、改造JDBC工具类】
1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...
- vscode php跳转
最近在写一个php项目,最后选定使用vscode编辑器,然后研究了一下断点调试.格式代码.点击跳转 以下是配置步骤,记录一下 1.代码格式化及跳转 1.前提条件:安装7.0以上版本php, ...
- HAProxy+Nginx 负载均衡
一.什么是HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...
- Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程
一.修改hosts文件 在主节点,就是第一台主机的命令行下; vim /etc/hosts 我的是三台云主机: 在原文件的基础上加上; ip1 master worker0 namenode ip2 ...
- c中const定义的问题
/* 这题有个疑问: const double BASE1=BREAK1*RATE1; //第二个分界点前总共要缴的税收 const double BASE2=BASE1+(BREAK2-BREAK1 ...
- Ansible playbook循环实践总结<一>
1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...
- Java经典编程题50道之十三
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? public class Example13 { public static void main(St ...
- java9 - 异常处理
Java异常 1.异常初见 System.out.println(1/0); 运行上面语句之后打印出: Exception in thread "main" java.lang.A ...