Struts2 需找Action

     写这个之前,在一个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”命名空间中找,而会去默认命名空间中找,如果默认命名空间中没有找到就会报错了。

    交流是很重要的,谢谢那些鄙视我的人。。。。。。

你可能感兴趣的:(apache,jsp,xml,struts)