【struts】struts初始化主线

一、概述

struts框架的入口是一个filter(StrutsPrepareAndExecuterFilter),filter在学习jsp/servlet的时候最先引入,其主要是由一个filter接口中的三个方法和三个参数——init和doFilter、destory方法,FilterConfig(web.xml中filter配置参数)和协议无关的ServletRequest、ServletResponse。纵观struts2出现的前世今生,其实整个框架由两部分组成,一部分是和HTTP协议有关的struts部分,另一部分则与协议无关、与业务逻辑紧密相连的xwork部分,因此运行主线还可以再细致分一下,分成HTTP预处理(由struts完成)过程和HTTP执行过程(由xwork完成)。

查看StrutsPrepareAndExecuterFilter源码,整个struts框架可以分成三条主线:

1. 初始化主线:init(FilterConfig)方法驱动;

2. 运行主线:doFilter(ServletRequest, ServletResponse)方法驱动;

2.1 HTTP预处理过程:和struts有关;

2.2 HTTP执行过程:和xwork有关;

3. 销毁主线:destory()方法驱动;

至此,struts2的所有主线列举完成,本次主要分析struts框架的初始化主线。

推荐阅读:《struts技术内幕》——陆舟 《struts in action》

二、初始化主线

web容器的初始化顺序,ServletContext>listener>filter>servlet,对应着web.xml中配置的读取顺序context-param会最先读取,接着才是listener、filter、servlet标签中配置的init-param。因此,想要使用struts框架,拷贝jar也好,配置struts.xml文件也好,最重要还是在web.xml中配置StrutsPrepareAndExecuterFilter,否则就算你做好一切准备工作,也不能把struts接入你的项目。

写到这里决定不写了,还是亲自去看源码吧,直接查看filter里面的init方法,里面主要初始化日志工厂、HTTP预处理对象Prepare、HTTP请求处理对象Executer,最重要的是整个Struts作为MVC框架的Controller——Diapatcehr的建立及其init方法,而整个struts的核心容器(Struts IOC/DI)也在Dispatcher中初始化完成,另外,Dispatcher还负责default.properties、struts-default.xml、struts.xml、struts-plugin.xml的加载,等等。

需要明确的是,struts是由两部分组成的,这一点尤为重要,其中Dispatcher类作为粘合剂,将struts和xwork粘合在一起,从而形成struts2 web框架和web容器解耦的基点。要想弄明白struts2框架,一个Filter和一个Dispatcher的了解首当其冲。

三、至此结束

struts2作为展示层的MVC框架还是太“重”了,当前Spring MVC也逐渐占有更多的市场。

我们说分层开发,其实是面向一个应用而言的分层:表示层、业务层和持久层,struts2和Spring MVC作为表示层的MVC框架。下面撸一下各层常用框架和技术。

展示层:servlet/jsp、Spring MVC、struts2

业务层:Spring

持久层:JDBC、DButils、Spring JDBC、Mybatis、hibernate

此外,如果你还有精力,研究一下java.util.concurrent[.*]包和NIO,这些和机器硬件原理打交道太多了,是你进阶必备的只是,譬如并发编程里面的JMM(java内存模型,不是简单的JVM的内存分类),抽空研究一下ThreadLocal也很有必要。

附注:

本文偷懒没写完,如有需要,请加群讨论(QQ:323849607),谢谢!

时间: 2024-10-14 11:03:05

【struts】struts初始化主线的相关文章

SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

本文是专栏文章(SpringMVC深度探险)系列的文章之一,博客地址为:http://downpour.iteye.com/blog/1341459. 在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 SpringMVC定义了一系列组件(接口)与所有的处理单元对应起来 SpringMVC由DispatcherServlet贯穿始终,并将所有的组件串联起来

SpringMVC深入探究(1)——DispatcherServlet与初始化主线

在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 SpringMVC定义了一系列组件(接口)与所有的处理单元对应起来 SpringMVC由DispatcherServlet贯穿始终,并将所有的组件串联起来 在整个过程中,组件和DispatcherServlet总是维持着一个相互支撑的关系: DispatcherServlet —— 串联起整个逻辑主线,是整

struts理解

最近大家都在找工作,我好迷茫,觉得自己会的东西太少了.所以决定开始学习SSH三大框架. 首先是struts. struts是基于mvc模式的框架.(struts其实也是servlet封装,提高开发效率!) Servlet起到控制器作用!主要可以: ----> 获取请求数据封装 [BeanUtils可以优化,(调用方法?)] ----> 调用Service处理业务逻辑 ----> 跳转(转发/重定向)              [跳转代码写死] 传统mvc开发: 1. 跳转代码写死,不灵活

struts的学习笔记

Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合. Struts 2的应用可以不依赖于Servlet API和Struts API . 2.Struts 2 提供了拦截器,利用拦截器可以进行AOP编程. 3.Struts 2 提供了类型转换器. 4.St

struts.serve.static.browserCache

(一).Struts第一天 1. JavaWeb知识回顾 n 客户端编程 HTLM/CSS/JS n XML技术 会写XML * 基本语法 * DTD * Schema 会读XML * Dom4J读取XML n Servlet/JSP编程 JavaWeb开发,开发web网站! ServletApi ! 几个接口的用法! 面向接口编程! n 数据库 MySQL数据库! CRUD语法! n Jdbc 编程 JdbcApi 接口! n JavaWeb增强 过滤器.Listener.文件上传&下载.国际

Struts 2常用的Ajax标签

Struts 2对Ajax的支持 •Struts 2对Ajax提供了很好的支持 –Struts 2.1提供了基于Dojo的Ajax标签,对Ajax操作进行了进步封装,可以更快捷容易的使用Ajax •使用Struts 2.1的Ajax标签前必须进行如下操作 1)将struts2-dojo-plugin-2.1.x.x.jar复制到WEB-INF\lib目录 2)在JSP页面中导入Ajax标签 <!-- 引入Ajax标签 --> <%@ taglib uri="/struts-do

java--easyUI+struts+JSP实现简单的增删查改

1.数据库工具类 package com.xiaoxiong.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnUtil { //定义连接数据库参数 private static String drivers = "com.mysql.jdbc.Driver"; private static String url

Struts和SpringMVC两种MVC框架比较

基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架有Spring MVC.Tapestry.JSF等.这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica.VRaptor等.这些框架都提供了较好的层次分隔能力.在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高. 如何选择一个好的

struts组件概述

struts核心控制器 在服务器启动时调用 init()方法,读取xml中常量信息→将xml配置文件中的信息,以一定格式封装到javabean中,所以修改了xml文件就需要重启服务器 之后执行dofilter方法  首先解析http请求→到javabean中寻找→找到后通过action a = Class.forName(action类路径) 来创建对象  String str = a.execute;返回字符串 → 根据返回的字符串去javabean中找→执行type="" 其中的功