struts2入门(一)

来源:互联网 发布:知乎 期货合理杠杆 编辑:程序博客网 时间:2024/05/16 05:37

1Struts2概要

Struts2mvc框架,其他mvc还有spring mvc,JSF等等,struts2配置文件中的标签有顺序

  工作流程:

 1.客户端提交一个HttpServletRequest请求(actionJSP页面)。

 

2.请求被提交到一系列Filter过滤器,如ActionCleanUpFilterDispatcher等。

 

3.FilterDispatcherStruts2控制器的核心,它通常是过滤器链中的最后一个过滤器。

 

4.请求被发送到FilterDispatcher后,FilterDispatcher询问ActionMapper时候需要调用某个action来处理这个Request

 

5.如果ActionMapper决定需要调用某个actionFilterDispatcher则把请求交给ActionProxy进行处理。

 

6.ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。

 

7.ActionProxy创建一个ActionInvocation实例,通过代理模式调用Action

 

8.action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Intercepter拦截器。

 

9.最后ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。

2、使用Sessionservlet api

得到Session:

使用ActionContextgetContext()方法的getSession()返回一个Map对象,这是为了使ActionServlet api 分离的设计思想,底层的拦截器负责该SessionHttpSession之间的转换

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):获取当前ActionContextkey对应的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.xmlfilter中配置

   使用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

Resultname,配置逻辑视图名,默认是success

resulttype属性:

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>





0 0
原创粉丝点击