Struts 2配置详解
一:Struts 2执行过程的解析
- 分析登录程序:
(1.)获取Struts 2资源。
(2.)在应用程序中导入Struts 2的类库。
(3.)在web.xml文件配置StrutsPrepareAndExecuteFilter。
(4.)编写Action类进行配置
(5.)配置返回结果与物理视图资源的关系。
(6.)编写结果视图
2.配置资源:
(1.)web.xml:任何一个web应用程序都是基于请求/响应模式进行构建的,无论采用哪种MVC框架都不离开web.xml文件配置。
(2.)Struts 2默认加载顺序:struts-default,struts-plugin.xml,和struts.xml
(3.)Action:在Struts 2中控制器是由两个部分组成的:
核心控制器(Filter):用于拦截用户请求,对请求进行处理。
action元素中的name属性是必须的,表示action的名字,用于匹配请求的URL,class属性表示Action类的权限类的权限定类名,即决定了该action的实现类。
(4.)Result:该元素是实现结果视图的调用,,并决定视图以哪种方式展现给客户端。简单的来说就是用来设定Action处理结束后,系统下一步将要做什么。
3.Struts 2执行的过程分析:
(1.)当web容器接收到请求后,将请求交由在web.xml中配置的Struts 2框架的控制器StrutsPrepareAndExecuteFilter(核心控制器).
(2.)由StrutsPrepareAndExecuteFilter确定请求对应的Action(业务控制器)。
(3.)框架根据Action返回的结果字符串,由StrutsPrepareAndExecuteFilter选择对应的result,将结果呈现给用户。
4.Struts 2的配置文件。
(1.)Struts 2的核心配置文件就是struts.xml配置文件,由开发人员编写,包含action,result等配置,主要负责管理Struts 2框的业务控制器Action
(2.)处理中文乱码可以通过在struts.xml文件中设置常量的方式解决。
首先导入jar文件:struts2-core-2.3.16.3.jar下的org/apache/struts2/default.properties
<constant name=”struts.i18n.encoding” value=”utf-8” />
(3.)struts-default.xml
为框架提供默认的设置,该配置文件会自动加载。
(4.)struts-plugin.xml
开发插件的配置文件。
二:Action的作用 - Action的三个作用:
(1.)Action最重要的作用是为给定的请求封装需要做的实际工作(调用特定的业务处理类)。
(2.)为数据移植提供处理场所。
(3.)帮助框架决定由哪个结果呈现请求相应。
封装工作单元
数据移植场所
返回结果字符串 - method属性
- 在此之前没实现一个功能都会去创建一个Action。可以通过acton配置元素的method属性来实现。
提示:Struts 2在根据action元素的method属性查找执行方法时有两种途径。
(1.)查找与method属性值完全一致的方法。
(2.)查找doMethod()形式的方法。
3.Action中动态方法调用。
1.动态方法调用(Dynamic Method Invocation,DMI)是指单元元素action并不是直接等于某个Action的名称,而是通过在Action的名称中使用感叹号(!)来标识要调用的方法名称,格式为actionName!methodName.action。
*提示:在调用动态方法时,应先确保Action中的所有方法都是普通的,开放发方法,基于这个原因,Struts 2框架默认禁止调用这个动态方法,不安全。
三:Action中的通配符的使用 - 这种使用通配符的方式是另一种形式的动态方法调用,通配符用星号(*)表示,用于配置0个或多个字符串。
- 注意元素顺序:
当没有找到具体的处理Action之后,执行下一个默认Action 。
四:Result的配置 - Struts 2的Action处理用户请求后结束,返回一个普通字符串------逻辑视图名称,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可以让系统转到实际的视图资源。
- 常用类型:
(1.)dispatcher类型:
默认类型,转发请求的形式指定视图资源,请求中的数据不会丢失。。
(2.)redirect类型:
在Result结果类型中,dispatcher结果类型与之前的JSP中学的转发和重定向的效果是一样的。
(3.)redirectAction类型:
当请求处理完成后,需要在另一个Action中继续处理请求时,就要使用redirectAction 结果类型重定向到指定的Action. - 全局配置:
<global-results>
<result name=”error”>/page/error.jsp</result>
<result name=”login” type=”redirect”>/page/login.jsp</result>
</global-results>