struts2基础详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/X18621144576/article/details/79952238

struts2配置文件的配置

1.struts2配置文件的配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 头文件 在struts2-core-2.3.24.jar包下的struts-2.3.dtd文件中可以找到-->
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- struts 根标签 -->
<!--
 package name 标签 随便写 只要不重复就可以 可以进行模块化区分
 namespace 命名空间(访问Action网址前的一个网址部分)
 extends 继承一个包 struts-default 默认配置 默认提供的功能
 -->
 <!-- 
    action
    name 是你这个类的访问的路径
    class 类的全限定类名
    method 类中被访问的方法

    result
    name 方法的返回值(匹配)
    type 请求跳转的方式 默认是 请求转发 dispatcher
    值部分: 跳转网站资源
  -->
<struts>
    <package name="hello" namespace="/hello" extends="struts-default" >
        <action name="HelloAction" class="com.lanou3g.hello.HelloAction" method="hello" >
            <result name="success" type="dispatcher" >/hello.jsp</result>
        </action>
    </package>
    <!-- 引入其他struts配置文件 -->
    <include file="com/xxx/def/struts.xml"></include>
    <include file="com/xxx/dynamic/struts.xml"></include>
    <include file="com/xxx/test/struts.xml"></include>
</struts>   
 struts2配置文件配置完成后 需要在web.xml文件中配置过滤器

struts2中Action类的跳转

1.Action类跳转向jsp文件
<!-- type="dispatcher"表示请求转发 redirect表示请求重定向-->
<action name="Demo01Action" class="com.xxx.jump.Demo01Action" method="execute">
            <result name="success" type="redirect">/jump.jsp</result>
</action>
2.Action跳转向Action
<action name="Demo02Action" class="com.
xxx.jump.Demo02Action" method="execute">
    <result name="success" type="redirectAction">
        <!-- 要重定向的名字 -->
        <param name="actionName">Demo01Action</param>
        <!-- 要重定向action的命名空间 -->
        <param name="namespace">/</param>
    </result>
</action>
<action name="Demo04Action" class="com.lanou3g.jump.Demo04Action" method="execute">
    <!-- chain Action之间进行转发 -->
    <result name="success" type="chain">
        <param name="actionName">Demo01Action</param>
        <param name="namespace">/</param>
    </result>
</action>

struts2中Action类获取域的方式

1.Action获取域
/*
 * 获取ServletAPI
 * ActionContext 对象(数据大管家)  内部也是个map
 * ActionContext的生命周期 是跟随 请求对象走的
 * Servlet 线程不安全的(访问共享数据 会发生问题)
 * 整个程序 系统值帮你创建一次
 * Struts2 线程安全的 如何做到的?
 * 一个用户访问Struts2就给你创建一个ActionContext对象
 * /
// 获取域方式一
// 获取request域
 方法1:ActionContext.getContext.put("name","xxx");(系统推荐的方法)
 方法2:Map<String, Object> requestScope = (Map<String, Object>)
 ActionContext.getContext().get("request");
 // 获取session
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name", "xxx");
// 获取application域(servletcontext域)
Map<String, Object> applicationScope = 
ActionContext.getContext().getApplication();
applicationScope.put("name", "xxx");

// 获取域方式二(通过获取servlet原生对象的方式)
// 获取原生servlet对象
    HttpServletRequest request = ServletActionContext.getRequest();
    // 直接使用request对象获取session对象
    HttpSession session = request.getSession();
    HttpServletResponse response = ServletActionContext.getResponse();
    PageContext pageContext = ServletActionContext.getPageContext();
    ServletContext servletContext = ServletActionContext.getServletContext();

// 获取域方式三(通过实现接口的方式 获取servlet原生对象)
// 获取request(通过实现不同的接口可以获取到各个servlet原生对象)
public class Demo07Action extends ActionSupport implements ServletRequestAware {
    // 创建一个成员变量
    private HttpServletRequest request;
    public Demo07Action() {
        System.out.println("Demo07Action创建了");
    }

    @Override
    public String execute() throws Exception {
        // 直接使用成员变量
        // System.out.println("Demo07Action");
        this.request.setAttribute("name", "jiekou");
        return SUCCESS;
    }

    // 接口中的方法
    @Override
    public void setServletRequest(HttpServletRequest request) {
        // 使用成员变量赋值的方式得到原生servlet对象
        this.request = request; 
    }
}       

struts2内部执行原理

struts2执行原理

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页