zoukankan      html  css  js  c++  java
  • 新建structs2 web应用及structs.xml常用基础配置

    建立一个struts2 web应用程序 

    1. 创建一个基本的web应用程序

    2. 添加struts2的jar文件到Class Path

    将struts2的最小jar包拷到WEB-INF/lib目录,包括以下文件:

     1 asm-x.x.jar
     2 asm-commons-x.x.jar
     3 asm-tree-x.x.jar
     4 commons-fileupload-X.X.X.jar
     5 commons-io-X.X.X.jar
     6 commons-lang3-X.X.X.jar
     7 commons-fileupload-X.X.X.jar
     8 freemarker-X.X.X.jar
     9 javassist-X.X.X.jar
    10 ognl-X.X.X.jar
    11 struts2-core-X.X.X.X.jar
    12 xwork-core-X.X.X.jar

    3. 为struts2添加Servlet Filter

    只有在WEB-INF/web.xml中添加了struts2的Servlet Filter和filter-mapping后stuts2才能运行。

    <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>

    4. 添加struts.xml

    如果不显示指定,运行时struts.xml的默认位置为Source Folder on Build Path(源文件默认src目录)的编译输出位置(默认WEB-INF/lib/classes)。如果要更改struts.xml的位置,需要在web.xml中更改struts2 Servlet Filter的初始化属性。

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param> 
            <param-name>config</param-name> 
            <!-- 指定struts.xml位置为WEB-INF/classes/struts/struts.xml,也就是对应源文件位置src/struts/struts.xml -->
            <param-value>struts/struts.xml</param-value>
        </init-param>
    </filter>

    struts.xml常用基本配置

    1. 常用的基本标签

    • <const name="....." value="..." />。 设置常量值
    • <include file="包含的其它struts配置文件.xml" />
    • <package name="package名称" extends="该package继承自" namespace="命名空间(请求地址action的父级)"></package>
    • <action name="action名(请求地址中action名)或者带通配符*" class="处理该请求的Action类的全限定名" method="处理该请求的Action类的中的方法名(如前前面有通配符,用{1}指代第1个通配符)"></action>
    • <global-results></global-results>。放在某个package里,里面存放全局的<result>,如果局部没有对应的<result>标签则查找全局<result>
    • <result name="Action类中方法处理的返回结果" type="">要转向的页面或action</result>。局部<result>标签可以作为<action>的子元素,也可以作为<global-results>的子元素
    • <interceptors></interceptors>。放在某个package里,里面存放所有的<interceptor>和<interceptor-stack>
    • <interceptor name="inteceptor名称" class="该inteceptor对应的类(继承MethodFilterInterceptor或AbstractInterceptor等)全限定名" />
    • <interceptor-stack name="拦截器栈的名称">。
    • <interceptor-ref name="被引用的interceptor名" />。存放一个interceptor的引用,如果该标签定义在<action></action>内,表示拦截指向该action的请求。继承自struct-default的package里的action都会调用名为defaultStack的interceptor,除非在<action>内定义有interceptor-ref,或者重新定义一个名为defaultStack的interceptor-stack,或者设置<default-interceptor-ref>。
      另外,<interceptor-ref>标签内可以设置参数:<param name="excludeMethods">不需要拦截的地址(可以用逗号隔开不同地址、带通配符*)</param>。
    • <default-interceptor-ref name="interceptor-stack名"/>。用来设置该package中的默认拦截器

    2. Action类的实现

    struts2中不要求Action类需要继承自哪些struts2的某些基类或实现struts2的某些接口,因此是低侵入性的。但一般为了设计的方便都会让它继承ActionSupport类并重载execute方法。struts2中Action的参数传递一般分为两种方式:属性驱动和模型驱动;Action中访问Servlet API是通过ActionContext实现的;一个Action通过不同方法处理多个请求时可以通过设置请求url="action!|方法名"或设置<action>标签的method属性实现。

    2.1 Action参数传递方式

    属性驱动:即是通过Action封闭请求的参数,Action中需要有传递的参数(以及返回结果)属性且都必须有getter和setter方法。如此一来,用户向Servlet发送的请求数据就需要是这种格式:name:....,pwd:....。而Action就要用name、pwd属性以及两者的getter和setter方法。

    模型驱动:也就是通过javaBean实现参数的传递。需要有一个传递的参数的类,另外Action必须实现ModelDriven<传递参数的类型>。假设我们要向Action传递一个User类对象(包含name和pwd),那么用户发送请求时,参数的格式就是usr.name:....,usr.pwd:....;同时Action里有一个usr属性和usr的getter和setter方法。

    2.3 ActionContext

    ActionContext里存储了当前Action的上下文信息。每一个由于用户请求而创建的线程都对应一个有效的ActionContext对象。静态方法ActionContext.getContext()返回当前线程的ActionContext。常用的方法有get/set, getParameters, get/setSession等。另外可以用Action.getContextMap获取ActionContext中存储的Map数据。

    2.4 一个Action处理多个请求

    如果要实现动态方法调用,需要在struts.xml中设置常量struts.enable.DynamicMethodInvocation为true

    第一种方式:struts.xml中action的配置如下,调用时只须直接userlogin即可。

    <action name="userlogin" class="com.nics.action.LoginAction" method="doNotNeedInterceptor_userLogin">

    第二种方式:struts.xml中的配置如下,调用时则需要userlogin!|loginFunction。其中loginFunction是LoginAction里的一个方法

    <action name="userlogin" class="com.nics.action.LoginAction">
  • 相关阅读:
    【Linux】Ubuntu 安装 openjdk8
    【算法】二分查找
    【算法】大规模排序
    【算法】小规模排序
    【算法】递归
    【数据结构】队列
    【Java】Windows 安装 JDK-13 并配置环境变量
    【数据库】关于 mysql 的执行顺序
    【数据结构】栈
    【数据结构】链表
  • 原文地址:https://www.cnblogs.com/yuantf/p/5444954.html
Copyright © 2011-2022 走看看