Struts2学习第三课 访问Web资源

1.什么是WEB资源?

HttpServletRequest,HttpSession,ServletContext等原生的Servlet API。

2.为什么访问WEB资源?

B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等。

3.如何访问?

在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源

与Servlet API解耦的访问方式:只能访问有限的Servlet API对象,且只能访问其有限的方法(获取请求参数,读写域对象的属性,使session失效)

为了避免与Servlet API耦合在一起,方便Action做单元测试,struts2对HttpServletRequest,HttpSession和ServletCOntext进行封装,构造了3个Map对象来替代这3个对象,在Action中可以直接使用HttpServletRequest,HttpServletSession,ServletContext对应的Map对象来保存和读取数据。

通过com.opensymphony.xwork2.ActionContext

通过Action实现如下接口:

org.apache.struts2.interceptor.ApplicationAware;

org.apache.struts2.interceptor.RequestAware;

org.apache.struts2.interceptor.SessionAware;

与Servlet API耦合的访问方式:(可以访问更多的Servlet API对象,即可以调用其原生的方法)

通过org.apache.struts2.ServletActionContext

通过实现对应的ServletXxxAware接口

ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters,request,session,application等。

获取HttpSession对应的Map等:

public Map getSession()

获取ServletContext对应的Map对象:

public Map getApplication()

获取请求参数对应的Map对象:

public Map getParameters()

获取HttpServletRequest对应的Map对象:

public Object get(Object key):ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletRequest对应的Map对象,要得到HttpServletRequest对应的Map对象,可以通过为get()方法传递"request"参数实现。

看代码:

package logan.struts2.study;

import java.util.Map;

import org.apache.struts2.dispatcher.Parameter;

import com.opensymphony.xwork2.ActionContext;

public class TestActionContext {

    public String execute(){
        //0.获取ActionContext对象
        //ActionContext是Action的上下文对象,可以从中获取到当前Action需要的一切信息
        ActionContext actionContext = ActionContext.getContext();

        //1.获取application对应的Map,并想其中添加一个属性
        //通过调用ActionContext 对象的getApplication()方法来获取application对象的Map对象
        Map<String, Object> applicationMap = actionContext.getApplication();
        //设置属性
        applicationMap.put("applicationKey", "applicationValue");
        //获取属性
        Object date = applicationMap.get("date");
        System.out.println(date);

        //2.session
        Map<String,Object> sessionMap = actionContext.getSession();
        sessionMap.put("sessionKey", "sessionValue");

        //3.request
        //ActionContext中并没有提供getRequest方法来获取Request对应的Map
        //需要手工调用get()方法,传入request字符串来获取。
        Map<String,Object> requestMap = (Map<String, Object>) actionContext.get("request");
        requestMap.put("requestKey", "requestValue");

        //4.获取请求参数对应的Map,并获取指定的参数值
        //parameters这个Map只能读,不能写。如果写入,不会报错,但是也不起作用。
        Map<String,Parameter> parameters = actionContext.getParameters();
        System.out.println(parameters.get("name"));

        return "success";
    }

}
<?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>
    <!-- action  VS  Action类
    action:代表一个Struts2的一个请求
    Action类:能够处理Struts2请求的类
     -->
    <package name="default" namespace="/" extends="struts-default">

        <action name="TestActionContext" class="logan.struts2.study.TestActionContext">
            <result>/test-actionContext.jsp</result>
        </action>

    </package>

</struts>

index.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <a href="TestActionContext.action?name=logan&name=logan2">Test ActionContext</a>

    <%
        if(application.getAttribute("date") == null){
            application.setAttribute("date", new Date());

        }
    %>

</body>
</html>

test-actionContext.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h4>Test ActionContext Page</h4>
    application:${applicationScope.applicationKey }
    <br><br>
    session:${sessionScope.sessionKey }
    <br><br>
    request:${requestScope.requestKey }
    <br><br>

    <br><br>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Struts2-2</display-name>

  <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

  <welcome-file-list>
      <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>
时间: 2024-12-13 06:25:19

Struts2学习第三课 访问Web资源的相关文章

Struts2:在 Action 中访问 WEB 资源

1.什么是 WEB 资源? HttpServletRequest.HttpSession.ServletContext 等原生的 Servlet API. 2.为什么访问 WEB 资源? B/S 的应用的 Controller 中必然需要访问 WEB 资源(向域对象中读写属性.读写Cookie.获取 realPath 等) 3.如何访问? 1).和Servlet API 解耦的方式:只能访问有限的 Servlet API 对象,且只能访问有限的方法.(使用 ActionContext .实现 X

Struts2学习第三课 Struts2详解

接着上次的课程 这次我们看struts.xml 修改如下:这里是加上命名空间,默认的是不加,我们手动加上时就要在访问时加上命名空间. <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts

Struts2(四):在Action中如何访问Web资源

1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生ServletAPI. 2.在Struts2中为什么要访问WEB资源? B/S应用中的Controller必然会有场景需要访问WEB资源:向域对象中读写属性,读取Cookie,获取realPath等. 3.在Struts2中如何访问WEB资源? a)和ServletAPI解耦的方式:只能有限的ServletAP

在Action 中访问web资源

1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Controller 中必然需要访问web资源:如域对象中读写属性,读取Cookie,获取realPath... 3.如何访问? 1.和Servlet API 解耦的方式:只能访问有限的Servlet API 对象,且只能访问有限的方法(读取请求的参数,读写域对象的属性,使Session对象失效等等) -->

安卓学习第三课——常见布局

1.相对布局 简单的说,就是通过描述每个组件所在的位置,使用的layout_below等,就是控制组件与组件之间的位置关系. 2.绝对布局 就是通过描述他的x,y坐标来确定位置 3.线性布局 有两种是水平和竖直对其方式,一般情况下整体会使用线性布局,来排列众多的组件 3.帧布局 我感觉就是一层一层的,默认的情况下,多个组件是在同一个位置,所以你需要去修改位置.同时可以选择是否显示. 这可以用来描述视频播放器暂停键的控制方法. 代码如下. <?xml version="1.0" e

6、访问web资源

1.什么是web资源? HttpServletRequest.HttpSession.ServletContext等原生servlet API 2.为什么访问web资源? B\S 的应用中Controller中必然要访问web资源:向域对象中读写属性,读写cookie.读写realPath..... 3.如何访问? ①和Servlet API解耦的方式:只能访问有限的servlet API 对象,且只能访问其有限的对象方法(读取请求参数.读取域对象的属性.使session失效) >使用Actio

Struts2学习笔记三 访问servlet

结果跳转方式 转发 <!-- 转发 --> <action name="Demo1Action" class="cn.itheima.a_result.Demo1Action" method="execute" > <result name="success" type="dispatcher" >/hello.jsp</result> </action

Web前端学习-第三课HTML篇

Q8:请列举出常用的HTML标签属性以及其含义和使用环境,其分别有哪些属性值? 标题及其对其:<h1>----<h2>:<h1 align = left | center | right | justify>  </h1> 划分及其对其:<div></div>属性:align:left center right justify HTML4.01以及 XHTML 1.0   strict DTD不支持. 块引用:<blockquo

struts2访问web资源

通过ActionContext访问 public class TestActionContextAction { public String execute(){ //获取 ActionContext 对象 ActionContext actionContext = ActionContext.getContext(); //application Map<String, Object> applicationMap = actionContext.getApplication(); appl