Struts2(七) Struts2访问Servlet的API

当接受表单参数,向页面保持数据时。要用到Struts访问Servlet 的API 。下面只做参考,有错误或不同意见可以发送邮箱[email protected]  。建议大家看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类

 1 public class RequestDemo1  extends ActionSupport{
 2     @Override
 3     public String execute() throws Exception {
 4         //ac 相当于Servlet 的request
 5                 ActionContext ac=ActionContext.getContext();
 6                 Map<String ,Object> paramMap=ac.getParameters();
 7                 for(String key: paramMap.keySet()){
 8                     String [] value=(String[]) paramMap.get(key);
 9                     System.out.println(key+"  "+value[0]);
10                 }
11
12                 ac.put("request1", "张三");
13                 ac.getSession().put("session1","李四");
14                 ac.getApplication().put("application1", "王五");
15         return SUCCESS;
16     }
17 }

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实例
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="api"  namespace="/" extends="struts-default">
 7
 8          <action  name="Demo5Action"  class="com.sturts2.day02.b_api.Demo5Action">
 9                  <result name="success" >/api.jsp</result>
10          </action>
11
12     </package>
13 </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配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="api"  namespace="/" extends="struts-default">
 7
 8          <action  name="Demo5Action"  class="com.sturts2.day02.b_api.Demo5Action">
 9                  <result name="success" >/api.jsp</result>
10          </action>
11
12
13
14     </package>
15 </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

1 <body>
2     request:${request1 } <br/>
3     session:${session1 }   <br/>
4     application:${application1 } <br/>
5
6 </body>

页面显示:

控制台输出

原文地址:https://www.cnblogs.com/shaoxiaohuan/p/8528664.html

时间: 2024-11-08 21:17:38

Struts2(七) Struts2访问Servlet的API的相关文章

struts2学习笔记之六(Action访问servlet的API以及复制项目小技巧)

action和servlet分离使得action代码更加纯洁,与servlet的耦合性也降低了 但是有时候却不得不访问servlet API,比如把数据放到session,application里, 更甚至于添加cookie(response.addCookie()) strust2提供了两种方式访问servlet api 伪访问 借助于ActionContext类 Map<String ,Object > getApplication() 模拟访问http application Map&l

struts2的action访问servlet API的三种方法

学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object get(Object key);可以获取request属性 Map getSession():可以得到session属性 Map getAppliction():可以得到ServletContext实例 2.action类实现 ServletContextAware,ServletRequestAwa

struts2访问servlet的API

1.struts作为控制器,正常很多时候要访问到servlet的API,常用功能: (1).获取请求参数,控制界面跳转 (2).把共享数据存储于request,session,servletContext中,获取作用域中的数据 宏观的来说,应该有三种访问方式. 2.第一种:实现接口,访问Action时完成注入 ServletContextAware void setServletContext(javax.servlet.ServletContext context) ServletReques

Struts2笔记--Action访问Servlet API

Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.session和application. 1.使用Struts2提供的ActionContext类来访问Servlet API.下面是ActionContext类中包含的几个常用方法. Object get(Object key):该方法类似于调用HttpServletRequest的getAttrib

struts2中Action访问servlet的两种方式

一.IoC方式 在struts2框架中,可以通过IoC方式将servlet对象注入到Action中,通常需要Action实现以下接口: a. ServletRequestAware: 实现该接口的Action可以直接访问Request对象,该接口中提供void setServletRequest(HttpServletRequest request) 方法,实现此接口的Action控制类通过setServletRequestHttpServlet(HttpServlet request)方法将r

在Struts2框架中使用Servlet的API

1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上. * 提供JSP注册的页面,演示下面这三种方式 <h3>注册页面</h3> <form action="${ pageContext.request.contextPath }/xxx.action" method="post"&g

Action访问Servlet的API

Action访问Servlet的API_,主要访问如下: 1.>获取request对象 2.>获取请求参数 3.>获取response对象,可用于传递cookie 3.>获取作用域对象,request,Session,application,并设置共享数据, 访问方式一: 通过实现感知接口中的setter方法,讲其setter方法中的request参数传递到本类中来: 即,在本类中定义一个成员变量,来接收setter方法中的request. 如果,还需要获取response,Ses

action访问servlet的API并且获取到MAP类型的application,session,request

public class testAction3 extends ActionSupport { private Map<String,Object> request; private Map<String,Object> session; private Map<String,Object> application; /** * 构造函数,没有返回值 */ public testAction3(){ this.request=(Map) ActionContext.g

Struts2(二)— Result结果配置、Servlet的API的访问、模型驱动、属性驱动

一.Result结果配置 1.全局和局部结果 ? 平常我们设置跳转页面,是在action标签里面加上 result标签来控制,这种设置的页面跳转,称之为局部结果页面但是我们有时候在很多个action里面,针对不同的结果进行跳转时,也有可能跳转同一个页面,那么这个时候就可以配置全局结果页面. 1.1局部结果 在action里面写上的result跳转的页面,称之为局部结果页面配置 <action name="demo01_*" class="com.pri.web.acti