配置action的时候可以使用通配符。用星号*来表示任意的字符。
<struts>
<constant name="struts.devMode" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<action name="*" class="cn.bamn.struts.HomeAction" method="{1}">
<result>
/{1}.jsp
</result>
</action>
</package>
<package name="admin" namespace="/admin" extends="struts-default">
<action name="*_*" class="cn.bamn.struts.{1}Action">
<result>
/admin/{1}/{2}.jsp
</result>
</action>
</package>
</struts>Code language: HTML, XML (xml)
每一个星号匹配到的内容。从左到右排序第一个就是用{1} 第二个用{2}
然后再后面的class method 以及result里面都可以使用。
然后我们修改两个action类
public class CategoryAction extends ActionSupport {
public String index(){
return SUCCESS;
}
public String add(){
return SUCCESS;
}
public String del(){
return SUCCESS;
}
}
public class HomeAction extends ActionSupport {
public String index(){
return "success";
}
}Code language: PHP (php)
然后把demo.jsp 改为index.jsp
但是当我们访问
http://p50:8080/Struct6Demo/admin/Category_add
报下面错误
Struts Problem Report
Struts has detected an unhandled exception:
Messages: 1. org/apache/jsp/admin/Category/add_jsp (wrong name: org/apache/jsp/admin/category/add_jsp)
2. java.lang.NoClassDefFoundError: org/apache/jsp/admin/Category/add_jsp (wrong name: org/apache/jsp/admin/category/add_jsp)
File: org/apache/jasper/servlet/JspServlet.java
Line number: 274
________________________________________
Stacktraces
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/jsp/admin/Category/add_jsp (wrong name: org/apache/jsp/admin/category/add_jsp)
org.apache.jasper.servlet.JspServlet.service(JspServletCode language: PHP (php)
我们发现再result里面的jsp文件 通配符只能用再文件名中 不能用在目录结果里面 因为中间隔了一个/
所以改为下面/admin/{1}_{2}.jsp
<package name="admin" namespace="/admin" extends="struts-default">
<action name="*_*" class="cn.bamn.struts.{1}Action" method="{2}">
<result>
/admin/{1}_{2}.jsp
</result>
</action>
</package>Code language: HTML, XML (xml)
当然如果需要jsp的目录路径也使用。我们需要给result标签页增加一个带通配符的name属性。
<package name="admin" namespace="/admin" extends="struts-default">
<action name="*_*" class="cn.bamn.struts.{1}Action" method="{2}">
<result name="{2}">
/admin/{1}/{2}.jsp
</result>
</action>
</package>Code language: HTML, XML (xml)
然后CategoryAction的各个action方法要调整。
public class CategoryAction extends ActionSupport {
public String index(){
return "index";
}
public String add(){
return "add";
}
public String del(){
return "del";
}
}Code language: PHP (php)
然后我们访问
http://p50:8080/Struct7Demo/admin/Category_index
分类管理
http://p50:8080/Struct7Demo/admin/Category_add
分类增加
http://p50:8080/Struct7Demo/admin/Category_del
分类删除
Previous: 07-指明Action类的执行方法