第一个Struts程序:

  在开发Struts程序之前,首先要导入额外的jar包,基本需求的是14个jar包,关于14个ja包是什么,有什么作用,此处不讲述。

  还要配置web.xml文件,注册Struts启动项,如下:

   <!--注册Struts启动项 -->
    <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>

  第一步创建界面,属于前端知识,不详述。

  第二步创建XXXAction类,注意创建的类所属的包,命名时末尾必须是XXX.....actions/action/struts/strut。在XXXAction类中,默认创建的一个执行方法是execute,方法名可以改,而且可以有不止一个执行方法,后面介绍,如果是方法名是execute,则该方法默认执行,不需要在struts.xml中注册。

   第二步注册XXXAction类,即创建struts.xml文件(名字不能改)并注册,在这个xml文件头中要加入

  <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

  这个文件约束,它规定了struts.xml文件中能用的标签,它同时也是xml文件的根。这个约束文件的说明在struts2-core-XXX.jar中的struts-XX.dtd文件中。

  第四步,在struts.xml文件定义要求结果跳转的视图(页面),和创建对应的视图。

  struts.xml文件基本配置如下:

<struts>
      <package name="demo" namespace="/test" extends="struts-default">
          <action name="login" class="com.tongji.actions.LoginAction">
                <result name="success">/welcome.jsp</result>
          </action>
      </package>
  </struts>

  依次为包命名空间(包含继承关系)、action注册、结果跳转视图

  第一步创建页面的时候,要注意表单的action要写成:action="test/login.action",注意后缀名。

  第二步XXXAction中方法中要返回结果,例如return "success";如果是success,它是系统默认的返回值,注册时可以不写。

Struts相关的6个配置文件:

  1. struts-default.xml(重要):

    Struts2默认发的核心配置文件,其中定义了11种返回类型、35中拦截器、及拦截器栈,定了默认应用的拦截器栈,及默认注册的XXXAction类(ActionSupport),如果

    <action name="login" class="com.tongji.actions.LoginAction">

    中不定义class,则默认运行的XXXAction类就是这个ActionSupport类。

    这个配置文件不能修改,只能做参考查询用,在struts2-core-XXX.jar中。

  2. default.properties(重要):

    定义了Struts2中常用的默认值,比如

      struts.action.extension=action,,

    定义了页面请求时的action="test/login.action",这个action后缀。

    其他常量用到时再讲述,注意修改常量也不是在这里修改,这里也只是作参考,修改默认值时参考。在struts2-core-XXX.jar中/org/apache/struts2的包下。

  3. struts-plugin.xml:

    Struts2与第三方插件的整合配置文件,在Struts框架lib目录中所有以-plugin-结束的jar包中。

  4. struts.properties:

    用于修改常量的值,因为常量在struts.xml文件中也可以进行修改,所以一般不使用该文件。该文件手工创建,在src目录下。

  5. web.xml:

    用于用于设置常量、拓展Struts2等,但一般不这样使用,因为常量在struts.xml文件中也可以进行修改,但常量修改优先级web.xml最高。

  6. struts.xml(最重要):

    具体后面讲述,讲一点:常量修改有效性优先级为struts.xml<struts.properties<web.xml,但一般都在struts.xml中修改。

    <constant name="struts.action.extension" value="asp"></constant>

核心配置文件(struts.xml):

不要忘了文件约束:

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

配置一(基本配置):

<struts>
    <constant name="struts.action.extension" value="do"></constant>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login" class="com.tongji.actions.LoginAction" method="doSome">
            <result>/welcome.jsp</result>
            <result name="tooSmall">/tooSmall.jsp</result>
            <result name="tooOld">/tooOld.jsp</result>
        </action>
        <action name="goRegister">
            <result name="success">/register.jsp</result>
        </action>
    </package>
</struts>

  constant修改default.properties中的常量;

  package包名(包含定位名称和继承关系);

  action定义响应的名称、对应的XXXAction类和响应方法(如果响应方法名称为execute,则为默认,可以不写method;

    如果响应方法只是为了返回success,例如页面跳转的情况,则可以不写对应类class,此时默认的XXXAction类为默认的ActionSupport类,

    这个类实现了返回success的execute响应方法,这个是在struts-default.xml中配置的)

  result定义结果跳转页面(如果响应方法返回的是success,则为默认,可以不写name)

配置二(转发和重定向):

  1. 页面之间的转发(type为返回类型,struts-default.xml配置的,dispatcher是默认的):

