struts.xml:
<struts>
<package name="HelloWorld" extends="struts-default">
<action name="product-input">
<result>/WEB-INF/pages/product-input.jsp</result>
</action>
<action name="product-detail" class="com.struts2.Product" method="save">
<result name="detail">/WEB-INF/pages/product-detail.jsp</result>
</action>
</package>
</struts>
package的namespace属性默认是"/"
action有一个默认的class属性值和一个默认的method属性值
result的name属性值默认是success,type属性值默认是dispatcher
WEB-INF下的资源服务器内部转发可以访问,直接通过URL访问不到
action VS Action
action:代表一个struts2请求。
Action类:能够处理struts2请求的类。
struts2会为每一个请求创建一个Action实例,即是线程安全的。
在Action中访问WEB资源:
有两种方式:
1.和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法。
> 使用ActionContext
> 实现XxxAware接口(若一个Action类中有多个方法,则建议使用该方法)
2.和Servlet API耦合的方式:可以访问更多的Servlet API对象,且可以调用其原生的方法。
> 使用ServletActionContext
> 实现ServletXxxAware接口
struts2常量:
<constant name="struts.action.extention" value="action,do"></constant>
ActionSupport:
ActionSupport类是默认的Action类,若某个action节点没有配置class属性,而ActionSupport即为待执行的Action类,而
execute方法即为要执行的action方法。
result:
常用的有四种type:dispatcher(默认)、redirect、chain、redirectAction
通配符映射匹配:*、{0}、{1}
动态方法调用: struts.enable.DynamicMethodInvocation = false
值栈:
1.可以从ActionContext中获取值栈对象
2.值栈分为两个逻辑部分
> Map栈:实际上是OgnlContext类型,是个Map,也是ActionContext的一个引用。可以从中获得requestMap,sessionMap,applicationMap,
> 对象栈:实际上是CompoundRoot类型,是一个使用ArrayList定义的栈。
struts2利用s:property标签和OGNL表达式来读取值栈中的属性值
1.值栈中的属性值:
> 对象栈:对象栈中某一个对象的属性值
> Map栈: request,session,application的一个属性值或一个请求参数的值
struts2自动把Action对象放入值栈中
放入的时间点为;struts2终将调用Action类的action方法之前
struts2通用标签:
<s:property>:
<s:url>:
<s:set>:向page、request、session、application域对象中加入一个属性值。
<s:push>:把一个对象在标签开始后压入到值栈中,标签结束时弹出值栈。
<s:if>、<s:elseif>、<s:else>
<s:iterator>、<s:sort>、<s:a>、<s:date>
struts2表单标签:
struts2表单标签能进行回显:利用了值栈
ModelDriven接口、paramsPrepareParams拦截器
关于PrepareInterceptor拦截器(Preparable接口)
Preparable接口通常情况下要跟ModelDriven一起用,prepare方法的主要作用:为getModel方法准备model的。
若Action实现了Preparable接口,则Struts2尝试执行prepare[ActionMethodName]方法,若prepare[ActionMethodName]不存在,
则尝试执行prepareDo[ActionMethodName]方法。若都不存在,则都不执行。
若PrepareInterceptor的alwaysInvokePrepare属性为false,则Struts2将不会调用实现了Preparable接口的Action的prepare方法。
struts2拦截器是可插拔的,拦截器是AOP(面向切面编程)的一种实现。
<struts>
<package name="HelloWorld" extends="struts-default">
<action name="product-input">
<result>/WEB-INF/pages/product-input.jsp</result>
</action>
<action name="product-detail" class="com.struts2.Product" method="save">
<result name="detail">/WEB-INF/pages/product-detail.jsp</result>
</action>
</package>
</struts>
package的namespace属性默认是"/"
action有一个默认的class属性值和一个默认的method属性值
result的name属性值默认是success,type属性值默认是dispatcher
WEB-INF下的资源服务器内部转发可以访问,直接通过URL访问不到
action VS Action
action:代表一个struts2请求。
Action类:能够处理struts2请求的类。
struts2会为每一个请求创建一个Action实例,即是线程安全的。
在Action中访问WEB资源:
有两种方式:
1.和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法。
> 使用ActionContext
> 实现XxxAware接口(若一个Action类中有多个方法,则建议使用该方法)
2.和Servlet API耦合的方式:可以访问更多的Servlet API对象,且可以调用其原生的方法。
> 使用ServletActionContext
> 实现ServletXxxAware接口
struts2常量:
<constant name="struts.action.extention" value="action,do"></constant>
ActionSupport:
ActionSupport类是默认的Action类,若某个action节点没有配置class属性,而ActionSupport即为待执行的Action类,而
execute方法即为要执行的action方法。
result:
常用的有四种type:dispatcher(默认)、redirect、chain、redirectAction
通配符映射匹配:*、{0}、{1}
动态方法调用: struts.enable.DynamicMethodInvocation = false
值栈:
1.可以从ActionContext中获取值栈对象
2.值栈分为两个逻辑部分
> Map栈:实际上是OgnlContext类型,是个Map,也是ActionContext的一个引用。可以从中获得requestMap,sessionMap,applicationMap,
> 对象栈:实际上是CompoundRoot类型,是一个使用ArrayList定义的栈。
struts2利用s:property标签和OGNL表达式来读取值栈中的属性值
1.值栈中的属性值:
> 对象栈:对象栈中某一个对象的属性值
> Map栈: request,session,application的一个属性值或一个请求参数的值
struts2自动把Action对象放入值栈中
放入的时间点为;struts2终将调用Action类的action方法之前
struts2通用标签:
<s:property>:
<s:url>:
<s:set>:向page、request、session、application域对象中加入一个属性值。
<s:push>:把一个对象在标签开始后压入到值栈中,标签结束时弹出值栈。
<s:if>、<s:elseif>、<s:else>
<s:iterator>、<s:sort>、<s:a>、<s:date>
struts2表单标签:
struts2表单标签能进行回显:利用了值栈
ModelDriven接口、paramsPrepareParams拦截器
关于PrepareInterceptor拦截器(Preparable接口)
Preparable接口通常情况下要跟ModelDriven一起用,prepare方法的主要作用:为getModel方法准备model的。
若Action实现了Preparable接口,则Struts2尝试执行prepare[ActionMethodName]方法,若prepare[ActionMethodName]不存在,
则尝试执行prepareDo[ActionMethodName]方法。若都不存在,则都不执行。
若PrepareInterceptor的alwaysInvokePrepare属性为false,则Struts2将不会调用实现了Preparable接口的Action的prepare方法。
struts2拦截器是可插拔的,拦截器是AOP(面向切面编程)的一种实现。