• Struts 2


    Struts 2 简介

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

    虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

    体系结构

    应用流程注解
    Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括(ActionContextCleanUp)过滤器。
    经过Other filters(SiteMesh ,etc),需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,
    ActionMapper返回一个收集Action详细信息的ActionMaping对象。
    FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象。
    ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N)一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)
    然后执行这个Result Result会调用一些模版(JSP)来呈现页面。
    拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和核心控制器(FilterDispatcher)。

    Struts 2资源包的目录结构

    apps:官方提供的Struts 2应用实例

    docs:官方提供的Struts 2文档

    lib:Struts 2 发行包及其依赖包

    src:Struts 2对应的源代码

    Action接口中常量字符串的逻辑含义

    SUCCESS 表示程序处理正常,并返回给用户成功后的结果
    NONE 表示处理正常结束,但不返回给用户任何东西
    ERROR 表示处理结果失败
    INPUT 表示需要更多用户输入才能顺利执行
    LOGIN 表示需要用户正确登录后才能顺利执行
     
    需要的依赖
     <dependency>
          <groupId>javaee</groupId>
          <artifactId>javaee-api</artifactId>
          <version>5</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.struts</groupId>
          <artifactId>struts2-core</artifactId>
          <version>2.3.4.1</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.struts.xwork</groupId>
          <artifactId>xwork-core</artifactId>
          <version>2.3.4.1</version>
        </dependency>

    配置Struts2

    在web.xml中

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
               version="3.0">
    <display-name>struts2_helloworld</display-name>
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>  
        
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

     创建控制类HelloWorld

    
    
    import com.opensymphony.xwork2.Action;

    public class HelloWorld implements Action {

    @Override
    public String execute() throws Exception {
    return SUCCESS;
    }
    }
    
    

     创建index.jsp

    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%--
      Created by IntelliJ IDEA.
      User:
      Date: 2018/11/15
      Time: 9:26
      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>
    </body>
    </html>

    配置struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- package:包,用于对Action进行封装 name:包名,根元素下可以有多个包,彼此不能重名 extends:继承,用于指定继承的包,相当于将继承包下的配置信息复制到当前包 namespace:命名空间,用于规定Action的访问路径,必须“/”开头 -->
        <package name="default" namespace="/" extends="struts-default">
           <!--action:业务控制器,用于注册业务控制器组件 name:action名称,用于规定Action的访问路径 class:业务控制器组件,用于指定业务控制器对应的类 method:方法,用于指定访问当前action时要调用的方法 *请求URL:http://ip:port/projectName/namespace/ActionName.action   -->
          <action name="hello" class="action.HelloWorld ">
            <!--
            result:输出组件,用于转发、重定向、直接输出 name:名称,一个action下可以有多个result,彼此不能重名 默认值转发,元素内设置转发的页面 -->
          <result name="success">/hh.jsp</result>
    </action>
      </package>
    </struts>

    效果图

     实现通配符

     <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="struts06" namespace="/" extends="struts-default">
            <action name="*_*" class="day06.{1}" method="{2}">
                <result name="{2}">/{1}/{2}.jsp</result>
            </action>
        </package>
    </struts> 
    
    

    public class PatternAction extends ActionSupport{


      public String list(){
        ((Map<String,Object>)ActionContext.getContext().get("request")).put("msg","Result类型");
       return "list";
      }


      public String add(){


        return SUCCESS;
      }
    }

     
    list.jsp

    <html> <head> <title>Title</title> </head> <body> list </body> <html>

    效果

  • 相关阅读:
    模板之st表
    codevs 1163 访问艺术馆
    noip提高组2000 乘积最大
    [HNOI2008]越狱(luogu P3197)
    [ZJOI2009]假期的宿舍(luogu P2055)
    noip普及组2013 车站分级(luogu P1983)
    [HNOI2010]平面图判定
    sql中对于case when...then...else...end的写法和理解
    java中,去除空白的方法
    关于debug时的一些操作
  • 原文地址:https://www.cnblogs.com/matianpeng/p/9974279.html
Copyright © 2020-2023  润新知