关闭

深入浅出struts2

标签: struts框架技术
357人阅读 评论(0) 收藏 举报

1.struts2简介

2.struts2流程

3.struts2核心概念


一、struts简介

struts2是由Apache软件基金会开发的一个基于MVC模式的轻量级Java EE框架,struts2在struts1的基础上,借鉴了WebWork的很多有点发展而来,但与struts2有着明显的区别。struts2中Action类的execute()方法不再依赖于Servlet API,大大降低了耦合性; 引入了拦截器机制; 提供了更为强大的数据校验功能; 发布了全新的标签和OGNL表达式; 另外还支持Ajax等。说了这么多struts2,来说一下它的替代技术,spring mvc。单从名字上就能看出,它也是一个mvc框架。有人推荐struts2,有人推荐spring mvc,在我看来,这两个就像是风格各异的美女,各有她婀娜多姿的一面。


二、struts2流程

学习struts2之前,最好先把它的工作流程了解一下。


上图中有一点需要指出:org.apache.struts2.dispatcher.FileterDispatcher核心过滤器只在struts2.1.3版本以前使用,在后续版本中使用的核心过滤器更改为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

如上图所示,struts2的具体执行过程可以分为以下几步:

第一步:客户端向web容器(如tomcat)发送请求(如访问index.jsp)

第二步:请求经过一系列的过滤器过滤之后,把该请求传递给struts2的核心过滤器StrutsPrepareAndExecuteFilter

第三步:核心过滤器接收到请求信息之后,根据请求的url(如/login/HelloAction)搜索Action的映射信息。

第四步:找到对应的映射信息,则在struts.xml中对应的Action被实例化,并且执行该action的execute方法(如何没有指定任何方法的话,则默认执行该方法),处理用户请求信息。另外在action对象被调用前后,interceptors也会被先后执行。

第五步:action对请求处理完毕以后返回一个逻辑视图(说白了就是一个字符串),该逻辑视图在struts.xml文件中相应的<result>元素中寻找对象的物理视图(这个物理视图既可以是JSP/HTML页面,也可以是Freemarker/Velocity模板,甚至可以是Action),并返回给客户端

注释:学习struts2,把上面那张图中各个部分的细节都掌握了,寓意着你真正掌握了struts2。


三、struts2的核心概念

先说一下web.xml,web应用程序在启动tomcat服务器时,首先会建在web.xml文件。在web.xml文件中配置struts2的核心控制器StrutsPrepareAndExecueFilter,然后这个控制器就会加载整个struts2框架。

然后再说一下struts.xml,它一般放在web应用的类加载路径下,通常web应用编译之后放在WEB-INF/classes路径下。在eclipse中,把它放在src目录下即可。

struts.xml的配置

常用的配置元素和功能:

include元素:包含其他的xml配置文件

constant元素:配置常量信息

package元素:包含一系列的Action及拦截器配置信息,便于对action进行统一管理

default-action-ref元素:配置默认的action

default-interceptor-ref元素:配置默认的拦截器,对package范围内的所有action有效

global-results元素:配置全局结果集,对package范围内的所有action有效

interceptors,interceptor,interceptor-stack,interceptor-ref:都和拦截器相关

action:包含于action操作相关的一系列配置信息

result元素:配置action的结果映射,嵌套在<action>元素内

param元素:配置参数信息


重点说一下action

在struts2中,action作为业务逻辑控制器,是整个struts2应用的核心。action本质上就是一个java类,一个继承了ActionSupport类的java类(当然也可以实现action接口)。

关于action和ActionSupport的具体代码,可以去struts2的安装包中查看。注:在ActionSupport类中除了实现Action接口之外,还增加了获取国际化信息的方法getText(),输入校验的方法validate()方法等等。

package com.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String Execute() throws Exception
    {
        return SUCCESS;
    }

}
上面就是一个灰常简单的action代码示例,其实不提供私有属性,只要提供相应的get/set方法即可,但是为了方便理解,还是加上吧。

在action中你还可以实现其它的方法,想想看,一个action不可能只负责一个业务逻辑处理,如果一个action仅仅负责一个单一的功能的话,那得定义多少个action呀!!!!

接下来就是如何调用含有多个方法的action

一种是动态调用方式(不太提倡),另一种就是指定method属性方式

看下面struts.xml中的一段代码:

<package name="default" namespace="/" extends="struts-default">
    	<action name="loginAction" class="com.action.UserAction" method="login">
    		<result name="student">/hwshow.jsp</result>
    		<result name="teacher">/teacher.jsp</result>
    		<result name="error">/error.jsp</result>
    	</action>
    	<action name="registAction" class="com.action.UserAction" method="regist">
    		<result name="regist">/login.jsp</result>
    	</action>
</package>
loginAction和registAction对应的具体类都为com.action.UserAction。通过为action指定不同的方法名,来调用同一个action中不同的方法。说明几点:一 package的namespace和action的name共同组成的访问该action的url。二 package的extends属性为struts-default 说明该包继承struts-default包,那么该包会自动加载defaultStack拦截器栈。


注入action属性值在这里就不再赘述





1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:611次
    • 积分:37
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档