zoukankan      html  css  js  c++  java
  • Struts2访问Servlet

    知识点:

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

    结果

      

    欢迎关注我的微信公众号:安卓圈

  • 相关阅读:
    【转】字典转模型需要注意的问题,以及第三方框架来处理字典转模型
    【转】使用SOAP访问Web服务
    Foundation框架2
    Foundation框架1
    什么是Protocol
    什么是Block
    什么么是Category
    ARC
    autorelease简介
    循环retain
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/11045225.html
Copyright © 2011-2022 走看看