一、基本流程:
1、 核心控制器FilterDIspatcher
2、 业务逻辑控制器
3、 模型组件(没有提供实现)
4、 视图组件
支持jsp,freemarker,velocity等,通过result元素的type属性指定视图资源类型,默认是jsp类型
二、基本配置:
1、Web.xml配置
2、struts.xml文件
可将struts.xml文件分解:
因为struts配置文件默认继承了struts-default包空间,Strut2的核心包下struts-default.xml文件默认加载,其内部定义了result结果类型、系列拦截器等。
1) Bena 配置:
Struts2以可配置的方式管理核心组件,组件的实现类部署在IoC容器中即可。Struts的bean通常有两个作用:
1、 创建bean实例,该实例作为struts的核心组件使用
2、 Bean的静态方法需要一个值注入。
对于struts2而言,一般不需要定义bean组件,也就不需要在struts.xml文件中配置bean
2) 常量配置struts.properties
Sturts2加载常量的顺序:
Struts-default.xml
Struts-plugin.xml
Struts.xml
Struts.properties
Web.xml
Struts.xml文件中通过<constant>来配置常量,对应的属性为name和value
3) 包配置
<package name = “” >
必须制定name属性,这个属性是引用该包的key
Extend属性,继承其他的包,可以继承其他包得Action、Interceptor等
Namespace:定义命名空间。(请求Action时加上命名空间)
Abstract:定义该包是否为抽象包。
4) 包含配置
<struts>
<include file=”struts-shop.xml” />
<include file=” struts-user.xml” />
</struts>
5) 拦截器配置
例如:
<interceptors>
<interceptor name=”” class=”” >
<interceptor-stack name= “”>
<interceptor-ref name= “’ />
</interceptor-stack>
</interceptors>
6) 访问servlet api
ActionContext
Get(Object) 模拟HttpServletRequest 对象的getAttribute(String)
getApplication() 返回Map对象,模拟SerletContext
getContext() 返回系统的ActionContext对象
getParameters() 返回Map对象,获取所有的请求参数
getSession()返回Map对象,模拟HttpSession对象
直接访问servlet api:
1、实现ServletContextAware
ServletRequestAware
ServletResponseAware
3、 ServletActionContext
getPageCotext();
getRequest();
getResponse();
getServletContext();
7) 配置Action
<package >
<action name= “” class=”” >
<result />
</action>
</package>
8) 动态方法调用
action=”ActionName!methodName.action”
targetForm.action = “Login!regist.action”会被Action的regist()方法处理
默认会被execute处理
9) 为<action>元素指定method属性
<action name=”login” class=”com.Login” method=”login” >
……
</action>
10)使用通配符
<action name=”*Login” class=”com.Login” method=”{1}”>
如果请求的url为loginLogin请求的就是Login的login方法
11)默认Action
配置一个默认的action
<default-action-ref name=”” />
3、struts.properties配置文件
4、配置结果
1)局部结果:<result>作为<action>子元素配置
<action …>
<result>
<param name="location"></param>
</result>
</action>
Param两个参数:
Location:逻辑视图对应的实际视图资源
Parse:是否使用OGNL表达式,默认为true
2)全局结果:
<global-results>
<result></result>
</global-results>
5)支持的结果类型
struts2的结果类型实现了com.opensymphony.xwork2.Result接口
type支持的结果类型:
chain:用来处理Action链
chart:整合JFreeChart的结果类型
dispatcher:用来转向页面,通常处理JSP
freemaker:处理FreeMarker模板
httpheader:控制特殊HTTP行为的结果类型
jasper:用于JasperReports整合的结果类型
jsf:JSF整合的结果类型
redirect:重定向到一个URL
redirect-action:重定向到一个Action
stream:向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据
tiles:与Tiles整合的结果类型
velocity:处理Velocity模板
xslt:处理XML/XLST模板
plaintext:显示原始文件内容,例如文件源代码
dispatcher 结果类型为缺省的result类型,用于返回一个视图资源(如:jsp)
Xml代码 :
<result name="success">/main.jsp</result>
<result name="success">/main.jsp</result>
以上写法使用了两个默认,其完整的写法为:
<result name="success" type="dispatcher">
<param name="location">/maini.jsp</param>
</result>
location只能是页面,不能是另一个action(可用type="chain"解决)。
redirect 结果类型用于重定向到一个页面,另一个action或一个网址。
Xml代码:
<result name="success" type="redirect">aaa.jsp</result>
<result name="success" type="redirect">bbb.action</result>
<result name="success" type="redirect">www.baidu.com</result>
redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action
Xml代码:
<result name="err" type="redirect-action">
<param name="actionName">重定向的Action名</param>
<param name="namespace">重定向Action所在的名字空间</param>
</result>
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
chain 用于把相关的几个action连接起来,共同完成一个功能。
Xml代码:
<action name="step1" class="test.Step1Action">
<result name="success" type="chain">step2.action</result>
</action>
<action name="step2" class="test.Step2Action">
<result name="success">finish.jsp</result>
</action>
处于chain中的action属于同一个http请求,共享一个ActionContext
plaintext 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext">
<param name="location">具体的位置</param>
<param name="charSet">字符规范(如GBK)</param>
</result>
5、设置请求参数
<result type=”redirect”>edit.action?param=${属性.属性}</result>(${属性}对应Action里的属性)
6、属性驱动和模型驱动
属性驱动:使用属性作为贯彻MVC流程的信息携带者
模型驱动:使用单独的JAVA BEAN来贯彻整个MVC流程
模型驱动的实现必须实现ModelDriven接口
Public class LoginAction implement ModelDriven<UserBean>{
Private UserBean model = new UserBean();
Public String execute(){
}
Public UserBean getModel(){
Return model;
}
}
7、异常处理
1)局面异常映射
<exception-mapping >作为<action>子元素配置
2)全局异常映射
<exception-mapping >作为<global-exception-mappings>的子元素
<exception-mapping result="failer" exception="java.lang.Exception"></exception-mapping>
<result name="input">/admin/login.jsp</result>
<result name="success">/index.jsp</result>
<result name="failer">/admin/login.jsp</result>
输出异常信息:
<s:property value=”exception” />
<s:property value=”exceptionStack” />
struts2 基础(3)
最新推荐文章于 2024-04-05 20:41:44 发布