Struts学习之路-第二天(Action与Servlet API)

Struts作为一款Web框架自然少不了与页面的交互,开发过程中我们最常用的request、application、session等struts都为我们进行了一定的封装与处理

一、通过ActionContext获取

方法 说明
void put(String key,Object value) 模拟HttpServletRequest中的setAttribute()
Object get(Object key) 通过参数key查找当前ActionContext中的值
Map getApplication() 返回一个Application级的Map对象
static ActionContext getContext() 获得当前线程的ActionContext对象
Map getParameters() 返回一个Map类型HttpSession对象
void put(Object key,Object vlue) 向前ActionContext对象中存入名值对信息
void setApplication(Map application) 设置Application上下文
void setSession(Map session) 设置一个Map类型的Session对象
Map setSession()
返回一个Map类型的HttpSession对象

  1.配置web.xml

  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <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>
</web-app>

  2.配置struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!--struts中对应mvc的三层是,filterdispatcher->控制层、Action->模型层、Result->视图层-->

    <package name="test" extends="struts-default">
    <!--设置允许动态调用的方法-->
        <global-allowed-methods>user</global-allowed-methods>

        <action name="user" class="test.TestAction">
            <!--result顾名思义返回结果,name属性与Action中返回的字符串一样,作用就是返回视图-->
            <result name="success">/success.jsp</result>
            <result name="user">/user.jsp</result>
        </action>
    </package>

    <!--设置允许动态调用,除了execute()方法之外的其他自定义方法-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
</struts>

  3.在test包下写TestAction类

package test;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class TestAction extends ActionSupport{
    private static final long serialVersionUID = 1L;
    //我们也可以通过实现特定接口来获取对应的对象比如ServletRequestAware可以获取到HttpServletRequest
    //的实例,但是我们需要手动定义该对象,通过接口中的重写的方法来初始化
    public String execute(){
        return "success";
    }
    public String user(){
//        struts通过Action访问servlet中的request、session、application等
        ActionContext context = ActionContext.getContext();
        context.put("name","request");//默认是request
        context.getSession().put("name","session");//session
        context.getApplication().put("name","application");//application
        return "user";
    }
}

4.准备页面index.jsp、user.jsp

  1)index.jsp

<%--
  Created by IntelliJ IDEA.
  po: zgye
  Date: 2019/5/11
  Time: 12:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
      <a href="user">user</a>
      <a href="user!user.action">select</a>
  </body>
</html>

  2)user.jsp

<%--
  Created by IntelliJ IDEA.
  po: zgye
  Date: 2019/5/11
  Time: 13:18
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户页面</title>
</head>
<body>
    测试内置对象:
    ${requestScope.name}
    ${sessionScope.name}
    ${applicationScope.name}
 </body>
</html>

5.启动服务点击select超链接测试

二、通过特定接口访问

ActionContext虽然可以间接的访问Servlet API,同时我们有时候也需要直接去访问Servlet API,Struts2为我们提供了对应的接口

  1)ServletRequestAware

  2)ServletResponseAware

  3)ServletContextAware

  ·······

  1.准备web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <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>
</web-app>

  2.配置struts,xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!--struts中对应mvc的三层是,filterdispatcher->控制层、Action->模型层、Result->视图层-->

    <package name="test" extends="struts-default">

        <!--接口方式测试Servlet API-->
        <action name="servlet" class="test.TestServletAction">
            <result name="servlet">/servlet.jsp</result>
        </action>
   </package>
</struts>

  3.准备TestServletAction.ava

package test;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServletAction extends ActionSupport implements ServletRequestAware, ServletResponseAware, ServletContextAware {
    private HttpServletRequest request;
    private HttpServletResponse response;
    private ServletContext context;
    @Override
    public void setServletRequest(javax.servlet.http.HttpServletRequest httpServletRequest) {
        request=httpServletRequest;
    }
    @Override
    public void setServletResponse(HttpServletResponse httpServletResponse) {
        response=httpServletResponse;
    }
    @Override
    public void setServletContext(ServletContext servletContext) {
        context=servletContext;
    }
    @Override
    public String execute() throws Exception {
        request.setAttribute("name","request");
        request.setAttribute("response",response);
        context.setAttribute("name","context");
        return "servlet";
    }

}

  4.准备servlet.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: zgye
  Date: 2019/5/12
  Time: 12:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>servlet测试页面</title>
</head>
<body>
    request:${requestScope.name}<br>
    response:${requestScope.response}<br>
    context:${applicationScope.name}
</body>
</html>

  5.启动服务请求http://localhost:8080/servlet查看测试结果

原文地址:https://www.cnblogs.com/Tiandaochouqin1/p/10851871.html

时间: 2024-10-10 07:52:51

Struts学习之路-第二天(Action与Servlet API)的相关文章

java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递

1.首先客户端需要引入 jquery-1.11.1.js 2.其次javaweb工程里面需要引入jar包  [commons-beanutils-1.8.0.jar.commons-collections-3.1.jar.commons-lang-2.4.jar.commons-logging-1.1.3.jar.ezmorph-1.0.6.jar.json-lib-2.3-jdk15.jar] 3.客户端js端代码 4.servlet 服务器,映射的路径CardColl 以上就是整个过程,如果

笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <filter>     <filter-name>struts2</filter-name>     <filter-class>org.apache.struts2.di

Action访问Servlet API的三种方法

一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器而言,不访问action是不行的,Struts提供了一种比较简单的方式来访问Servlet API . 二.通常我们需要访问的Servlet API 是 HttpSession.HttpservletRequest.ServletContext,分别对应了JSP内置对象 session,reques

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

【Hibernate学习笔记】第二章节:JSP/Servlet及相关技术详解

JSP(Java Servr Page)和Servlet是Java EE规范的两个基本成员,他们是Java Web开发的重点知识,也是Java EE开发的基础知识.JSP和Servlet的本质是一样的,因此JSP最终必须编译成Servlet才能运行,或者说JSP只是生成Servlet的"草稿"文件.JSP的特点是在HTML页面中嵌入了Java代码片段,从而可以动态的提供页面内容. 1.Web应用和web.xml文件 JSP.Servlet.Listener和Filter等都必须运行在W

Java EE----Struts2 Action 访问Servlet API

以前 Servlet  doGet(HttpServletRequest,HttpServletResponse) ,doGet方法无法进行单独测试 ,要测试,必须构造request和response对象 Struts2 Action的execute方法非常便于单独测试,这个方法不依赖Servlet API Servlet常用API对象 : HttpServletRequest.HttpSession.ServletContext (三种服务器端数据范围).HttpServletResponse

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

Python学习之路第二天——函数

一.Python2.X内置函数表: 注:以上为pyton2.X内置函数,官方网址:https://docs.python.org/2/library/functions.html 二.Python3.X内置函数表: 注:以上为pyton3.X内置函数,官方网址:https://docs.python.org/3.5/library/functions.html 三.自定义函数: def 函数名(参数):     ... 函数体     ... def:是函数的关键字,告诉python解释器这是一

struts学习笔记(3)---Action中访问ServletAPI获取真实类型的元素

一.源代码: 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"> <