struts 1.3.2 module配置以及forward中相对路径的使用

定义了module之后,我们的xml中的任何forward配置(global-forwards, action中的forward)中的path属性,(只要不设置contextRelative=true,默认为false),前面都会套上module的prefix(要求这个path的值以admin /打头)。比如我们在admin module中有一个forward,他的path是/jsp/index.jsp,那么,到了URL中就变成了http://<domain name>/<our webapp context name>/jsp/index.jsp了。其实这个行为就是在controller的配置中,forwardPattern的行为(forwardPattern的默认值是$M$P,除非我们手动修改这个配置,否则就是上面的那套规则)。

forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道,URL不改变;redirect则是服务器收到请求后发送一个状态头给客 户,客户将再请求一次,这里多了两次网络通信的来往,URL改变。
forward 会将 request state , bean 等等信息带往下一个 jsp
redirect 是送到 client 端后再一次 request , 所以资料不被保留.
使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料示在浏览器地址栏中的URL一般不一样,而且后者以redirect时的参数(地址)为准。


ActionServlet配置
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<-- 配置系统根路径/ -->
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/config/struts/strutsConfig.xml</param-value>
		</init-param>
<-- 配置管理员后台模块(Module)的/admin路径 -->
		<init-param>
			<param-name>config/admin</param-name>
			<param-value>/WEB-INF/config/struts/strutsConfig-admin.xml</param-value>
		</init-param>
<!-- 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;正数的值越小,启动该servlet的优先级越高。 -->
		<load-on-startup>2</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

strutsConfig.xml
	<global-forwards>
		<forward name="index" path="index.do" redirect="true" />
		<!-- 画面访问loginAdmin forward的时候,那时的URL路径是带/admin的,/代表当前路径 /../返回不带/admin的URL路径,即根目录路径(对应WebContent目录) -->
		<forward name="loginAdmin" path="/../WEB-INF/pages/jsp/admin/login.jsp" />
	</global-forwards>

	<action-mappings>
		<action path="/*" attribute="af" name="fullLazyForm" type="com.comp.proj.web.struts.{1}Action" parameter="method"
			scope="request" validate="false">
<!-- 系统根路径/URL对应的Action -->
			<forward name="list" path="/WEB-INF/pages/jsp/{1}/list.jsp" />
		</action>
	</action-mappings>

strutsConfig-manager.xml
	<action-mappings>
		<action path="/manager/*" attribute="af" name="fullLazyForm" type="com.comp.proj.web.struts.manager.{1}Action"
			parameter="method" scope="request" validate="false">
<!-- 配置管理员后台的/adminURL路径对应的Action,因此要返回到WEB-INFO目录,必须回退一层。 -->
			<forward name="list" path="/../WEB-INF/pages/jsp/admin/{1}/list.jsp" />
			<forward name="success" path="/manager/{1}.do?method=list" redirect="true" />
		</action>
	</action-mappings>


既然有了Module,就存在module之间相互切换访问的问题了
<action-mappings>
    <action path="/toModule"
    type="org.apache.struts.actions.SwitchAction"/>
    ...
</action-mappings>
http://localhost:8080/toModule.do?prefix=/admin&page=/index.do

在使用forward的时候配置contextRelative=true
<global-forwards>
    <forward name="toModuleB"
        contextRelative="true"
        path="/moduleB/index.do"
        redirect="true"/>
   ...
</global-forwards>

<html:link module="/moduleB" path="/index.do"/>

猜你喜欢

转载自desert3.iteye.com/blog/1168345
今日推荐