zoukankan      html  css  js  c++  java
  • Maven项目转化出WebContent风格的目录

    这篇文章已被废弃。

    现在,Deolin已经比较熟悉Maven,完全可以使用Jetty插件调试、热部署项目了。

    在 [SpringMVC框架下Web项目的搭建与部署] 中,提到了将tomcat的默认上下文指向项目根目录下的WebContent文件下的操作。

    这样的做法能引发三个好现象。

    1、开发过程中,只要不涉及到在类中新增/删除成员变量和方法,或是变更web.xml,那么对代码的修改是不需要重启tomcat的。也就是“热部署”。

    2、不需要在eclipse内配置tomcat了,tomcat在外部启动,与eclispe互不影响,减少各种环境问题发生的可能。

    3、结合remote debug,可以通过eclipse上的debug视窗,使调试可以随时关闭,随时开启,无需重启tomcat。

     

    但是,还有一个问题搭建过程还有个问题需要解决,就是寻找并下载jar文件。

    单纯构建Dynamic Web项目始终会面临这个问题,所以需要构建Maven项目。

    但是,Deolin觉得调试开发一个Maven项目始终不如Dynamic Web项目那么习惯。

    主要原因是Maven项目默认路径结构与Dynamic Web项目是不同的。

    不过,可以通过配置使得Maven项目内部也拥有类似WebContent风格的目录。

     

    创建Maven项目

    首先,需要安装Maven和m2e插件。

    通过在cmd中输入mvn -v和在eclipse中尝试创建Maven项目来确保这两件事

    (实际上较新版本的eclipse自带了m2e的整合)

     

     

     

     

     

    创建完成

     

    检查一下pom.xml出现错误

     

    缺少web.xml,通过Java EE Tools自动创建一个。

     

     

    可以看出,src/main/webapp目录有成为WebContent的潜质,

    不过,到目前为止,他至少还缺少/WEB-INF/classes和/WEB-INF/lib。

    而且对于一个实际项目来说,它缺少的东西应该还包括类似与/img、/css……的静态资源目录

    所以,需要对这个演示项目内的内容略作补充。

     

    将目录打包成war,验证一下。

     

     

    classpath、lib、web.xml齐全,JSP目录与其他静态资源也存在于正确的位置,这个war文件是可以部署的。

    只要让src/main/webapp目录内部的元素跟war文件内部一致,WebContent风格的目录就算构建完成了。

     

    变更main目录下源代码的编译输出路径

    首先进入项目的Properties - Java Build Path - Source

     

    改变默认输出路径,并让src/main/java和src/main/resources的Output folder指向它

     

    通过操作系统的资源管理器观察一下src/main/webapp/WEB-INF

     

     class成功地输出到了classpath中

     

    但是,仅仅只有src/java/main,而src/java/resource并没有正确的输入到classpath中,

    对于这点,需要额外的配置。

     

    回到资源管理器

     

    src/java/resource输出到了正确位置,这样一来,就只差lib目录了。

     

    导出依赖库内的jar文件

    这一步配置需要通过运行Maven命令来完成。

     

     

    dependency:copy-dependencies -DoutputDirectory=src/main/webapp/WEB-INF/lib

     

     

     

     

     

    观察一下src/main/webapp/WEB-INF

     

    由于这个方法的本质是“copy”而不是“同步”,所以会有些不足之处——

    每次新增项目的dependency时,都需要重新执行一次copy指令,使jar文件复制到WEB-INF/lib中。

    每次减少项目的dependency时,都不会自动移除WEB-INF/lib中的jar文件,需要手动删除。

    实际开发中并不会随意改变依赖库,上述不足之处实际上是可以接受的。

     

    测试webapp目录

    让tomcat的默认上下文指向%project%srcmainwebapp

     

    在测试之前先写点简单的代码用于验证结果

     

    src/main/java/com/temp/servlet/SimpleServlet.java

    package com.temp.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class SimpleServlet extends HttpServlet {
    
        private static final long serialVersionUID = -8921022802560959642L;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            RequestDispatcher rd = req.getRequestDispatcher("WEB-INF/view/forum.jsp");
            rd.forward(req, resp);
        }
    
    }

     

    src/main/webapp/WEB-INF/view/forum.jsp

    <!DOCTYPE html>
    <html>
        <head>
            <title>forum</title>
        </head>
        <body>
            hey, there.
        </body>
    </html>

     

    启动tomcat测试一下。

     

    测试通过。

     

    在SimpleServlet的doGet()方法中,forum.jsp的<body>标签中追加一些内容来验证一下“热部署”。

        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setAttribute("random", new Random().nextInt());
            RequestDispatcher rd = req.getRequestDispatcher("WEB-INF/view/forum.jsp");
            rd.forward(req, resp);
        }

     

        <body>
            hey, there.
            <br>${random}
        </body>

     

    eclipse完成了自动编译,tomcat完成了自动部署

     

    重新访问一下http://localhost:8080/forum

     

     测试通过。

     

    测试项目部署

    由于上述配置没有变动Maven项目的Properties - Deployment Assembly中的任何配置(如下图),

    所以由项目导出的war文件应该是完全可用的,

     

    为了保障这点,通过下面的测试来确认一下。

    将项目以war文件的形式导出到重新下载的tomcat的webapps目录下,

    启动tomcat,访问localhost:8080/TempMavenApp/forum

    (重新下载的tomcat中并没有配置默认上下文,所以URL中需要提供webapp的上下文)

     

    测试通过。

     

    至此,全部配置完成。

     

  • 相关阅读:
    [leetcode]Remove Nth Node From End of List @ Python
    [leetcode]Swap Nodes in Pairs @ Python
    [leetcode]Linked List Cycle II @ Python
    [leetcode]Linked List Cycle @ Python
    [leetcode]LRU Cache @ Python
    [leetcode]Reorder List @ Python
    [leetcode]Insertion Sort List @ Python
    [leetcode]Sort List @ Python
    [leetcode]3Sum Closest @ Python
    [elk]elasticsearch实现冷热数据分离
  • 原文地址:https://www.cnblogs.com/deolin/p/6746755.html
Copyright © 2011-2022 走看看