Struts2访问Servlet

  • 2019 年 10 月 7 日
  • 笔记

知识点:

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

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

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

代码如下

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

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

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

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

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

结果