struts2框架是SSH框架集中的框架之一,是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器层(Controller)来建立模型与视图的数据交互。

  在使用struts2框架的过程中,需要两个配置文件,分别为web.xml和struts.xml,服务器一启动就加载web.xml的配置,web.xml启动时,在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作;struts2读取到struts.xml后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件。

一、访问流程:

(1)客户端提交请求

(2)请求被提交到一系列过滤器(先ActionContentCleanUp,然后其他过滤器,最后FilterDispatcher)

(3)FilterDispatcher咨询ActionMapper是否需要调用某个Action来处理这个请求,如果ActionMapper决定调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。

(4)ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。

(5)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)

(6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result

二、struts.xml的文件组成

1、XML 头部声明为<?xml version="1.0" encoding="UTF-8"?>

2、DTD约束文件<!DOCTYPE struts PUBLIC

"-//Apache Software undation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

DTD文件是一种保证xml文档格式正确的有效方法,通过比较xml文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。

3、struts 根标签

4、devMode 开发模式 <constant name="struts.devMode" value="true" />当value的值为false的时候,就不是开发模式,修改struts.xml文件之后运行项目需要重启服务器;当value的值为true时,为开发模式,修改struts.xml文件之后运行项目不需要重启服务器就能运行,并且可进行调试信息输出。

5、package 包配置

struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。每个package元素定义了一个包配置。常用属性有:

name:必填属性,指定包名;extends可选属性,指定该包继承其他包;namespace:可选属性,用来制定该包的命名空间。考虑到同一个Web应用中需要同名的Action,struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action。

一般来说,package的使用按照项目的功能模块来划分,从而使得项目更有逻辑性。

6、实现action类:struts2中Action是核心内容。struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里应该包含与请求参数对应的属性,并提供setter,getter方法。action有以下属性:

name:action的名称;class:对应的类的路径;method:调用action中的方法名

action中:——>result 结果,有一下属性:

name:返回值,返回值可以是框架提供的常量(SUCCESS,FINAL,LOGIN,INPUT等),也可以自定义

type:默认不写为请求转发,type=redirect表示“重定向”

result之间的路径表示要跳转的路径。

  struts2的优点:

1、结构更加清晰,地址和类之间的映射都配置在struts.xml中,struts2内部按照MVC设计模式设计,并且作为web开发中MVC设计模式中的Controller层。

2、在操作Action时,可以直接使用参数,不需要考虑request和response,struts2也提供了ServletActionContext对象,通过方法ServletActionContext.getRequest()获得当前请求的对象request(response对象)。

3、Action获得页面bean.属性拼装的实体Bean;页面直接获得Action中的属性。

Struts2详解的更多相关文章

  1. struts2 详解

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.struts使 ...

  2. Struts2学习第三课 Struts2详解

    接着上次的课程 这次我们看struts.xml 修改如下:这里是加上命名空间,默认的是不加,我们手动加上时就要在访问时加上命名空间. <?xml version="1.0" ...

  3. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  4. Struts2中 Result类型配置详解

    一个result代表了一个可能的输出.当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出.在com.opensymphony.xwor ...

  5. Struts2+Uploadify文件上传使用详解

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例是php版本的,本文将详细介绍Uploadify在java中的使用,您也可以点击下面的链接进行演示或下 ...

  6. Struts2使用Interceptor实现权限控制的应用实例详解

    Struts2使用Interceptor实现权限控制的应用实例详解 拦截器:是Struts2框架的核心,重点之重.因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的.少说了. ...

  7. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

  8. 引用 struts2标签详解 - wo的的日志 - 网易博客

    引用 元元 的 struts2标签详解   引用 COLD 的 struts2标签详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@t ...

  9. Struts2学习笔记(二)——配置详解

    1.Struts2配置文件加载顺序: default.properties(默认常量配置) struts-default.xml(默认配置文件,主要配置bean和拦截器) struts-plugin. ...

随机推荐

  1. hdu 3032 Nim or not Nim? 打sg表

    题目链接 给出n堆石子, 每次可以取一堆中的任意x个(x>=1), 或者将一堆石子拆成两堆, 取到最后一堆的胜. 这个题需要打sg表找规律, 打表程序看代码. #include<bits/ ...

  2. ASP.NET MVC 项目分离

    ASP.NET MVC 项目分离 说明: ZRT.Web 是前台网站,目录[D:\ZRT.Web\] ZRT.Admin 是后台管理,目录[D:\ZRT.Web\Applications\Admin\ ...

  3. .net mvc笔记4_依赖注入

    一.Building Loosely Coupled Components MVC模式最重要的特点就是关注点分离.我们希望应用中的组件能尽可能的独立,相互之间即使有依赖也要在我们的控制之下. 在理想情 ...

  4. 关于crontab笔记

    如下所示,一般crontab文件里面的定时任务格式如下所示: 59 23 * * * /home/oracle/scripts/alert_log_archive.sh >/dev/null 2 ...

  5. C模块回调Lua函数的两种方法

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...

  6. 使用COCOS2D-X JSB开发,在js页面中设置iOS键盘模式

    XYSDK.h void setKeyboardType(int type); XYSDK.cpp voidXYSDK::setKeyboardType(int type) { #if (CC_TAR ...

  7. KeCode对照表(键盘按键的获取)

    KeyCode键盘对照表: http://www.cnblogs.com/furenjian/articles/2957770.html

  8. 上一篇下一篇 排序 (非ID字段排序)

    网上看了很多关于"上一篇下篇"的文章,可大都是按ID排序. 实际上,很少有按ID排序的. 分享下我的单独排序字段的写法,主要分为ms sql2000 和 ms 2005及以上版本. ...

  9. JavaSE复习日记 : 算是个小前言吧

    /* * Java也学了好久了,抽个时间整理了一下课堂笔记,也有些是我刚开始学会犯的一些错误.在这里浅谈一下JavaSE的基础内容,对我来说也是一种不错的复习方式. * * 那好,对于初学者来说,学习 ...

  10. HOOK API(二)—— HOOK自己程序的 MessageBox

    HOOK API(二) —— HOOK自己程序的 MessageBox 0x00 前言 以下将给出一个简单的例子,作为HOOK API的入门.这里是HOOK 自己程序的MessageBox,即将自己程 ...