八 Struts2访问Servlet的API方式三:接口注入
Struts2访问Servlet的API方式三:接口注入
通过实现ServletRequestAware, ServletContextAware 接口,拿到Request、ServletContext域对象,完成相应的功能。还可以实现ServletContextAware拿到Response对象等。
相对于前两种方式,较为繁琐。
注:
Action是多例的,Servlet是单例的,在Action中提供如下所述成员变量不会出现线程安全问题(可以在Action类中设置一个构造方法,每当Action被访问一次,就会创建一个Action类对象,说明是多例的)。
往Request域里面存值,页面跳转之后也能取出来,说明请求方式是转发。如果想设置为重定向,需要配置Action标签中的result
jsp:前端页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Struts2访问Servlet的PAI</h1>
<h3>方式三:接口注入的方式</h3>
<form action="${pageContext.request.contextPath }/requestDemo3.action" method="post">
姓名:<input type="text" name="name" /><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交" >
</form>
</body>
</html>
Action类:
package com.itheima.struts2.demo1;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
/**
* 访问ServletAPI的方式三:接口注入的方式
* 比较繁琐
* Action是单例还是多例?Servlet是单例的,多个程序访问一个Servlet只会创建一个Servlet实例
*而Action是多例的,有一个请求就会创建一个Action实例,所以不会出现线程安全问题。
*/
public class RequestDemo3 extends ActionSupport implements ServletRequestAware,ServletContextAware{
private HttpServletRequest request;
private ServletContext context;
public RequestDemo3() {
super();
System.out.println("RequestDemo3被创建了");
}
public String execute() throws Exception{
//一、接收参数,通过接口注入的方式获得request对象
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
System.out.println(key+" "+Arrays.toString(values));
}
//二、向对象中保存数据
//向request域中保存数据
request.setAttribute("reqName", "reqValue");
//向session中保存数据
request.getSession().setAttribute("sessName", "sessValue");
//向application(ServletContext)中保存数据
context.setAttribute("appName", "appValue");
return super.execute();//相当于返回success,源码
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
@Override
public void setServletContext(ServletContext context) {
this.context = context;
}
}
配置文件:
<?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="demo1" extends="struts-default" namespace="/">
<action name="requestDemo3" class="com.itheima.struts2.demo1.RequestDemo3" method="">
<result name="success">/demo1/demo2.jsp</result>
</action>
</package>
</struts>
SUCCESS跳转页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示数据</title>
</head>
<body>
<h1>显示数据</h1>
${reqName }
${sessName }
${appName }
</body>
</html>
八 Struts2访问Servlet的API方式三:接口注入的更多相关文章
- 七 Struts2访问Servlet的API方式二:原生方式
Struts2访问Servlet的API方式二:原生方式 和解耦合的方式不同,原生方式既可以拿到域对象,也可以调用域对象中的方法 前端jsp: <%@ page language="j ...
- 六 Struts2访问Servlet的API方式一:完全解耦合的方式
注意: 完全解耦合的方式,这种方式只能获得代表request.session.application的数据的Map集合. 不能操作这些对象的本身的方法. 1 jsp: <%@ page lang ...
- (转)Struts2访问Servlet的API及......
http://blog.csdn.net/yerenyuan_pku/article/details/67315598 Struts2访问Servlet的API 前面已经对Struts2的流程已经执行 ...
- Struts2(七) Struts2访问Servlet的API
当接受表单参数,向页面保持数据时.要用到Struts访问Servlet 的API .下面只做参考,有错误或不同意见可以发送邮箱2440867831@qq.com .建议大家看struts文档,源代码 ...
- Struts2访问Servlet
知识点: servlet是单例的,Action是多例的,一次请求,创建一个Action的实例 结果页面分为全局和局部两类(局部优先级更高) result标签:name : 默认succestype : ...
- Struts2学习第2天--Struts2的Servlet的API的访问 Struts2的结果页面的配置 Struts2的数据的封装(包括复杂类型)
启动后访问jsp 输入姓名密码: 提交后跳转打action 打印: 修改类: 配置同上 结果同上. 实现这俩接口 就得到了 以上代码附上: struts.xml: <?xml version=& ...
- struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装
一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...
- Struts2访问Servlet API的三种方式
有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...
- 配置Struts2及Struts2访问servlet api的方式
Struts2的起源与背景 在很长的一段时间内,在所有的MVC框架中,Struts1处于绝对的统治地位,无论是从市场的普及范围,还是具体的使用者数量. 其他MVC框架都无 法与其相比,作为一一款优秀的 ...
随机推荐
- 架构师必备技能指南:SaaS(软件即服务)架构设计
1.介绍 从计算机诞生开始,就伴随着计算机应用程序的演变.简短的回顾历史,我们可以清楚的看到应用程序发生的巨大变化.上世纪70年代中期,随着个人PC机的爆炸式增长以及程序员的崛起,让计算机的计算能力得 ...
- matplotlib动态图subplots()和subplot()不同及参数
一.fig,ax = subplots(nrows,ncols,sharex,sharey,squeeze,subplot_kw,gridspec_kw,**fig_kw) 创建画布和子图 nrow ...
- php从接口获取数据转成可以用的数组或其他(含转换编码)
程序开发,时常会用到将接口的json数据转换成程序可以用的,因为今天看到一个比较好的程序,贴上来,以备随时查看: /** * 将对象转成数组,并按要求转换编码 * * @param array $ar ...
- 通过web页面修改nginx配置
资源路径:https://download.csdn.net/download/song_yan_/12002460 nginx动态配置 一.页面展示 二.前端代码 (1)jsp页面(nginxCon ...
- windows C++ 网络编程
转载:https://blog.csdn.net/yao_hou/article/details/91400832 https://blog.csdn.net/Ctrl_qun/article/li ...
- python时间模块time,datetime
时间模块time.datetime 模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具.换言之,Python 默认情况下提供了一些可用的东西,但是这些默 ...
- java 执行jar包里面一个类class文件
一.环境: 1. linux 2. 有两个java类,A.java和B.java,都在同一个目录下 二.源码: A.java package com.abc; public class A { ...
- Try-Catch无法正确定位异常位置,我推荐2个有效技巧
宇宙第一开发IDE Visual Studio的调试功能非常强大,平常工作debug帮助我们解决不少问题.今天分享两个异常捕获的技巧,希望能够帮助解决一些问题. 以下两种情况,我相信大家都会遇到过. ...
- 【笔记4-商品模块】从0开始 独立完成企业级Java电商网站开发(服务端)
分类管理模块 数据表结构设计 分类表 CREATE TABLE.mmall_ category' ( 'id' int(11) NOT NULL AUTO_ INCREMENT COMMENT ' 类 ...
- Steam 游戏 《Sudoku Universe(数独宇宙)》、《Sudoku Killer(数独杀手)》、《Sudoku Jigsaw(数独拼图)》数字位置解析 ---------C# 数独程序解析(2020年寒假小目标11)
日期:2020.02.11 博客期:151 星期二 今天,准备肝一个 C# 的数独读写工具(汇编语言也在努力学习命令方法中...),这三个游戏我早就买下了,一直放在 Steam 库里积灰,看着它的成就 ...