struts2入门(一)
来源:互联网 发布:知乎 期货合理杠杆 编辑:程序博客网 时间:2024/05/16 05:37
1、Struts2概要
Struts2是mvc框架,其他mvc还有spring mvc,JSF等等,struts2配置文件中的标签有顺序
工作流程:
1.客户端提交一个HttpServletRequest请求(action或JSP页面)。
2.请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等。
3.FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器。
4.请求被发送到FilterDispatcher后,FilterDispatcher询问ActionMapper时候需要调用某个action来处理这个Request。
5.如果ActionMapper决定需要调用某个action,FilterDispatcher则把请求交给ActionProxy进行处理。
6.ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。
7.ActionProxy创建一个ActionInvocation实例,通过代理模式调用Action。
8.action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Intercepter拦截器。
9.最后ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。
2、使用Session和servlet api
得到Session:
使用ActionContext的getContext()方法的getSession()返回一个Map对象,这是为了使Action与Servlet api 分离的设计思想,底层的拦截器负责该Session和HttpSession之间的转换
ActionContext act = ActionContext.getContext();
Map<String,Object> map = act.getSession();
map.put("name", "aa");
servlet API:
ActionContext类访问servlet api(这种方法并不能真正的获取servlet api实例)
ACtionContext中常用的几个方法:
Object get(Object key):获取当前ActionContext里key对应的value,该方法可获取HttpServletRequest的属性
put(String key,Object value):将key-value对存入当前ActionContext中。该方法可用于向HttpServletRequest里存入属性
Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例
void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名、属性值。
static ActionContext getContext():静态方法,获取系统的ActionContext实例
Map getParameters():获取所有请求参数,类似于调用HttpServletRequest对象的getParameterMap方法
Map getSession():返回一个Map对象,该对象模拟了HttpSession实例
void setSession(Map session):直接传入一个Map实例,将该实例里的key-value对转换成session的属性名、属性值
Action直接访问Servlet API
ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例
ServletRequestAware:可以直接访问HttpServletRequest实例
ServletResponseAware:可以直接访问HttpServletResponse实例
也可以直接使用ServletActionContext类,静态方法
PageContext getPageContext():取得web应用的PageContext对象
HttpServletRequest getRequest():取得web应用的HttpServletRequest对象
HttpServletResponse getResponse():取得web应用的HttpServletResponse对象
ServletContext getServletContext():取得web应用的ServletContext对象
3、常量配置
配置方式有三种:
1、在web.xml的filter中配置
使用init-param配置
2、在struts2.xml中配置
<constant name="struts.devMode" value="true" />
3、在struts.properties中配置
3.1常用的常量介绍
default.properties文件中定义了很多常量,下面就说说通常使用到的几个。
struts.i18n.encoding 指定默认编码集
struts.action.extension struts2处理的默认后缀,如果需要定义多个后缀,则用逗号“,"隔开
struts.serve.static.browserCache 设置浏览器是否缓存静态内容,默认为true(生产环境下使用),开发阶段最好关闭
struts.configuration.xml.reload 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下),开发阶段最好打开。
struts.devMode 是否为开发模式,默认为false,(生产环境下),开发阶段最好打开,以便打印出更详细的信息
struts.ui.theme 视图主题,一般用simple
struts.objectFactory 于spring集成时,指定由spring负责action对象的创建
struts.enable.DynamicMethodInvocation 是否支持动态方法调用,action!methodname,默认为true
struts.multipart.maxSize 上传文件的大小
<constant name="struts.action.extension" value=""/> 不需要后缀
4、模块化开发
每个开发者使用一个独立的配置文件,在总的配置文件中使用include引入
5、结果配置 result
Result的name,配置逻辑视图名,默认是success
result的type属性:
chain:跳转到另一个action,还是同一个请求,将请求再转发至另一个Action,一定要注意的是转发,转发就意味着请求参数都不会丢失
chart:
dispatcher:默认,请求转发,用于与JSP整合的结果类型
freemarker:使用freemarker模板技术
httpheader:
jasper:
jsf:
redirect:请求重定向,通常是一个url
redirectAction: 跟redirect类似,不同是它使用ActionMapperFactory重定向,通常是Action,重定向到同一个包中的action
重定向到别的namespace中的action:
1. <result type="redirectAction">
2. <param name="actionName">xxx</param>
3. <param name="namespace">/redirectAction</param>
4. </result>
stream:返回一个InputStream
tiles:
velocity: 用于整合Velocity的结果类型
xslt: 用于整合XML/XSLT的结果类型
plainText:
动态决定结果:* {1}
请求参数决定结果: ${属性名} action实例中的属性
全局结果:<global-results></global-results>
可以配置一个默认的Action,当url找不到该Action时,我们采用该默认Action处理:<default-action-ref name=""/>
6、struts2的配置文件
Struts-default.xml 核心包使用的配置文件
Struts-plugin.xml 插件包使用的配置文件
Struts.xml 应用使用的配置文件
三个都是默认加载的
7、国际化
Jsp的国际化两步:
1、使用s:i18n标签
2、使用s:text标签的name,或者是其他标签的key属性
Action中的国际化:
在action中使用资源可以使用getText()函数,文件名跟action名一样,放在同文件夹中
包的国际化:
资源文件名跟包名一样,那么就可以在该包下使用该资源
全局的国际化资源文件
先是通过一个常量struts.custom.i18n.resources加载国际化资源文件
自定义选择语言:
struts2国际化运行机制:
提供一个名为i18n的拦截器,并且注册在默认的拦截器栈中。i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数
如果该参数存在,拦截器就将其作为参数,转换成Locale对象,设置为用户默认的Locale,生成的Locale对象保存在用户Session的名为“WW_TRANS_I18N_LOCALE”的属性中
8、异常处理
<exception-mapping/>
局部异常: <exception-mapping/>作为<action />元素的子元素配置
全局异常: 将<exception-mapping/>元素作为<global-exception-mappings>元素的子元素配置
异常输出:<s:property value="exception" />输出异常对象本身
<s:property value="exceptionStack" />输出异常堆栈信息
未知处理器:访问未知的action,或者是action中的未知方法
<unknown-handler-stack/>
<action name="login" class="com.swy.action.LoginAction">
<exception-mapping result="illegal"
exception="java.lang.IllegalArgumentException" />
<result>/success.jsp</result>
<result name="input">/Hello.jsp</result>
<result name="illegal">/illegal.jsp</result>
</action>
- Struts2入门(一)
- struts2入门(一)
- Struts2入门(一)
- Struts2入门(一)
- Struts2自学入门(一)
- 【struts2】(一)入门伊始
- Struts2 入门讲解(一)
- struts2入门程序(一)
- 传智Struts2笔记(一)入门
- 传智Struts2笔记(一)入门
- java web(二) struts2入门一
- struts2.2.x入门应用(一)
- Struts2入门初步需掌握(一)
- Struts2学习笔记(一)入门示例
- SSH学习(一)Struts2入门
- Struts2学习(一)---初入门
- Struts2的介绍和入门(一)
- struts2(一)——入门案例
- 一个结构师的生涯
- Swift学习:2.16 自动引用计数
- Numpy(5)
- java文件报 utf-8编码错误
- java去除注释
- struts2入门(一)
- 《JavaScript 闯关记》之对象
- palindrome-number(回文数)
- C++ - PAT - 1045. 快速排序(25)
- Python readline() from a string?
- Asp.NET MVC 导入Excel数据教程 手把手教你系列!!!
- myeclipse启动失败:Failed to create the Java Virtual Machine
- 华为交换机ARP安全
- http://my.oschina.net/u/173426/blog/618865