zoukankan      html  css  js  c++  java
  • Struts2笔记1

    一.简介
    1.作用于web层:Struts2是一种基于MVC模式的轻量级Web框架;

    2.各文件夹简介:
        apps:该文件夹存用于存放官方提供的Struts2示例程序,这些程序可以作为学习者的学习资料,可为学习者提供很好的参照。各示例均为war文件,可以通过zip方式进行解压。
        docs:该文件夹用于存放官方提供的Struts2文档,包括Struts2的快速入门、Struts2的文档,以及API文档等内容。
        lib:该文件夹用于存放Struts2的核心类库,以及Struts2的第三方插件类库。
        src:该文件夹用于存放该版本Struts2框架对应的源代码。
    struts2文件夹详解


    3.基础jar包说明

    struts2基础jar包说明


    二.struts2环境搭建
    1.下载struts2开发包,Struts2的官网: https://struts.apache.org/
    2.拷贝struts2必备jar包到web工程的lib目录
    3.在类的根路径下创建一个名称为struts.xml的文件,并导入约束
       

      1  <?xml version="1.0" encoding="UTF-8"?>
      2      <!-- 导入约束:
      3         约束的位置:在struts2的核心jar包中,struts2-core-2.3.24.jar中包含一个名称为:
      4                     struts-2.3.dtd的约束文件-->
      5      <!DOCTYPE struts PUBLIC
      6          "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
      7          "http://struts.apache.org/dtds/struts-2.3.dtd">
      8      <struts>

    </struts>

    4.在web.xml配置struts2的核心控制器(一个过滤器)
      1     <?xml version="1.0" encoding="UTF-8"?>
      2     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3          xmlns="http://java.sun.com/xml/ns/javaee"
      4          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      5         id="WebApp_ID" version="2.5">
      6          <display-name>day01struts2template</display-name>
      7 
      8          <!-- 配置struts2的核心控制器:一个过滤器 -->
      9          <filter>
     10                 <filter-name>struts2</filter-name>
     11              <filter-class>
     12              org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
     13              </filter-class>
     14          </filter>
     15          <filter-mapping>
     16              <filter-name>struts2</filter-name>
     17              <url-pattern>/*</url-pattern>
     18         </filter-mapping>
     19 
     20          <welcome-file-list>
     21              <welcome-file>index.html</welcome-file>
     22          </welcome-file-list>
     23      </web-app>

    5.验证搭建成功与否:把应用部署到tomcat中,启动tomcat,不报异常则表示搭建成功

    三.执行过程
    1.执行时序:

    图3执行时序

    2.内部执行流程:

    图4-Struts2-内部执行流程


    四.struts2配置文件
    1.struts2中提供了6个配置文件。tomcat启动服务加载我们的应用时,就加载struts2的配置文件。
    他们的加载顺序为:default.properties >> struts-default.xml >>  strtuts-plugin.xml >> struts.xml >> struts.properties >> web.xml

    配置文件加载顺序

    注意:
    (1))Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。
    (2)当多个配置文件中,有相同的参数,后加载的会把前面的值给覆盖了。

    2.struts2中的常用常量:常量定义在了default.properties配置文件中,体现形式都是key=value

    常用常量

    3.struts.xml中的标签
    (1)constant标签:用于修改struts2中的常量;属性包括name:指定常量的key,value:指定常量的值;
    (2)package标签:在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
         a.name:包的名称。必须写。且必须唯一。
         b.extends:一般情况下需要继承struts-default包,但不是必须的,不过如果不继承的话将无法使用struts2提供的核心功能,struts-default.xml中定义着struts-default这个包
             。而struts-default.xml是在我们的struts.xml加载之前加载。
         c.abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。
         d.namespace:名称空间。它的作用是把访问的URL按照模块化来管理。
                     名称空间的写法:必须以/开头;后面可以是字母和数组的组合,也可只有字母;如果有数字的话,数字不能作为/后面的第一个字符。
                     当我们指定了名称空间之后,访问的URL就变成了:名称空间+action标签的name属性取值
                           例如:/n1/hello.action
                               /customer/addCustomer.action
                       名称空间的默认值是:""(struts2官方文档中提供的)
    (3)action标签:用于建立动作名称和动作类以及动作方法的对应关系.
         a.name:指定的动作名称。和页面中url后面保持一致。注意此处不能后缀。动作名称必须唯一。
         c.class:指定的是动作类的全限定类名。
         d.method:指定的是动作方法名称.

    举例:

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <!-- 导入dtd约束 -->
      3 <!DOCTYPE struts PUBLIC
      4     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
      5     "http://struts.apache.org/dtds/struts-2.3.dtd">
      6 <struts>
      7     <constant name="struts.devMode" value="true"></constant>
      8     <constant name="struts.action.extension" value="action,,"></constant>
      9 
     10     <package name="p1" extends="struts-default" abstract="">
     11         <action name="sayHello" class="huguangqinj.com.cnblogs.test.Test" method="sayHello">
     12             <result name="success">/success.jsp</result>
     13         </action>
     14 
     15         <action name="hello2" class="huguangqinj.com.cnblogs.test.Test02" method="hello">
     16             <result name="success">/success.jsp</result>
     17         </action>
     18     </package>
     19 </struts>

    五.动作类创建的三种方式:
    1.无侵入式创建(即创建一个普通的类,实际开发中基本不用)

      1     /**
      2      * 我们把动作类中的具有特定编写规则的方法叫做动作方法。 规则是:
      3          1、访问修饰符必须是public;
      4          2、方法的返回值必须是String;
      5      *     3、方法的参数列表必须是空的;
      6      */
      7 
      8         public class Test {
      9              public String sayHello() {
     10                  return "success";
     11              }
     12          }
     13 


    2.实现action接口(实际开发中也不常用)

      1     public class Hello2Action implements Action{
      2 
      3         @Override
      4          public String execute() throws Exception {
      5              System.out.println("Hello2Action的execute方法执行了............");
      6              return ERROR;
      7          }
      8      }
      9 


    注:默认的动作方法是:execute(),所以可以不指定method属性
         <action name="hello2" class="huguangqinj.com.cnblogs.test.Hello2Action">
                 <result name="success" type="dispatcher">/success.jsp</result>
         </action>
         Action接口中的常量:
             SUCCESS:一般多用于成功;
             ERROR:一般多用于动作方法执行失败;
             LOGIN:一般多用于返回登录页面;
             NONE:一般用于不返回任何结果视图,和return null作用是一样的;
             INPUT:一般多用于数据回显,也是struts2中数据回显时的默认返回值。   

    3.继承Action接口的实现类ActionSupport(最为常用)

      1     public class Hello3Action extends ActionSupport{
      2         @Override
      3         public String execute() throws Exception {
      4              return SUCCESS;
      5          }
      6      }
                      
       
      1  <action name="hello3" class="huguangqinj.com.cnblogs.test.Hello3Action">
      2          <result name="success" type="dispatcher">/success.jsp</result>
      3      </action>

    注:
         通过struts-default.xml中我们知道默认的动作类是ActionSupport,所以如果实现该类的execute方法,则可以不用指定class和method属性
       
      1  <action name="defaultAction">
      2          <result name="success" type="dispatcher">/success.jsp</result>
      3      </action>

    六.struts.xml文件中<action>配置方式:
    1.原始全匹配方式
    2.单一通配符
    3.多通配符
    4.动态方法调用

    举例:
    动作类程序:

      1 public class UserAction extends ActionSupport {
      2 
      3     public String addUser(){
      4         System.out.println("添加了用户");
      5         return SUCCESS;
      6     }
      7     public String updateUser(){
      8         System.out.println("更新了用户");
      9         return SUCCESS;
     10     }
     11     public String deleteUser(){
     12         System.out.println("删除了用户");
     13         return SUCCESS;
     14     }
     15     public String findUser(){
     16         System.out.println("查询了用户");
     17          return SUCCESS;
     18      }
     19  }
     20 


    1.原始全匹配方式

      1 <package name="user" extends="struts-default" namespace="/user" >
      2      <action name="addUser" class="huguangqinj.com.cnblogs.test.UserAction" method="addUser">
      3              <result name="success">/success.jsp</result>
      4      </action>
      5      <action name="updateUser" class="huguangqinj.com.cnblogs.test.UserAction" method="updateUser">
      6          <result name="success">/success.jsp</result>
      7      </action>
      8      <action name="deleteUser" class="huguangqinj.com.cnblogs.test.UserAction" method="deleteUser">
      9          <result name="success">/success.jsp</result>
     10      </action>
     11      <action name="findUser" class="huguangqinj.com.cnblogs.test.UserAction" method="findUser">
     12          <result name="success">/success.jsp</result>
     13      </action>
     14  </package>

    页面(index.jsp)访问方式:
      1     <a href="${pageContext.request.contextPath}/addUser.action">添加用户</a>
      2      <a href="${pageContext.request.contextPath}/updateUser.action">修改用户</a>
      3      <a href="${pageContext.request.contextPath}/deleteUser.action">删除用户</a>
      4      <a href="${pageContext.request.contextPath}/findUser.action">查询用户</a>

    2.单一通配符

      1 <package name="user" extends="struts-default">
      2      <action name="*" class="huguangqinj.com.cnblogs.test.UserAction" method="{1}">
      3          <result name="success">/success.jsp</result>
      4      </action>
      5  </package>

    注:页面访问方式和Action类中的方法不变

    3.多通配符

      1 <package name="user" extends="struts-default">
      2     <action name="*_*" class="huguangqinj.com.cnblogs.test.{2}Action" method="{1}{2}">
      3          <result name="success">/success.jsp</result>
      4      </action>
      5  </package>

    页面访问方式(有变动):
     

      1    <a href="${pageContext.request.contextPath}/add_User.action">添加用户</a>
      2      <a href="${pageContext.request.contextPath}/update_User.action">修改用户</a>
      3      <a href="${pageContext.request.contextPath}/delete_User.action">删除用户</a>
      4      <a href="${pageContext.request.contextPath}/find_User.action">查询用户</a>

    Action类中的方法不变。

    4.动态调用

      1 <!-- 开启动态方法调用 -->
      2 <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
      3 <package name="user" extends="struts-default">
      4      <action name="user" class="huguangqinj.com.cnblogs.test.UserAction" >
      5          <result name="success">/success.jsp</result>
      6      </action>
      7  </package>

    页面访问方式:

      1     <a href="${pageContext.request.contextPath}/user!addUser.action">添加用户</a>
      2      <a href="${pageContext.request.contextPath}/user!updateUser.action">修改用户</a>
      3      <a href="${pageContext.request.contextPath}/user!deleteUser.action">删除用户</a>
      4      <a href="${pageContext.request.contextPath}/user!findUser.action">查询用户</a>

    Action类中的方法不变。

  • 相关阅读:
    深入浅出JMS(二)--ActiveMQ简单介绍以及安装
    redis学习
    浏览器的渲染过程
    http请求
    常用正则表达式
    js继承的几种实现方式
    js中的浅拷贝和深拷贝
    webpack常用的plugin
    linux基本命令
    webpack压缩代码组件uglifyjs-webpack-plugin
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7439739.html
Copyright © 2011-2022 走看看