Servlet3.0模块化支持
Servlet3.0现在已经支持各Web组件的模块化了。也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了,而不必像之前那样——所有的内容都必须在web.xml文件中进行定义。有了对模块化的支持后我们在实际应用中就可以把某些通用功能的Filter、Listener、Servlet作为一个单独的Web模块进行定义,在需要使用它们的项目中就把对应Web模块对应的jar包加进去就可以了。是不是很有用呢?接下来我们就来看一下这些Web组件究竟是怎样模块化的。
Web模块打成的jar包的内容的文件结构要求是这个样子的:
|--META-INF
| |--web-fragment.xml
| |--resources
| | |--jsp、图片等,相当于web的根目录
|--class文件和类路径下的文件
其中web-fragment.xml文件是必须要的。上述目录结构就相当于在我们的类路径下有一个META-INF目录,该目录下有web-fragment.xml文件及包含jsp、图片等资源的resources目录。针对于上述这样的目录结构,所以当我们在使用Maven构建项目的时候,我们的Maven项目的目录结构应该是这个样子的:
web-fragment.xml文件的作用与Web应用下的web.xml文件的作用是相似的,在web.xml文件可以配置的信息都可以在web-fragment.xml文件中进行配置。此外,它们的文档结构也非常的相似。所不同的是web-fragment.xml文件的根元素是web-fragment,所使用的schema也是web-fragment相应的schema。
<web-fragment version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"> </web-fragment>
另外,在web-fragment.xml文件中我们可以通过<name>元素来指定当前模块的名称,用<ordering>元素来指定当前模块相对的加载顺序。<ordering>元素下面可以指定<before>或<after>元素,而<before>和<after>元素下又可以指定<name>和<others>元素。我们来看几个指定ordering的示例。
在其他模块之前加载
<ordering> <!-- 在其它模块之前加载 --> <before> <others/> </before> </ordering>
在指定模块之后加载
<ordering> <!-- 在指定模块之后加载 --> <after> <name>模块名称</name> </after> </ordering>
除了可以在web-fragment.xml文件里面通过<ordering>元素定义当前模块的加载顺序外,我们还可以在web.xml文件中通过<absolute-ordering>元素指定各模块的 加载顺序。而且web.xml文件中指定的加载顺序比web-fragment.xml文件中指定的加载顺序具有更高的优先级。如:
<absolute-ordering> <name>module1</name> <name>module2</name> <name>module3</name> <others/> </absolute-ordering>
接下来我们来展示一个创建web模块的例子。假设我们要创建一个叫做module1的模块,其中含有一个Module1Servlet,其代码如下所示:
public class Module1Servlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("/module1.jsp").forward(req, resp); } }
接着我们在类路径下创建一个META-INF文件夹,在该文件夹下创建一个resources目录,在resources目录下创建一个module1.jsp文件。接着在META-INF目录下创建一个web-fragment.xml文件,其内容如下:
<web-fragment version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"> <!-- 指定模块名称 --> <name>module1</name> <!-- 加载顺序 --> <ordering> <!-- 在其它模块之前加载 --> <before> <others/> </before> </ordering> <servlet> <servlet-name>module1Servlet</servlet-name> <servlet-class>com.xxx.Module1Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>module1Servlet</servlet-name> <url-pattern>/servlet/module1</url-pattern> </servlet-mapping> </web-fragment>
之后我们把该项目打成一个jar包就可以把它作为一个jar加到其它Web应用中,在其它Web应用中使用了。放到其它Web应用中后,我们通过访问/servlet/module1就可以访问到我们module1模块中定义的Module1Servlet了。
相关推荐
在这个"Servlet 3.0模块实现demo"中,我们将探讨如何利用这些新特性实现一个模块化的Web项目,以及如何通过Maven进行依赖管理。 一、Servlet 3.0的主要特性 1. **注解驱动的Servlet**:在Servlet 3.0中,我们不再...
8. **Pluggable Servlet Container**:Servlet 3.0标准使得Servlet容器更加模块化,开发者可以自定义Servlet容器,或者开发独立于容器的应用程序,增强了灵活性和可移植性。 9. **动态注册**:开发者可以在运行时...
4. **微容器**:Servlet 3.0引入了微容器的概念,允许在没有完整web应用部署的情况下运行部分组件,提高了模块化和部署灵活性。 5. **WebSocket支持**:虽然Servlet 3.0本身不直接支持WebSocket,但它是WebSocket ...
在这个主题中,我们将深入探讨Servlet 3.0的模块化实践,以及如何利用这些特性优化开发流程。 一、模块化架构 在Servlet 2.5及之前版本中,Web应用通常被打包为单一的WAR文件,这导致了代码耦合度高,不易管理和...
这个特性极大地提高了应用的可扩展性和模块化程度,使得开发人员可以更加自由地控制Servlet的生命周期。 综上所述,Servlet3.0的这些新特性为Java Web开发带来了显著的改进。监听器和过滤器的注解驱动注册简化了...
Servlet3.0允许在应用内部定义自己的微容器,这意味着应用可以自定义初始化过程,增强了模块化和扩展性。 6. **Filter的注解支持**: `@WebFilter`注解使得Filter的注册和配置变得更简单。开发者可以直接在Filter...
Servlet 3.0引入了微容器概念,使得应用程序可以在不依赖全局web.xml的情况下运行,实现了模块化和可插拔的部署。 6. **Pluggable Contexts**: 开发者可以自定义Web应用程序上下文(ServletContext),实现更...
5. **微容器(Microcontainer)**:Servlet 3.0引入了微容器的概念,允许在Web应用程序内部创建自定义的部署组件,增强了模块化和可扩展性。 6. **WebSocket支持**:Servlet 3.0规范添加了对WebSocket协议的支持,...
通过使用Servlet 3.0的模块化特性,开发者可以构建微容器,只包含应用程序所需的最小依赖,从而实现更轻量级的部署。 6. **预加载Servlet**: 开发者可以通过注解指定Servlet在应用启动时自动加载,无需等待第一...
- **可选依赖**:Servlet 3.0引入了可选依赖的概念,使得模块化开发更加灵活,应用可以只加载实际需要的Servlet和过滤器。 2. **Servlet生命周期**: - **初始化**:Servlet实例化后,会调用`init()`方法进行初始...
开发者可以直接在代码中注册Servlet和过滤器,使得小型应用或者模块化应用的开发变得更加简单。 4. **动态注册**: - 开发者可以在应用程序运行时动态注册Servlet、过滤器和监听器,提供了更大的灵活性。`...
Servlet 3.0 对 web.xml 进行了模块化处理,使得配置更加灵活。开发者可以选择仅在需要的地方使用它,而不是像以前那样需要包含大量的配置信息。 #### 动态配置 Servlet 3.0 还支持动态配置,这意味着应用可以运行...
JBoss 7采用了模块化设计,提高了性能和启动速度。它支持热部署,使得开发者在开发过程中无需重启服务器即可看到代码变更的效果。此外,JBoss 7提供了对Servlet 3.0的支持,方便我们部署和管理Web应用程序。 3. **...
在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....
Servlet3.0允许开发者创建自定义的ServletContext实现,这为创建模块化应用提供了可能,每个模块可以有自己的ServletContext,降低了模块间的耦合。 5. **WebSocket支持** 新增了对WebSocket协议的支持,允许...
【标题】"javax.servlet...综上所述,"javax.servlet-3.0"代表了Servlet API的一个重要里程碑,提供了许多现代化的特性,极大地改进了Java Web开发的效率和性能。对于Java开发者来说,理解和掌握这些特性是至关重要的。
综上所述,servlet 3.0规范为Java Web开发提供了一个强大的、模块化的、灵活的框架,它对Java EE的其他技术提供了良好的支持,并且通过注解和其他特性简化了Web应用的开发。开发者使用这个规范可以创建可扩展的、...
3. **可插拔的Servlet容器**:Servlet 3.0引入了模块化的概念,允许开发者创建独立于具体容器的Servlet模块。这使得Servlet应用可以在不同的服务器之间轻松迁移,同时也方便了单元测试。 4. **URL路径映射增强**:...
Servlet 3.0 新规范提出了模块化开发,也就是每个 Servlet、Filter、Listener 都可以有属于自己的配置文件,功能和 web.xml 一样,它只负责配置当前的 Servlet。然后我们只需要将配置文件和自己写的 Servlet 等内容...