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。