zoukankan      html  css  js  c++  java
  • Struts2配置文件

    一、配置struts2的过滤器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>zjs_bos</display-name>
     
      <!-- 创建struts2的过滤器 -->
      <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>

      <!--同时拦截转发数据和请求数据-->

       <dispatcher>REQUEST</dispatcher>
       <dispatcher>FORWARD</dispatcher>
      </filter-mapping>
     
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    二、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>
        <!-- 开发者模式,在开发者模式中,

      如果jsp发送的请求数据, 在action中没有给提供相应的get和set方法,会报错java.lang.NoSuchFieldException -->

      <constant name="struts.devMode" value="fasle"></constant>

      <!-- 配置struts国际化参数,设置编码区默认的编码格式  -->
        <constant name="struts.i18n.encoding" value="UTF-8"></constant>

      <!-- 配置struts国际化参数,设置message.properties路径,文件后缀名可以省略不写 -->
        <constant name="struts.custom.i18n.resources" value="message"></constant>

      (备注,可以在action类中,通过this.getText("usernameOrPasswordError")来获取message.properties文件中usernameOrPasswordError对应的值)

     <!-- 配置package -->

      <!--

      name属性, 理论上可以为任意值, 但是不同的package不能有相同的name属性;

      extends属性, 为固定值struts-default;

      namespace属性, 名称空间, 域action的标签的name属性一起构成action的访问路径

      -->
        <package name="basicstruts2" extends="struts-default" namespace="/">

      <!-- 配置拦截器 -->
            <interceptors>
                <interceptor name="bosLoginInterceptor" class="cn.rodge.bos.web.interceptoer.BOSLoginInterceptor">
                    <param name="excludeMethods">login</param>
                </interceptor>
                
                <!-- 声明拦截器栈 -->
                <interceptor-stack name="bos">

          <!--自定义拦截器后, 默认的拦截器就不会执行了, 所以需要手动将默认拦截器栈添加上来-->
                    <interceptor-ref name="bosLoginInterceptor"></interceptor-ref>
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            <!-- 将bos定义为默认拦截器栈 -->

      <default-interceptor-ref name="bos"></default-interceptor-ref>

        <!--声明全局结果变量,注意全局结果变量的声明是有顺序的,不能再拦截器前面声明,不然会报错-->
            <global-results>
                <result name="login">/login.jsp</result>
            </global-results>


            <!-- 配置通过action访问jsp的路径
                class不配置的话,默认访问actionsupport(在struts的默认配置文件中有配置)
                method不配置的话,默认访问execute方法
             -->
            <action name="page_*_*">
                <!--   

          result标签中name不配置的话,默认访问SUCCESS对应的

          type属性:dispatcher请求转发(默认)

               redirect重定向

               redirectAction重定向到action中

         -->
                <result type="dispatcher">/WEB-INF/pages/{1}/{2}.jsp</result>
            </action>
            
            <!-- 配置UserAction -->
            <action name="user_*" class="userAction" method="{1}">
                <result name="home">/WEB-INF/pages/common/index.jsp</result>
                <result name="login">/login.jsp</result>
            </action>
        </package>
    </struts>

    三、struts2中Action类的编写域访问

    3.2Action类创建的三种方式

    3.1.1 直接编写一个java类,命名为***Action, 当然命名没有规定

      创建一个类,不继承任何类,也不实现任何借口,在struts.xml中配置该Java类

      public class UserAction {

        ......

      }

    3.1.2 实现Action接口

      可以实现Action接口, 在Action接口中有一些常量,如SUCCESS, NONE等可供用户使用, 在配置文件中result没有指定name时,默认是success

      public class UserAction implements Action {

        ......

      }

    3.1.3继承ActionSupport类(一般推荐使用该方法)

      而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该 Action时配置input属性。 另外,Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息. 这样在自定义标签时可以定义一个变量为new actionsupport对象实现国际化。

      ActionSupport类的作用: 
        struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。

      public class UserAction extends ActionSupport {

        .....

      }

    3.2Action类中方法访问的三种方式

    3.2.1通过在Action标签中配置method属性来实现

    缺点: 每写一个方法都需要配置一个action标签, 当方法较多时, 配置比较繁琐

      <action name="userAdd" class="cn.rodge.action.UserAction" method="add">
                <result name="list">/jsp/common/userList.jsp</result>
            </action>

    3.2.2使用通配符*方法进行配置(常用)

    在action标签的name属性中, 使用*代替具体的方法名, 在method属性同中国{1}、{2}、{3}。。。来获取name标签中第一个、第二个、第三个。。。*号代表的值

      <action name="user_*" class="userAction" method="{1}">
               <result name="list">/jsp/common/userList.jsp</result>
            </action>

    访问路径写法:http://localhost:8080/OA_pro/user_add.action

    3.2.3使用动态访问的方式

    1> 开启常量

     <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    2> 创建action, 创建多个方法

     <package name="demo4" extends="struts-default" namespace="/">
            <action name="user" class="com.rodge.struts2.demo.UserAction"></action>
        </package>

    3> 配置action, 在action标签中配置name和class属性

    4> 访问方式

    http://localhost:8080/OA_pro/user!add.action

    Action类与Servlet的区别

      1.Action是多实例的, 每次访问都会创建一个新的Action对象, 当返回结果调用return时action被销毁; 而Servlet是单实例的, 默认只在第一次访问时创建

      2.Servlet中, 成员变量存在线程安全的问题

  • 相关阅读:
    jQuery下拉框操作系列$("option:selected",this) &&(锋利的jQuery)
    Jquery全选系列操作(锋利的jQuery)
    ASP.NET MVC 简单事务添加
    LINQ语法类似于SQL的语法
    C#(简单递归)和实现IComparable接口
    Jquery使用Id获取焦点和失去焦点
    解决使用C#打开第三方应用后进程关联问题
    使用 NSIS 制作安装包
    C# 窗口程序闪退
    C++ std::string 不可初始化为NULL
  • 原文地址:https://www.cnblogs.com/rodge-run/p/6418092.html
Copyright © 2011-2022 走看看