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;
    }
}
复制代码

结果

  

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

posted @   嘉禾世兴  阅读(362)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2016-06-18 【设计模式】责任链模式
2016-06-18 【设计模式】代理模式
2016-06-18 【设计模式】享元模式
2016-06-18 【设计模式】外观模式
2016-06-18 【设计模式】装饰者模式
点击右上角即可分享
微信分享提示