struts2 路径问题—method问题—通配符
首先说说struts2 的路径问题
struts2中的路径是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath (最佳方法)
在jsp页面中指定basePath:
<%String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<head>
<base href="<%=basePath%>" />
</head>
通过上述配置,则后面jsp中的各种跳转直接<a href="index.jsp">index.jsp</a>就可以实现
第二:method问题
之前在struts.xml中配置时一直使用的是 <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">这样的精确配置,可后面发现这样当面临多个方法时就比较麻烦。解决方案就是使用动态方法调用即DMI(Dynamic Method Invocation)。
使用DMI的动态方法调用则在struts.xml文件中配置相对简单
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
在jsp页面中<a href="<%=basePath %>user/user!add">添加用户</a>
第三:通配符问题
使用通配符后得到的最简配置为
<package name="actions" extends="struts-default" namespace="/actions">
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
</package>
在jsp页面中<a href="<%=basePath %>actions/Teacher_add">添加老师</a> 这样的话{1}_{2}就代表 Teacher_add
也就是说一个StudentAction.java中有一个方法为add();
同时有一个页面叫做Teacher_add_success.jsp