Struts2访问Servlet

2019-09-26 14:55:01 浏览数 (1)

知识点:

servlet是单例的,Action是多例的,一次请求,创建一个Action的实例

结果页面分为全局和局部两类(局部优先级更高)

result标签: name : 默认succes type :页面跳转类型   dispatcher 默认值,请求转发(action转发jsp)   redirect 重定向(action重定向jsp)   chain 转发(action转发action)   redirectAction 重定向(action重定向action)   stream struts2中提供文件下载的功能

代码如下

struts.xml

代码语言:javascript复制
<?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>
    <package name="demo1" extends="struts-default">
        <!--全局结果页面-->
        <global-results>
            <result name="success">servlet1/demo2.jsp</result>
        </global-results>
        <action name="requestDemo1" class="com.jinke.servlet1.RequestDemo1"/>
        <action name="requestDemo2" class="com.jinke.servlet1.RequestDemo2"/>
        <action name="requestDemo3" class="com.jinke.servlet1.RequestDemo3"/>

        <!--局部结果页面-->
        <action name="requestDemo1" class="com.jinke.servlet1.RequestDemo1">
            <result name="success">servlet1/demo2.jsp</result>
        </action>
        <action name="requestDemo2" class="com.jinke.servlet1.RequestDemo2">
            <result name="success">servlet1/demo2.jsp</result>
        </action>
        <action name="requestDemo3" class="com.jinke.servlet1.RequestDemo3">
            <result name="success">servlet1/demo2.jsp</result>
        </action>
    </package>
</struts>

web.xml

代码语言:javascript复制
<?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">
    <welcome-file-list>
        <welcome-file>servlet1/demo1.jsp</welcome-file>
    </welcome-file-list>
    <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>

demo1.jsp

代码语言:javascript复制
<%--
  Created by IntelliJ IDEA.
  User: wanglei
  Date: 2019/6/18
  Time: 11:03
  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>
<h1>Struts2访问Servlet的API</h1>
<h3>方式一:完成解耦合的方式</h3>
<form action="${pageContext.request.contextPath}/requestDemo1.action" method="post">
    姓名:<input type="text" name="name"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit" value="提交"></form>

<h3>方式二:完成原生的方式访问</h3>
<form action="${pageContext.request.contextPath}/requestDemo2.action" method="post">
    姓名:<input type="text" name="name"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit" value="提交"></form>

<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>

demo2.jsp

代码语言:javascript复制
<%--
  Created by IntelliJ IDEA.
  User: wanglei
  Date: 2019/6/18
  Time: 11:24
  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>
<h1>显示数据</h1>
${reqName}<br/>
${sessName}<br/>
${appName}<br/>
</body>
</html>

action层

代码语言:javascript复制
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.dispatcher.HttpParameters;

/**
 * 访问Servlet的API方式一:完全解耦合的方式
 */
public class RequestDemo1 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        //接收参数
        //利用struts2中的对象ActionContext对象
        ActionContext context = ActionContext.getContext();
        //调用ActionContext中方法
        HttpParameters map = context.getParameters();
//        System.out.println(map);

        //二.向域对象中存入数据
        context.put("reqName", map);//相当于request.setAttribute()
        context.getSession().put("sessName", map);//相当于session.setAttribute()
        context.getApplication().put("appName", map);//相当于application.setAttribute()
        return SUCCESS;
    }
}
代码语言:javascript复制
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 访问Servlet的API方式二:采用原生的方式
 */
public class RequestDemo2 extends ActionSupport {
    @Override
    public String execute() throws Exception {
        //一、接收数据
        //直接获得request对象,通过ServletActionSupport
        HttpServletRequest request = ServletActionContext.getRequest();
        Map<String, String[]> map = request.getParameterMap();
        System.out.println(map.toString());

        //二、向域对象中保存数据
        //向request中保存数据
        request.setAttribute("reqName", map.toString());
        //向session中保存数据
        request.getSession().setAttribute("sessName", map.toString());
        //向application中保存数据
        ServletActionContext.getServletContext().setAttribute("appName", map.toString());
        return SUCCESS;
    }
}
代码语言:javascript复制
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Map;

/**
 * 访问Servlet的API方式三:接口注入的方式
 */
public class RequestDemo3 extends ActionSupport implements ServletRequestAware, ServletContextAware {
    private HttpServletRequest request;
    private ServletContext context;

    @Override
    public String execute() throws Exception {
        //一、接收参数
        //通过接口注入的方式获得request对象
        Map<String, String[]> map = request.getParameterMap();
        for (String key : map.keySet()) {
            String[] value = map.get(key);
            System.out.println(key   "   "   Arrays.toString(value));
        }

        //二、向域对象中保存数据
        //向request域中保存数据
        request.setAttribute("reqName", map.toString());
        //向session中保存数据
        request.getSession().setAttribute("sessName", map.toString());
        //向Application中保存数据
        context.setAttribute("appName", map.toString());
        return super.execute();
    }

    @Override
    public void setServletRequest(HttpServletRequest httpServletRequest) {
        this.request = httpServletRequest;
    }


    @Override
    public void setServletContext(ServletContext servletContext) {
        this.context = servletContext;
    }
}

结果

0 人点赞