- 浏览: 81177 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (80)
- java (20)
- java 日志 (1)
- 网络应用 (1)
- 算法 (3)
- struts (2)
- 线程 (2)
- 数据库 (1)
- tools (1)
- lunix (8)
- Android (4)
- Nutch原理 (1)
- 字符编码 (1)
- 框架 (3)
- spring (7)
- Oracle (2)
- 数据连接池 (3)
- solr (3)
- 思想 (2)
- 架构设计 (1)
- 缓存 (2)
- hibernate (1)
- 学习 (1)
- java,jvm (1)
- 分页插件 (1)
- javascript (1)
- nginx (2)
- svn (2)
- 内存 (3)
- sqlserver (1)
- UML (1)
- JS 跨域 (1)
- mybatis (1)
- 加密 (0)
最新评论
-
q15106202446:
不知不觉 这些都有所了解了!时间过的好快..该进攻系统架构了
学习(转) -
zkq-java:
zkq-java 写道[u][/u]引用[i][/i][*][ ...
Solr 创建索引的原理 源码分析 -
zkq-java:
[u][/u]引用[i][/i][*][img][/img][ ...
Solr 创建索引的原理 源码分析
大家应该都已经知道Spring 3.1对无web.xml式基于代码配置的servlet3.0应用。通过spring的api或是网络上高手们的博文,也一定很快就学会并且加到自己的应用中去了。PS:如果还没,也可以小小参考一下鄙人的上一篇文章<<探 Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用>>。
经过一天的深度research, 我了解,理解以及重现了springframework的那一小段代码。
OK,第一步,入手点,WebApplicationInitializer接口。因为我们只需实现这个接口覆写它的一个方法,就可以做到配置web.xml同样的功效。看它的源码,其实看和不看没什么两样:
就这么点儿,有效代码5行,弄地我一头雾水,就是一个普通接口,声明了一个方法。连注解都没有,server是怎么找到实现了它的类的?如果这样,何不找我定义的其它接口(的实现类完成配置工作)呢。可见现在java的解耦技术,真令人汗颜。
第二步,这个接口旁边(同包)有个SpringServletContainerInitializer, 看下它是何方神圣吧:
以上的有效代码28行。刚看时也很迷茫,其实慢慢就理解了。拟个伪代码吧,方便大家理解:
1,定义一个类SpringServletContainerInitializer,并标明该类要操作的一个类WebApplicationInitializer
2, 该类会行使ServletContainerInitializer接口的一个行为onStartup,从而将一个集合中的初始化设置 全部配置到ServletContext的实例中。
3,具体的onStartup方法中,建立合格配置列表,
4,如果确定集合中有配置,逐一检查配置是否是合格配置,具体判断依据:这个类不是接口,不是抽象类,而且是所要操作的那个接口的一个实现类。满足此依据,合格。将合格的配置类实例化放入合格配置列表。过程中有错要通知控制台。
5,如若执行完步骤4,发现没有合格配置,在ServletContext记录该结果,并结束onStartup行为。
6,将找到配置按一定排列方式(AnnotationAwareOrder)排序。
7,在ServletContext中记录找到结果。
8,逐一执行配置。 即驱动每一个WebApplicationInitializer的实现类行使其onStartup行为。
第三步很明显了,去research 接口ServletContainerInitializer和注解HandleType。在这里:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html
该接口允许一个库或运行时,(运行时应该指server)声明为一个web程序的启动状态,并执行任何所需的程序中注册的servlet,filter,listener来响应它......
其它也就不用看了,可以想象得到支持Servlet3机制的服务器,会找到这样接口的实现类,执行onStartup行为。至于如何找,无非也是这样一系列的反射机制的应用。自己做一个试试吧:
自定义的WebApplicationInitializer:
自定义的ServletContainerInitializer,我做得很简单,直接去执行找到配置类中的loadInfo方法
写个测试Servlet:
实现WebParam配置接口来配置刚才的Servlet:
启动服务器,访问http://localhost:xxxx/xxxxx/index.html
失败。Debug. 发现没有走这些代码。应该还差关键环节。看来还得知道Servlet3中是怎么找ServletContainerInitializer的。再回刚才ServletContainerInitializer的api有这样一句:该接口的实现必须声明一个JAR资源放到程序中的META-INF/services下,并且记有该接口那个实现类的全路径,才会被运行时(server)的查找机制或是其它特定机制找到。那篇api需要仔细阅读啊。
到org.springframework.web-3.0.1.RELEASE.jar中能找到META-INF/services下的javax.servlet.ServletContainerInitializer文件,内容为org.springframework.web.SpringServletContainerInitializer同样,我们专门作这样一个包,在mkdir好的META-INF/services下vi 一个文件命名为javax.servlet.ServletContainerInitializer,内容为自定的那个WebConfiguration的全路径类名。 然后在META-INF的parent路径下运行jar cvf test.jar META-INF。一切完毕,将其放到WEB-INF/lib下。启动。
这回大功告成。
访问http://localhost:xxxx/xxxxx/index.html。页面跳到了index.jsp下。
并且控制台打出: Some client access once
再使个劲,将Servlet和Servlet配置合二为一:
这回我们看到,配置文件与servlet放到了一起。这样将回节省大量时间。
以后直接运用Spring Framework的WebApplicationInitializer也知道是怎么一回事儿了。而且可以将Spring 的applicationContext.xml与web.xml融合在一个类中。即注解为@Configuration,并实现WebApplicationInitializer.回头试试。
发表评论
-
spring中的定时器功能
2013-03-21 13:45 731本文为抄袭,仅为保存资源 spring的定时器功能,它不仅 ... -
spring fileupload
2012-12-06 10:53 838spring支持在网络应用程序处理文件上传,提供拔插的or ... -
探 Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用(转)
2012-05-22 16:09 3089探 Spring 3.1之无web.xml式 基于代码 ... -
Spring MVC国际化配置(转)
2012-04-20 15:41 1063一、基于浏览器语言的国际化配置 使用Spring的MVC,并且 ... -
spring 源码解析(一) 转
2012-03-23 14:31 779在认真学习Rod.Johnson的三部曲之一:<&l ... -
spring 加载资源文件(转)
2012-03-22 09:01 873spring 加载资源文件 在Spring 中可以使用以 ... -
spring 3.0 jar包详解(转)
2012-03-08 15:20 6951. spring.jar 是包含有完 ...
相关推荐
《Spring Web MVC框架详解——基于org.springframework.web.servlet-3.1.0.RELEASE.jar》 在Java Web开发领域,Spring框架无疑是最具影响力的框架之一,其中Spring Web MVC是其核心组件,专注于处理Web请求和响应。...
web.xml是Web应用的部署描述符,它包含了应用的配置信息,如Servlet、Filter、Listener的定义,以及它们之间的映射关系。通过web.xml,Tomcat知道如何正确地初始化和管理Web应用的各个组件。 5. **Tomcat源码分析*...
-- 可以自定义 servlet.xml 配置文件的位置和名称,默认为 WEB-INF 目录下,名称为[<servlet-name>]-servlet.xml,如 spring-servlet.xml --> <param-name>contextConfigLocation <param-value>/WEB-INF/spring-...
18. `org.springframework.web.servlet-3.1.0.M1.jar`: 提供对Servlet 3.0规范的支持,是Spring MVC的主要组成部分,负责处理HTTP请求和响应。 19. `org.springframework.web.struts-3.1.0.M1.jar`: 与Struts框架的...
对于使用SSH(Struts + Spring + Hibernate)和SSI(Struts + Spring + iBatis)等框架的应用程序而言,合理的`web.xml`配置至关重要。本文将详细介绍`web.xml`中的关键配置项,并解释其作用。 #### 一、`web.xml`...
"struct2.3+spring3.1+mybits3.1 核心Jar包和配置文件"的组合正是这样一个经典的应用架构,它将Struts2、Spring3.1和MyBatis3.1这三个流行框架整合在一起,为开发者提供了强大的MVC(Model-View-Controller)架构...
总的来说,"spring3.1+xfire1.26 全注解"项目展示了如何利用Spring 3.1和XFire 1.26的注解功能,实现无XML配置的Web服务开发,提高了开发效率,降低了维护成本。在实际应用中,这种组合可以方便地创建和部署复杂的...
虽然并非所有Web应用程序都必须包含`web.xml`文件,但在大多数场景下,为了更好地配置和管理Web应用,开发者通常会选择在项目的`WEB-INF`目录下放置一个`web.xml`文件。本文将详细介绍`web.xml`文件的基本概念、结构...
1. **web.xml**:定义了应用程序的初始化参数以及Servlet的映射规则。 ```xml <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts2.dispatcher.ng.filter....
在实际开发中,你可能还需要添加其他的库,例如Spring的测试库(spring-test-3.1.x.jar)来进行单元测试,或者JSTL和EL库(如javax.servlet.jsp.jstl-*.jar和javax.el-*.jar)来实现动态视图。记得根据项目的具体...
Spring MVC架构与DispatcherServlet配置 Spring MVC是一种流行的基于Java的Web应用框架,它提供了一个灵活的架构来开发...了解Spring MVC的架构和DispatcherServlet的配置是开发基于Spring MVC的Web应用程序的基础。
1. **Spring MVC 3.1**:Spring MVC是Spring框架的一个模块,主要处理Web应用中的请求和响应。它提供了模型-视图-控制器(MVC)架构,使得开发人员能够将业务逻辑、数据和用户界面分离。Spring MVC 3.1引入了更多的...
Spring MVC 是一个强大的基于Java的Web应用程序开发框架,它属于Spring框架的一部分,专注于处理Web请求和展示数据。在Spring 3.1版本中,引入了许多改进和新特性,旨在提高开发效率和应用性能。这个“spring 3.1 ...
它通过`org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer`类来配置FreeMarker,并通过`org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver`类来解析视图。 **2. 配置...
Struts2.0、Hibernate3.1和Spring2.5是经典的Java企业级开发框架组合,它们在2000年代末至2010年代初广泛用于构建Web应用程序。这个配置组合提供了模型-视图-控制器(MVC)架构、持久化管理和依赖注入等核心功能。 ...
此外,它优化了对Servlet 3.1的支持,增强了对WebSocket和Spring Data的改进。 3. **源码结构分析** - **spring-framework-4.3.25.RELEASE-dist.zip**:包含Spring Framework的基础库和核心模块,如core-container...
-- 可以自定义 servlet.xml 配置文件的位置和名称,默认为 WEB-INF 目录下,名称为 [<servlet-name>]-servlet.xml,如 spring-servlet.xml --> <param-name>contextConfigLocation <param-value>/WEB-INF/spring...
`web.xml`是Web应用的部署描述符,其中定义了Servlet、Filter、Listener等组件的配置。对于Struts而言,这里需要配置Struts的DispatcherServlet,它是处理HTTP请求的入口。 #### Struts配置文件:struts.xml `...
开发人员需要编写XML配置文件,如Spring的`applicationContext.xml`和Struts 2的`struts.xml`,来定义框架的配置和应用的组件。 总之,SSH框架的集成使得开发者可以充分利用Spring的依赖注入和事务管理,Hibernate...
《DWR3.0_Spring3.1_Hibernate4.1_JPA全注解实例》是一个集成技术的实践教程,涵盖了Direct Web Remoting (DWR) 3.0、Spring框架3.1、Hibernate持久化框架4.1以及Java Persistence API (JPA)的全注解使用方法。...