1、执行流程
2、namespace
3、action
4、JSP之间跳转路径问题
5、动态方法调用DMI
6、通配符
7、在action中用属性接收参数
8、在action中用Domain Model(域模型)接收参数
9、访问web元素——用容器或IoC取得Map类型的request、session和application
10、访问web元素——用容器或IoC取得HTTP真实类型的request、session和application
11、默认action
1、执行流程
当客户端在浏览器中访问URL地址
http://localhost:8080/_struts2_00_action/hello_action
URL地址的请求会通过HTTP协议发送给Tomcat
Tomcat收到请求后会找到相应的Web Application
_struts2_00_action
并且读相应的web.xml文档
被Struts2的监听器监听到
接下来通过namespace在struts.xml中查到相应的package
找到相应的action
转到相应的result
最后转到hello.jsp
Struts2可以使得客户端的请求和最后的展现页面分开。
2、namespace
namespace决定了action的访问路径,默认为"",可以接收所有路径的action访问,但是位列其他的namespace之后。
可以写为/,/xxx,/xxx/yyy,对应的action访问路径/action,/xxxaction,/xxx/yyy/action
最好是用模块命名。
3、action
访问action时,通过namespace的package找到对应action和对应的action类
通过action类execute()方法的返回值找到对应的result的name(result不指定name的话,默认为SUCCESS)
也可不调用默认的execute()方法,通过指定其他任意方法,建议使用动态方法调用DMI。
每次访问必定new一个新的action
4、JSP之间跳转路径问题:
当JSP页面访问别的页面时,它不会看JSP真正的路径在哪里,它只看服务器映射在地址栏的URL地址。
所以不推荐使用相对路径,建议JSP页面中所有链接全部使用绝对路径。
在JSP中使用request获取为佳。
5、动态方法调用DMI
调用xx下hello_action的fff()方法,只要此方法返回值是String类型
也可通过method参数指定固定的方法,但不推荐使用,更推荐使用通配符方法。
http://localhost:8080/_struts2_02_DMI/xx/hello_action!fff
6、通配符
* 和{ }的写法
分别访问链接
http://localhost:8080/_struts2_03_TongPeiFu/hello_add
http://localhost:8080/_struts2_03_TongPeiFu/hello_delete
在namespace中未找到相应的action,但有 * 匹配的action。
7、在action中用属性接收参数
用链接传递两个参数s和i
http://localhost:8080/_struts2_04_parameter_property/hello_action?s=s&i=9
在action类中定义两个同名属性,并设置set方法。Struts2将在调用action的方法前,自动调用set方法给两个属性赋值。
8、在action中用Domain Model(域模型)接收参数
http://localhost:8080/_struts2_05_parameter_DomainModel/hello_action?u.no=11&u.name=zb
9、访问web元素——用容器或IoC取得Map类型的request、session和application
IoC:
跳转到action类后 由Struts2注入赋值
容器:
10、访问web元素——用容器或IoC取得HTTP真实类型的request、session和application
容器:
IoC:略
11、默认action
当action不存在时,找到默认action。