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的上下文)

     

    测试通过。

     

    至此,全部配置完成。

     

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/deolin/p/6746755.html
Copyright © 2011-2022 走看看