JavaEE SSH框架调整(二) struts2 加载本地dtd文件,action配置

JavaEE SSH框架整合(二) struts2 加载本地dtd文件,action配置

1. 加载struts2的dtd文件,使struts.xml不用联网就能验证,并在eclipse中有提示

在src下创建struts.xml:

  <?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPE strutsPUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

解压struts2/lib下的core.jar。找到struts-2.3.dtd,解压出来。

eclipse > 首选项 > xml > xml catalog > user specified entries> add

 location 选择本地dtd文件;key type为选uri;uri为 http://struts.apache.org/dtds/struts-2.3.dtd



2. <struts></struts>中的元素为:

  <beans />  <constant /> <include /> <package /> <unknown-handler-stack />

  常用的常量constant

<!-- 开发模式为true时,即时生效,修改struts配置文件时不用重新部署 -->

<constantname="struts.devMode"value="true"/>

<!-- 动态方法调用 默认关闭的 听说不安全 调用时匹配规则:actionName!methodName.action  后缀.action可省略-->

<constantname="struts.enable.DynamicMethodInvocation"value="true"/>

 

package的使用:

<!-- 

在struts-default.xml中定义了一个package名为 struts-default 

extends继承自struts-default 

namespace:表示访问时的url地址前缀 即访问路径为:/appName/abc/xxx.action   .action可以省略

-->

<packagename="test1"extends="struts-default"namespace="/abc"> <action/></package>


3. package中的元素顺序为:

  result-types
  interceptors
  default-interceptor-ref
  default-action-ref
  default-class-ref
  global-results
  global-exception-mappings
  action*(所有action放到最后)

 不遵循该顺序会xml验证会报错


4. action配置

4.1 直接跳转

                <actionname="forward">

<result>/WEB-INF/test.jsp</result>

</action>

    访问地址:http://.../appName/forward.action     .action可以省略


4.2 根据action-class的返回值进行跳转

  <!-- class 是一个含有具体action方法的类,未指明method属性时,默认调用execute方法 -->

   <actionname="TestAction"class="com.stone.action.MyAction">

<!-- result 为方法的返回值 -->

<resultname="success">/WEB-INF/test.jsp</result>

   </action>

  访问地址:http://.../appName/TestAction      执行com.stone.action.MyAction的 execute方法,返回值为success则跳转到相应页面


4.3 指明action-class的method

    <!-- class 是一个含有具体action方法的类, 指定了方法 

Struts2在根据action元素的method属性查找方法时有两种途径:

           1.查找与method属性值完全一致的方法.    方法名为methodAction

2.查找doMethod()形式的方法     或方法名为doMethodAction

-->

   <actionname="methodAction"class="com.stone.action.MyAction" method="testMethod">

<resultname="test2">/WEB-INF/test2.jsp</result>

   </action>

   访问地址:http://.../appName/methodAction    执行com.stone.action.MyAction的testMethod方法,其返回值与result-name匹配


4.4 不指明action-class的method,根据访问的形式进行Action的动态方法调用

  需要先开启动态方法调用,即配置相关常量。

  <actionname="testDynamic"class="com.stone.action.EditAction">

<resultname="add">/WEB-INF/edit_add.jsp</result>

<resultname="delete">/WEB-INF/edit_delete.jsp</result>

  </action>

  访问地址:http://.../appName/testDynamic!add  执行com.stone.action.EditAction的add方法  

           若访问地址为  .../testDynamic!delete 则执行EditAction的delete方法。


4.5 通配符和占位符匹配