(5)通配符
<struts>
<constant name="struts.devMode" value="true" /><!-- 开启使用开发模式,详细错误提示,否则得重新部署,才能将修改改动-->
<package name="user" namespace="/actions" extends="struts-default">
<!-- 若地址栏输入http://localhost:8080/struct_ActionWildcard/actions/useradd
在struct中并没有useradd,所以再从带有通配符中找,则此时第一个*,就代表add
(系统默认给*编号,{1}则代表第一个* 即add)
从上面可以看出可以动态输入不同的action。例如:http://localhost:8080/struct_ActionWildcard/actions/userdel!del
-->
<!-- 在之前的!(struct_actionMethod)中也可以简化操作,但是result里面的内容一定是不同的, <action name="add">/user_add_success.jsp
所以通配符能够最大程度简化操作。
-->
<action name="user_add"></action><!-- 则会执行这个,而不执行带有通配符的 -->
<!-- 若action中没有,但是在用URL使用user_add两者都能匹配,此时看哪个写在前面,则匹配哪个 -->
<!-- 若使用通配符,则必须遵守"约定优于配置" 的原则 -->
<action name="user*" class="com.front.action.UserAction" method="{1}">
<result><!-- 等价于<result name="success"> 没写name,所以默认值为success> -->
/user_{1}_success.jsp
</result>
</action >
<!-- 通配符对于简单的CRUD的工程或者软件原型,只要含有Action的包名、action的类名、对应的方法名写有规律的应用,可以大大简化配置的工作 -->
<action name="*_*" class="com.front.action.{1}Action" method="{2}">
<result>
/{1}_{2}_success.jsp
</result>
</action >
<!-- 这里补充说明class:大多数情况,需要配置class属性的值,因为我们需要把自己,用来处理请求的Action类配置上去,,而不是使用默认的配置。
现在考虑一种情况,对于安全性比较高的web项目,往往把jsp放在web-inf下,这样可以防止外界直接使用URL来访问jsp页面,这时的jsp就一定在servlet或者Action的后继页面
才能访问到。因此,可以把之前不需要Action处理的页面,可以作为ActionSupport的后继页面,使用default-class-ref,可以减少配置。
-->
<action name="index" >
<result><!-- 等价于<result name="success"> 没写name,所以默认值为success> -->
/WEB-INF/first.jsp
</result>
</action >
</package>
</struts>
public class TeacherAction extends ActionSupport{
public String add(){
// TODO Auto-generated method stub
return SUCCESS;
}
public String del(){
// TODO Auto-generated method stub
return SUCCESS;
}
public String update(){
// TODO Auto-generated method stub
return SUCCESS;
}
public String look(){
// TODO Auto-generated method stub
return SUCCESS;
}
}