专栏首页安卓圈Struts2访问Servlet

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

结果

本文分享自微信公众号 - 安卓圈(gh_df75572d44e4),作者:King磊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot集成MyBatis

    各位应该都了解SSH和SSM工程搭建时候需要各种配置代码,还要Tomcat配置,非常麻烦

    用户3112896
  • ViewModel浅析

    这样通过点击MasterFragment的按钮就能控制DetailFragment的文本了。其实SharedViewModel就是一个中转站,一个仓库,一个存一...

    用户3112896
  • SpringCloud基础+基本框架

    SpringCloud极大的简化了分布式系统的开发,实现了微服务的快速部署和灵活应用

    用户3112896
  • java监听器从入门到放弃?

    监听器就是实现一个特定接口的java程序,此程序专门用来监听另一个类方法的调用。java的awt大量的运用到了此种模式,例如可以给button对象添加一个点击事...

    好好学java
  • day17_Listener与Filter学习笔记

        事件:就是一个事情。     事件源:产生这个事情的源头。     监听器:用于监听指定的事件的对象。(关联事件和事件源)     注册监听:要想让监听...

    黑泽君
  • Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信

    前面我们讲了很多 Flutter 相关的知识点,但是我们并没有介绍怎样实现 Flutter 与原生的通信。

    AndroidTraveler
  • 让你不再恋家的9款小众时尚的酒店网站设计

    一场说走就走的旅行少不了一家精挑细选的酒店。出门在外,没有一个舒适的住处,恐怕旅行的记忆也并不是那么美好。大牌酒店住不起,小众酒店性价比高,但哪家最合适?网上攻...

    奔跑的小鹿
  • 让你不再恋家的9款小众时尚的酒店网站设计

    一场说走就走的旅行少不了一家精挑细选的酒店。出门在外,没有一个舒适的住处,恐怕旅行的记忆也并不是那么美好。大牌酒店住不起,小众酒店性价比高,但哪家最合适?网上攻...

    奔跑的小鹿
  • ASP.NET Core on K8S深入学习(8)数据管理

    在Docker中我们知道,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中,常用的...

    Edison Zhou
  • 千秋万代,一统江湖——Flutter for All Screens

    2018年2月27日,Google发布了Flutter的第一个Beta版本,由于自己是一个Google粉,所以很快就下载尝鲜了,之后还在简书上发过一篇博客《你好...

    出其东门

扫码关注云+社区

领取腾讯云代金券