Servlet3.0模块化支持

简介: Servlet3.0模块化支持          Servlet3.0现在已经支持各Web组件的模块化了。也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了,而不必像之前那样——所有的内容都必须在web.xml文件中进行定义。

Servlet3.0模块化支持

 

       Servlet3.0现在已经支持各Web组件的模块化了。也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了,而不必像之前那样——所有的内容都必须在web.xml文件中进行定义。有了对模块化的支持后我们在实际应用中就可以把某些通用功能的FilterListenerServlet作为一个单独的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了。

 

 

目录
相关文章
|
7月前
|
前端开发 Java 开发者
Spring MVC:构建高效、可维护、可扩展的Web应用程序
Spring MVC:构建高效、可维护、可扩展的Web应用程序
55 0
|
5月前
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
218 0
|
7月前
|
设计模式 存储 前端开发
MVC(模型-视图-控制器)是一种在Web应用程序开发中广泛使用的软件设计模式
【5月更文挑战第12天】MVC模式是Web应用开发中的常见设计模式,将逻辑、数据和界面分离,提升代码可维护性和重用性。模型处理数据逻辑,视图展示数据,控制器协调用户输入与模型视图交互。优点包括代码分离、易维护、可扩展和组件重用,促进高效灵活的开发。
69 2
|
4月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
41 3
|
7月前
|
安全 Java 程序员
Spring框架的核心特性是什么?
【4月更文挑战第30天】Spring 的特性
409 0
|
7月前
|
前端开发 JavaScript 开发者
深入理解MVC和MVVM:构建现代Web应用的利器
深入理解MVC和MVVM:构建现代Web应用的利器
|
7月前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
120 4
|
存储 设计模式 前端开发
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
56 0
|
7月前
|
存储 前端开发 Java
理解MVC架构模式:Java Web开发的设计理念
【4月更文挑战第3天】MVC架构模式在Web开发中广泛应用于构建可维护和扩展的应用。它将应用程序分为模型、视图和控制器三部分,增强代码模块化和重用。模型处理数据逻辑,视图负责用户界面,而控制器协调二者。MVC优点包括高内聚、低耦合、易于测试、扩展和维护。在Java Web开发中,可通过Servlet、JSP或Spring框架实现MVC。理解并运用MVC是Java Web开发者的关键技能。
125 0
理解MVC架构模式:Java Web开发的设计理念
|
缓存 前端开发 Java
深入探究Java RESTful:构建灵活的现代Web应用
在当今互联网时代,RESTful架构已成为构建现代Web应用的重要范式。作为一种强大的架构风格,它允许开发者设计灵活、可扩展的API,从而实现前后端之间的无缝通信。本文将带您深入了解Java中的RESTful架构,探讨其概念、设计原则、实现方式以及在实际应用中的优势。