文章目录
一、通配符映射
1、概念; 有很多相似的result匹配,一个一个的写,比较浪费时间,就产生了通配符映射。
2、实现
2.1、Action类
public Class UserAction{
public String UserAction-save(){
System.out.println("save");
return "success";
}
public String UserAction-update(){
System.out.println("update");
return "success";
}
public String UserAction-delete(){
System.out.println("delete");
return "success";
}
}
2.2、struts2.xml
- 精确匹配>通配符匹配
- 通配符匹配,若多个可以匹配,按照先后顺序匹配。(在xml中的先后顺序)。
<struts2>
<package name="随便起一个包名" extend="struts-defult" namespace="/" >
<!-- 普通版本 -->
<!-- action的name就是jsp中要提交的action -->
<action name="可以随便起,但要见名知意" class="路径.UserAction" method="要调用的action类里面的方法">
<result name="Action类函数的返回值">要转发的地方
</result>
</action>
<!-- 通配符版本 -->
<action name="UserAction-*" class="路径.UserAction" method="{1}">
<!-- {1} 是与第一个子串匹配,-->
<result name="Action类函数的返回值">要转发的地方
</result>
</action>
</package>
</struts2>
2.3、jsp中
<!-- 这里方便起见,采用超链接方式,平常使用表单方式-->
<a herf="UserAction-save">User-save</a>
<a herf="UserAction-update">User-update</a>
<a herf="UserAction-delete">User-delete</a>
二、动态方法调用(了解即可)
1、概念:
通过url动态调用Action中的方法
默认情况下是禁用的,需要手动打开
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
2、实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqoFH0di-1668229982274)(D:\Photo\typora-user-images\image-20221112091852888.png)]
直接在网址中输入!方法
三、OGNL
1、前景导入
<!-- 有个类叫Product ${这里面都是这个类的数据成员}-->
ProductId: ${productId}
ProductName: ${productName}
ProductPrice: ${productPrice}
以上代码看起来就像没有对象,就能调用对象的数据成员,这其实是struts2已经对获取属性进行了封装。从栈里面查找这些属性值。
2、利用OGNL读取栈中的属性值
- 对于对象栈:读取栈中某一个对象的属性值
- Map栈: request,session, application中的一个属性值或者一个请求参数值
2.1、读取对象栈的属性
object.propertyName <!-- 最常使用-->
object{'propertyName'}
object{"propertyName"}
<!--第2种方法-->
<!-- 从栈里面直接调用/检索
默认情况下Action对象会默认放到栈顶
-->
<s:property value="[0].propertyName"/>
==
<s:property value="propertyName"/>
<!--如果读取栈顶,下标可以省略不写-->
2.2、读取Map栈的属性
<!--
利用XxxAware接口实现
那个Modol类继承XxxAware类
模板
private Map<String,Object> name
-->
<!-- jsp页面-->
<s:property value="#session.product.propertyName"/>
3、读取任何一个Java类的静态字段和静态方法
<!--
静态方法和属性默认是不能调用的,需要手动打开
-->
<constant name="struts.ognl.allowStaticMethodAccess"
value="true"></constant>
<!-- jsp页面-->
<s:property value="@类包名+类名+@方法名">
<!--这样就直接在页面上显示-->
4、调用值栈里面的方法
<s:property value="modul类里面的set方法">
5、访问数组/list类型的属性
<%
String [] names=new String[]{"aa","bb","cc"};
request.setAttribute("name",names);
%>
length<s:property value="#modul类里面request的name.names.length"/>
四、声明式异常处理
1、struts.xml
<action name="" class="" method="">
<exception-mapping result="input" exception="报错对应的类名"></exception-mapping>
<result name="input"></result>
<!--若在类方法中出现异常,这个异常映射就会接收到,然后转发到对应的result里面,再由result转发-->
</action>
2、jsp
<!--想查看异常信息-->
${exception}
${exception.message}
五、标签
1、property标签
用来输出值栈属性的值
需要导入标签
<%@ taglib prefix="s" url="/struts-tags"%>
语法:
<s:property value="属性名"/>
<!-- 直接返回一个值-->
2、url标签
1、概念:
创建一个URL字符串
<s:url value="/address" var="url">
<s:param name="id" value="000"></s:param>
</s:url>
输出结果 /web/address?id=000
参考文献
B站尚硅谷Struts2视频