<struts>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login" class="com.tongji.actions.LoginAction">
            <result type="dispatcher">/welcome.jsp</result>
        </action>
    </package>
</struts>

  2. 页面之间的重定向:

<struts>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login" class="com.tongji.actions.LoginAction">
            <result type="redirect">
                <param name="location">/welcome.jsp</param>
                <param name="uname">${name}</param>
                <param name="uage">${age}</param>
            </result>
        </action>
    </package>
</struts>

  3. XXXAction之间的重定向:

<struts>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login" class="com.tongji.actions.LoginAction">
            <result type="redirectAction">
                <param name="actionName">other</param>
                <param name="uname">${name}</param>
                <param name="uage">${age}</param>
            </result>
        </action>
        <action name="other" class="com.tongji.actions.OtherAction">
            <result>/welcome.jsp</result>
        </action>
    </package>
</struts>

  4. XXXAction之间的转发:
<struts>
    <package name="demo" namespace="/test" extends="struts-default">
        <action name="login" class="com.tongji.actions.LoginAction">
            <result type="chain">other</result>
        </action>
        <action name="other" class="com.tongji.actions.OtherAction">
            <result>/welcome.jsp</result>
        </action>
    </package>
</struts>

  共同要注意的点:

  当前端需要引用这些XXXAction中的属性时,页面之间的重定向这种情况下是:${param.name};其他情况下都可以是:${name}或${requestScope.name}

配置三(全局视图):

  1. 定义包全局视图:

<struts>
    <package name="demo" namespace="/test" extends="struts-default">
        <global-results>
            <result>/welcome.jsp</result>
            <result name="fail">/fail.jsp</result>
        </global-results>
        
        <action name="some" class="com.tongji.actions.LoginAction" method="doSome" />
        <action name="second" class="com.tongji.actions.LoginAction" method="doSecond">
            <result name="old">/old.jsp</result>
        </action>
    </package>
</struts>

  2 定义应用全局视图(使用包继承实现,被继承的包可以定义为抽象包):

<struts>
    <package name="myBase" extends="struts-default" abstract="true">
        <global-results>
            <result>/welcome.jsp</result>
            <result name="fail">/fail.jsp</result>
        </global-results>
    </package>
    
    <package name="demo" namespace="/test" extends="myBase">
        <action name="some" class="com.tongji.actions.LoginAction" method="doSome" />
        <action name="second" class="com.tongji.actions.LoginAction" method="doSecond">
            <result name="old">/old.jsp</result>
        </action>
    </package>
</struts>

配置四(多配置文件):

<struts>
    <!--<include file="struts-base.xml"></include>
    <include file="struts-actions.xml"></include>  -->
    
    <include file="struts-*.xml"></include>
</struts>

  file不要定义成"*.xml",不合理。

最新文章

  1. iOS,多媒体,地图相关
  2. 使ViewFlipper中的WebView实现手势效果
  3. c++学习笔记1(c++简介)
  4. 优化函数式编程:向 PHP 移植 Clojure 函数
  5. Servlet+Tomcat制作出第一个运行在Tomcat上的Java应用程序
  6. iOS Runtime 实践(1)
  7. ubuntu 关闭开启防火墙
  8. java变量初始化
  9. python常用内建模块--base64
  10. weblogic10以下,许可证过期解决办法
  11. 用Qemu搭建x86_64学习环境
  12. Vector HashMap List 存取数据速度
  13. Android基础——Fragment与Activity交互
  14. 解决报错&quot;Your security system have blocked an application with expired or not yet valid certificate from running&quot;
  15. Toast.makeText 方法出错 java.lang.RuntimeException
  16. 51nod 1812 树的双直径 题解【树形DP】【贪心】
  17. (转)Scala的“=&gt;”符号简介
  18. 给python解释器本身添加注册表
  19. spring MVC中获取request和response:
  20. 怎样过滤跨站恶意脚本攻击(XSS)

热门文章

  1. 用CKEDITOR 做自助上传的解决方案2
  2. ListBox 如何改变某行的字体颜色
  3. Atomic 升级
  4. 【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
  5. Eclipse中安装Jdk和配置Python
  6. APK安装时的过滤方式:包名白名单、证书认证
  7. 浅谈Objective-C对象初始化的三类程序猿
  8. openstack私有云布署实践【12.1 网络Neutron-controller节点配置(科兴环境)】
  9. Linux下安装awstats日志统计分析
  10. ACdream 1028 Path