日期:2014-05-19  浏览次数:20638 次

struts中关于struts.xml的配置问题
在这个项目中,web.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <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>
</web-app>
关于struts.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.0.dtd">

<struts>
<constant name="struts.devMode" value="true"/>
  <package name="test" extends="struts-default" namespace="/">
  <action name="hello" >
  <result name="success">/Hello.jsp</result>
  </action>
</package>

</struts>
如上面的配置所示,struts将拦截所有的请求,但是当我在url中输入地址如http:xxxx/ok/test/hello,的时候,执行结果仍然能跳转到Hello.jsp页面,对于这个结果我感到很困惑,调了好久还是没出来,正常的结果应该是输入http:xxx/hello,然后跳转到相应的页面,请大家帮帮忙~

------解决方案--------------------
跳到Hello.jsp才正确啊,因为你
<action name="hello" >
<result name="success">/Hello.jsp</result>
</action>
没有配置class="XXXX",即没有相应的action,但是即使你不写class="XXXX",默认也会调用一个方法,具体过程我也记不清了,但也是返回一个"success",说白了就相当于你直接调用了Hello.jsp。
应该写成
<action name="hello" class="XXX" >
<result name="success">/Hello.jsp</result>
</action>
这样输入http:xxx/hello就会到class对应的action类里运行业务逻辑
------解决方案--------------------
你如果在action后面配个class,http://xxx/a/b/e/hello.action就不会跳转了,或者你在namespace改成/test试下你就知道了,所有/为命名空间的都会转道这个action。
探讨

知道跳转到Hello.jsp才是正确的执行结果,但是在package中的为namespace="/",在url中输入http://xxx/hello.action才应该跳转到Hello.jsp页面,类似于http://xxx/a/b/e/hello.aciton应该不能跳转到正确的页面,可是实际的过程中只要url最后以hello.action结尾就能跳转到Hello.jsp页面,这个和actio……