zoukankan      html  css  js  c++  java
  • 再读Struts2之二:环境搭建以及介绍

    配置:

    pom.xml中追加如下依赖。

    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.3.14</version>
    </dependency>

    web.xml中追加过滤器。

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    这里有点儿说明,大部分人已经知道:

    Since Struts 2.1.3, use {@link org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter} instead 
    or {@link org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter}
    and {@link org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter}

    struts.properties和struts.xml文件的处理

    1 struts.properties文件

    这个文件的修改是选择性的。因为在struts2-core.jar中有一个default.properties文件,已经对全局的struts2项目有一个控制。如果我们想要修改这种默认配置的话,就需要在源目录下创建一个struts.properties文件了。常被修改的也就下面几个。

    struts.i18n.reload = true——激活重新载入国际化文件的功能
    struts.devMode = true ——激活开发模式,以提供更全面的调试功能。
    struts.configuration.xml.reload = true——激活重新载入XML配置文件的功能(这是为Action准备的),当文件被修改以后,就不需要重新载入Servlet容器中的整个Web应用了。
    struts.url.http.port = 8080——配置服务器运行的端口号(所有生成的URL都会被正确创建)

    2 struts.xml

    这个文件中配置的基本上就是

    必须要在“struts.xml”中进行配置的信息只有全局结果异常处理自定义的拦截器堆栈

    尽管xml文档的头文件基本固定,但是仍然需要有所了解,如下:

    <?xml version="1.0" encoding="UTF-8" ?> // 版本以及编码信息
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd"> // dtd指定

    <struts>是struts.xml中的根标签,其它的标签都被它包含。

    1. <constant name="struts.devMode" value="true" />  // 以后专门介绍
    2. <bean />  // 以后专门介绍
    3. <package></package>
    4. <include />

    <include file="some-config.xml"/>

    它的file文件需要有根struts.xml一样的目录结果。也就是说也是一个struts配置文件。一般情况下,是按照系统的模块来划分的。

    其实有些文件是struts框架会给我们自动include(导入)的,这就是struts-default.xml和struts-plugin.xml两个文件。

    struts-default.xml提供的是Struts2的核心配置信息。它是struts-core.jar中存在的一个文件。

    struts-plugin.xml则描述了特定插件的配置信息。每个插件的JAR中都要有一个struts-plugin.xml文件,该文件会在系统启动时被装载。例如:struts2-dojo-plugin.jar中就有一个。

    <package … />

    标签是用来把那些需要共享的通用信息——例如拦截器堆栈或URL命名空间——的配置组织在一起的。它通常由Action的配置组成,但也可以包括任何类型的配置信息。

    这个标签的属性包括有:name, extends, namespace, abstract等。

    name,开发人员为这个Package指定的唯一的名字。

    extends,当前这个Package所继承的Package的名字,被继承的Package中所有的配置信息(包括Action的配置)都可以在新的命名空间下,新的Package里面被使用。

    namespace,如果两个不同的Package,其命名空间分别为“package1”和“package2”,那么URL差不多就是

      “/myWebApp/package1/my.action” 和“/myWebApp/package2/my.action”这样的形式。基本上就是用于区分具有相同action名称,但是功能不一样的情况。

    abstract,如果这个属性的值为“true”,那么这个Package就只是一个配置信息的组合,也就无法通过Package的名字来访问其中配置的Action。

    在大多数情况下,我们都应该继承“struts-default.xml”配置文件中的“strust-default”Package,但是如果你想要使用插件的话,那就另当别论了。你必须要参考插件的说明文档来确认所应当继承的父 Package。

    package里面会设置interceptors(拦截器链),result-types(结果类型)和action(最重要的)。

    interceptors里面会有:

    1

    <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>

    2 <interceptor-stack name="basicStack"> // 有时间补充
      <interceptor-ref name="workflow">
        <param name="excludeMethods">input,back,cancel,browse</param>
      </interceptor-ref>
      <interceptor-ref name="debugging"/></interceptor-stack>

    result-types //以后补充

    action 有几个属性,name, class, method, convertor

    1. name,example: test 对应着URL中的test.action。 其中.action是在struts.properties文件中配置的。可以修改:struts.action.extension。
    2. class,example: home.study.action.SomeAction。 那么就会去SomeAction类中调用其execute方法。 这个方法名称也可以设置。
    3. method, example: methodInstead。 那么就回去SomeAction类中调用其methodInstead方法。
    4. convertor, // 不了解,以后补充。

    对应着上面的说明,应该有如下的action代码了。

    <action name="test" class="home.study.action.SomeAction" method="execute">
        <result>view.jsp</result>
        <result name="error">error.jsp</result>
    </action>

    可以看到有多个result,但是有一个没有name,这个对应着返回值"success",指定的话就对应着name的值了。而中间的view.jsp或者error.jsp就是所谓的回显画面了。

    其实result还有另外一个属性,就是type这个就是所谓的结果类型。type的默认属性为“dispatcher”,大多数情况下都可以满足了。看struts-default.xml会有:

            <result-types>
                <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
                <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
                <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
                <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
                <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
                <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
                <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
                <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
                <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
                <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
            </result-types>

    所以说,我们的result的type可以有以上那么多选择。但是怎么用呢?// 以后专门讲。

    都代表什么呢?可以去这里看看。

    实际上我们还有另外四种方式:稍后验证。。。
    1. Action方法返回一个字符串——这个返回的字符串与“struts.xml”的一个action配置相匹配。例子中已经演示这一种方式。
    2. 使用Code behind插件 ——当使用这个插件的时候,它会将Action的名字和Action返回的结果字符串进行连接来得到视图模板。比如说,如果URL是“/adduser.action”,而Action返回了“success”,那么要渲染的页面就是“/adduser-success.jsp” 。更多信息请参见http://struts.apache.org/2.x/docs/codebehind-plugin.html。
    3. 使用 @Result注解—— action类可以用@Results 和@Result注解来标注多个不同的结果。Action所返回的字符串需要与所注解的结果之一相匹配。
    4. 方法返回一个Result类的实例——Action不必一定要返回一个字符串,它可以返回一个Result类的实例,该实例应当是已经配置好可使用的。

    Action要完成一些操作之后,才能返回结果。因此它们需要访问多种类型的对象——业务对象,数据访问对象或者其他资源。

    Struts2使用了名为依赖注入的方式来注入这些对象。Struts2使用setter注入来实现。

    Struts2推荐的依赖注入框架是Spring框架,并通过插件对它进行配置。

  • 相关阅读:
    automaticallyAdjustsScrollViewInsets
    Quartz 2D绘图
    手势识别
    多视图控制器跳转方法
    NSString和NSDate的转换
    遍历子视图中某个类型控件方法
    发布程序后的NSLog批处理
    searchDisplayController用法
    UIImagePickerController使用方法
    沙盒目录常用获取方式
  • 原文地址:https://www.cnblogs.com/voctrals/p/3032879.html
Copyright © 2011-2022 走看看