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方式三:接口注入的更多相关文章

  1. 七 Struts2访问Servlet的API方式二:原生方式

    Struts2访问Servlet的API方式二:原生方式 和解耦合的方式不同,原生方式既可以拿到域对象,也可以调用域对象中的方法 前端jsp: <%@ page language="j ...

  2. 六 Struts2访问Servlet的API方式一:完全解耦合的方式

    注意: 完全解耦合的方式,这种方式只能获得代表request.session.application的数据的Map集合. 不能操作这些对象的本身的方法. 1 jsp: <%@ page lang ...

  3. (转)Struts2访问Servlet的API及......

    http://blog.csdn.net/yerenyuan_pku/article/details/67315598 Struts2访问Servlet的API 前面已经对Struts2的流程已经执行 ...

  4. Struts2(七) Struts2访问Servlet的API

    当接受表单参数,向页面保持数据时.要用到Struts访问Servlet 的API .下面只做参考,有错误或不同意见可以发送邮箱2440867831@qq.com  .建议大家看struts文档,源代码 ...

  5. Struts2访问Servlet

    知识点: servlet是单例的,Action是多例的,一次请求,创建一个Action的实例 结果页面分为全局和局部两类(局部优先级更高) result标签:name : 默认succestype : ...

  6. Struts2学习第2天--Struts2的Servlet的API的访问 Struts2的结果页面的配置 Struts2的数据的封装(包括复杂类型)

    启动后访问jsp 输入姓名密码: 提交后跳转打action 打印: 修改类: 配置同上 结果同上. 实现这俩接口 就得到了 以上代码附上: struts.xml: <?xml version=& ...

  7. struts2学习笔记(四)——访问Servlet的API&结果跳转&数据封装

    一.Struts2访问Servlet的API 前面已经对Struts2的流程执行完成了,但是如果表单中有参数如何进行接收?又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习Struts ...

  8. Struts2访问Servlet API的三种方式

    有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...

  9. 配置Struts2及Struts2访问servlet api的方式

    Struts2的起源与背景 在很长的一段时间内,在所有的MVC框架中,Struts1处于绝对的统治地位,无论是从市场的普及范围,还是具体的使用者数量. 其他MVC框架都无 法与其相比,作为一一款优秀的 ...

随机推荐

  1. ubuntu更换pip源

    1.创建pip.conf文件 cd ~/.pip 当提示不存在时,创建它 mkdir ~/.pip 在.pip目录下创建一个pip.conf文件 touch pip.conf 2.编辑pip.conf ...

  2. Java - Java 命令行简介: 选项, 属性, 参数

    概述 简单介绍一下 java 命令行相关的参数及属性 1. java 命令行 基本 命令 > java <mainClass> 描述 执行 Java 类 需要准备好编译完成的 mai ...

  3. 虚拟机安装archLinux+xfce桌面教程(更新时间2017-5-8)

    本教程转自http://blog.sina.com.cn/u/5692023517 感谢大神写出如此详细的教程并允许转载 本教程的目的:为了让新手安装arch不再那么难, 一个好的教程可以少走很多弯路 ...

  4. 激活windows系统

    1.下载KMS 2.如图所示,双击KMSpico看是否正常运行 3.双击KMSpico正常后出现以下界面 4.点击红色按钮 5.等自动退出就是激活成功,大概半年需要激活一次

  5. linux内存查看、清理、释放命令

    echo 1 > /proc/sys/vm/drop_caches 清理前 # free -h total used free shared buffers cached Mem: 19G 19 ...

  6. python pylab.plot() 方法使用

    Python 中用pylab模块, pylab.plot() 函数,绘制折线统计图 import pylab as pl x = [, , , ] y = [, , , ] ''' plot参数说明: ...

  7. js正则验证表达式验证

    /* 合法uri */ export function validateURL(textval) {  const urlregex = /^(?:http(s)?:\/\/)?[\w.-]+(?:\ ...

  8. LVS的概念和重要性

    LVS: 概念:是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统 作用:举例 像有三个小区,但是工作的时间和休息的时间不一样,第一个是白天工作,一 ...

  9. Spring扫描组件的使用详解

    https://blog.csdn.net/you18131371836/article/details/53691044?utm_source=blogxgwz5

  10. [linux] ARCH LINUX 常见问题及实用工具汇总

    1.办公 screen-recorder 1)深度linux桌面录制软件(不支持录音),操作简单,可以保存mp4和gif格式 2)命令安装:sudo pacman -S deepin-screen-r ...