八 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框架都无 法与其相比,作为一一款优秀的 ...
随机推荐
- 【深入HTTP协议】
目录 HTTP 请求 HTTP 响应 "HTTP是(Hyper Text Transfer Protocol)超文本传输协议的缩写. HTTP的发展是万维网协会(World Wide Web ...
- HashSet HashMap 源码阅读笔记
hashcode() 与 equals() 应一起重写,在HashMap 会先调用hash(key.hashcode()) 找到对应的entry数组位置 (一般初始是16,2^x,rehash后会翻倍 ...
- etc/hosts文件详解
Linux 修改 etc/hosts文件 hosts文件 hosts —— the static table lookup for host name(主机名查询静态表). hosts文件是Linux ...
- SOCV / POCV 模型 (3)
STA无疑是数字集成电路设计实现方法学中最『漂亮』的模型之一,但是随意着工艺进步,local varition 的随机性及重要性增加,传统STA 的局限性日渐突出.大概在十五年前,SSTA成了一个研究 ...
- 从游击队到正规军(三):基于Go的马蜂窝旅游网分布式IM系统技术实践
本文由马蜂窝技术团队电商交易基础平台研发工程师"Anti Walker"原创分享. 一.引言 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个 ...
- Web基础了解版07-EL表达式-运算符-11个隐式对象
EL EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作.EL在得到某个数据时,会自动进 ...
- oracle增加字段,循环
alter table PARAMETETER_CONFIGURATION add (INPUT_IS VARCHAR2(20) ): declare sum_i int:=0; --定义整型变量,存 ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 M. Longest subsequence(思维+序列自动机)
序列自动机跑s串 假设k为s和t相同的长度,初始时相同长度为0 取s串中大于t[i]的最左边的位置,用n-tmp+1+i-1更新答案,tmp是最左端的位置 然后去t[i]相等的位置,走到下一位,如果下 ...
- HDU1276-士兵队列训练问题 (Queue)
题很简单,STL中queue的基本使用. #include <bits/stdc++.h> using namespace std; int N,num; int main() { sca ...
- tab 切换 和 BottomNavigationBar 自定义 底部导航条
BottomNavigationBar 组件 BottomNavigationBar 是底部导航条,可以让我们定义底部 Tab 切换,bottomNavigationBar是 Scaffold ...