???? 写这个之前,在一个Java群里面跟一伙人吵的很凶,原因就是因为我问了一个访问Action不带后缀“.action”而找不到的问题,吵了很久,一群人鄙视了我很久,最后不了了之,之后测试了一下,确实是我错了,来说说我的理解。我是想遮掩访问action:http://localhost:8080/myproject/login,myproject是我的项目名,login是登陆action,这里我没带后缀,我的做法是这样配置:
<package name="root" namespace="/" extends="struts-default"> <action name="login" class="com.LoginAction"> <result>/login.jsp</result> </action> </package>
?按理说遮掩就可以了,但是不知道为什么,在我的项目中没带后缀,访问不到这个action,带了才能访问到,于是我就想了只写出"/login"会不会把它当成命名空间呢?也就是说到“/login”的命名空间中去,但是后面没什么action了,于是我就想了一招,这样配置:
<package name="login" namespace="/login" extends="struts-default"> <default-action-ref name="login" /> <action name="login" class="com.LoginAction"> <result>/login.jsp</result> </action> </package>
?这样如果是到了这个命名空间,也可以显示出来,这样做,鬼使神差地却能在我的那个项目中显示,显示是能显示,更他们炒后,我于是去测试了一下,建了一个测试工程,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.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <package name="root" namespace="/" extends="struts-default"> <action name="login" class="com.LoginAction"> <result>/login.jsp</result> </action> </package> <package name="login" namespace="/login" extends="struts-default"> <default-action-ref name="home" /> <action name="home" class="com.HomeAction"> <result>/home.jsp</result> </action> </package> <!-- Add packages here --> </struts>
??? 我配置了两个命名空间,一个根命名空间,一个名为“login”的命名空间,
测试:不要根命名空间,如果按照我上面说的会把它当成“login”命名空间,而执行的话,由于我配置了默认处理action是可以显示的,但是事实上却报了“404”错误,也就是说它只会去根命名空间或默认命名空间中找有没有名为login的action,也就是虽然你没写后缀,但是Struts 2解析的时候它会解析成login.action,而不会当成命名空间去找,虽然我不知道我项目中怎么把它当成命名空间处理了,但是按常理这是不可能的,我那个应该是碰巧而言。这就让我想起了,一句很重要的话“命名空间只有一个级别 ”,也即是说对于这样的url:
http://localhost:8080/myproject/manage/user/login,对于struts 2来说它是遮掩的
http://localhost:8080/myproject/manage/user/login.action,它会先去命名空间名为"manage/user"的包中找是否有名为login的action,如果没有找打不会去“manage”命名空间中找,而会去默认命名空间中找,如果默认命名空间中没有找到就会报错了。
??? 交流是很重要的,谢谢那些鄙视我的人。。。。。。