1. mvc框架
2. 实例
- web.xml配置文件
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- java中的action方法,可以加成Action 或者 ActionSupport
action元素代表一个类,class为action的类的全名,可以写,也可以不写,如果不写class属性,则默认执行ActionSupport中的execute方法,该方法什么都没有做,仅仅返回了一个success字符串.
在action的构造器中输出一句话,在浏览器中多次请求,可以看到构造器执行了好几次,所以action是多例的。
1、 sturts2的配置文件中用了package的机制,这样可以分模块
name是唯一的名称,extends采用了继承的机制
2、 写的action与servlet容器完全松耦合了
3、 通配符映射解决:很容器就把一个url映射到一个action的方法中了
4、 Include保证了可以写多个配置文件
5、 结果集的封装
-
Result
代表一种结果集,Type 为结果集的类型,Name 属性的值和action中某一个方法的返回值一致,type属性不写,则默认和struts-default中的结果集中的default="true"的结果集保持一致,为dispatcher,转发,result标签中的内容就是要转发到的页面,在struts-default.xml文件中.
- struts.xml的配置文件
<!--
package:作用:对应用中的动作进行模块化管理。就如同把类放在不同的包中是一样的。
属性:
name:包名。要保持唯一
extends:struts2中配置文件的信息可以继承的。开发时,自己的包一般情况下都要继承“struts-default”
abstract:抽象包。如同抽象类。没有任何action资源的包可以定义为抽象的。
(有点难度)namespace:名称空间。默认值是""
http://域名/应用名称+namespace+动作名称.action
-->
<package name="p1" extends="struts-default" namespace="/wuhyoung">
<!--
action:定义一个动作
name:动作的名称。同一包中的name必须唯一
class:动作类的全名。可选的.默认值是:com.opensymphony.xwork2.ActionSupport(在struts-default.xml中有配置)
method:动作类中的动作方法。可选的.默认值是:execute()的方法
-->
<action name="hello" class="com.wuhyoung.HelloAction" method="hello">
<result name="success" type="dispatcher">/success.jsp</result>
</action>
<!--
<action name="hello">
result:结果视图。转向的页面
name:字符串。对应的是动作方法的返回值。
type:转向的类型。默认dispatcher,转发
<result name="success" type="dispatcher">/success.jsp</result>
</action>
-->
</package>
获取值栈的三种方式
ValueStack valueStack = ServletActionContext.getValueStack(ServletActionContext.getRequest());
ValueStack valueStack2 = ActionContext.getContext().getValueStack();
ValueStack valueStack3 = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");
获取request的两种方式
implements ServletRequestAware,ServletResponseAware
HttpServletRequest request = ServletActionContext.getRequest();