zoukankan      html  css  js  c++  java
  • (三)Web模块:【4】Web3.0 新特性之支持web模块

    一、Web 模块支持

      Servlet3.0新增的可插性(Pluggability)支持则将Servlet配置的灵活性提升到了新的高度。使用该特性,现在我们可以在不修改已有Web应用的前提下,只需将按照一定格式打包成的JAR包放到WEB-INF/lib目录下,即可实现新的功能的扩充,不需要额外的配置。Servlet3.0引入了称为“Web模块部署描述文件片段”的web-fragment.xml来实现可插性的。web-fragment.xml部署描述文件可以定义一切可以在web.xml中定义的内容。

      1、原来一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差。现在可通过Web模块来部署管理它们。

      2、Web模块对应一个Jar包,即Servlet 3.0可以将每个Servlet、Filter、Listener打成jar包,然后放在WEB-INF\lib中。

      3、每个模块都有自己的配置文件,这个配置文件的名称为 web-fragment.xml 。

      4、制作一个Servlet模块的步骤:

        (1)正常编写 Servlet,并编译;

        (2)将此编译 class 文件及所在包通过 jar 包命令打成 jar 包;

        (3)将此jar包用winrar打开,将META-INF中的manifest删除后添加 web-fragment.xml;

        (4)将此jar包放入WEB-INF\lib中即可;

      5、web-fragment.xml说明:

    <web-fragment>为根元素;
    <name></name>表示模块名称(模块的唯一标识);
    <ordering></ordering>定义模块加载顺序的标签,当然可以不设置模块加载顺序;
    <before><others/></before>表示在所有模块前面加载(第一个加载);
    <after><name>A</name></after>表示在A模块后面加载;
    可以在里面部署listener、filter、servlet
    值得注意的是,web.xml中用<absolute-ordering>标签指定的模块加载顺序将会覆盖web模块的web-fragment.xml文件中指定的加载顺序。
    

      

      6、打包

        如何用myEclipse打jar包(有些人不知道)
        右键你web项目里的编写的servlet(或filter或listener)类——>Export…——>JAR file——>NEXT——>(Browse)填写导出名字和存放位置——>finish
        这样就生成了我们需要的jar包了。

    二、示例

        注解方式:

      servlet类代码片段:

    @WebServlet(name="test",urlPatterns={"/basic.do"})
    public class TestServlet extends HttpServlet{
    
        //使用该方法可响应客户端的所有请求
        public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{
            System.out.println("进servlet了");
            PrintStream out = new PrintStream(resp.getOutputStream());
            //向页面输入下面字符串
            out.print("1234567890");
        }
    
    }

      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>mySerModule</name>  
       <!-- 加载顺序 -->  
       <ordering>  
          <!-- 在其它模块之前加载 -->  
          <before>  
             <others/>  
          </before>  
       </ordering>      
    </web-fragment> 

      在web-fragment.xml里的配置和之前的web.xml里类似,如果是注解实现的servlet的配置,则在web-fragment.xml里就将不再写配置了,如果不是,则还需要写配置。
      打成jar包放在一个项目里面启动后,就可通过上面servlet注解配置的/basic.do路径访问上面的servle了。

      配置方式:

      1、servlet 类

    public class FragmentDemoServlet extends HttpServlet {
        @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 {
            resp.setContentType("text/html;charset=utf-8");
            PrintWriter out = resp.getWriter();
            out.println("这是我Servlet3.0的第一个可插性示例");
            out.flush();
        }
        @Override
        public void destroy() {
            //
        }
        @Override
        public void init() throws ServletException {
            //
        }
    }

      2、在web目录下新建一个目录META-INF,在该目录下新建一个web-fragment.xml模块部署描述符文件片段:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-fragment
            xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            version="3.0"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
            metadata-complete="true">
        <!--给当前配置文件定义一个名称-->
        <name>FragmentA</name>
        <servlet>
            <servlet-name>fragmentDemo</servlet-name>
            <servlet-class>com.yyq.servlet3.pluggability.FragmentDemoServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>fragmentDemo</servlet-name>
            <url-pattern>/fragment</url-pattern>
        </servlet-mapping>
    </web-fragment>

      3、将FragmentDemoServlet和META-INF目录一起打包成JAR包,假如JAR包叫fragment.jar。

      4、将fragment.jar放到其他Web项目中的WEB\lib目录中,然后访问http://localhost:8080/fragment即可。
     
     
  • 相关阅读:
    nginx命令
    Ubuntu的Unable to locate package无法更新源问题解决方案
    Django中使用后台网站模板
    RobotFramework添加自定义关键字实战
    python的requests库怎么发送带cookies的请求
    Django不能使用ip方式访问的解决办法
    Django工程中使用echarts怎么循环遍历显示数据
    python的requests库详解
    RobotFramework与Redis库连接
    PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
  • 原文地址:https://www.cnblogs.com/niujifei/p/15593169.html
Copyright © 2011-2022 走看看