JavaWeb项目在idea中的部署及部署方式异同

浅知拙见, 欢迎指正和交流!

1. 基于servlet和tomcat在idea中实现的web项目helloworld

项目目录结构如下

1.1 创建工程, 引入web项目模板

1.2 引入servlet-api的依赖

1.3 编写HelloServlet

package com.xy.javaweb.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;


public class HelloServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response){

        try {
            response.getWriter().println("<h1>Hello Servlet!</h1>");
            response.getWriter().println(new Date().toLocaleString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

1.4 web.xml中添加HelloServlet的对应映射

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <!--    这里是对应Servlet的全类名 参考包名路径-->
        <servlet-class>com.xy.javaweb.servlet.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
</web-app>

1.5 部署到tomcat

  1. add comfigurations 中点击左侧加号, 选择 tomcat - local 选择好tomcat;

  2. 确认端口未被占用的情况下 , 确认访问路径;

1.6 选择部署方式和Application Context

deployment 面板下, 选择好部署方式war_exployded, 并将 Application Context 改为 / .

启动项目, 在浏览器输入地址和对应servlet访问路径拼接成的URL地址;

2. idea使用tomcat部署JavaWeb项目两种方式及区别

从表面来看分为两种方式:

  1. 手动将工程打包成war包, 然后放在webapps下, 再启动tomcat进行访问(war方式);
  2. 使用idea中的tomcat副本的方式直接进行部署(war_exployded);

在idea工具栏, 绿色小锤子处, add configurations 面板中, 添加tomcat后, 编辑Deployement 中可以选择war或者war_exployded任意一种.

两种方式的区别

  1. war方式是将项目文件打包成war包的方式, 放在webapps下

  2. war_exployded方式则是启动tomcat实例后, 以配置文件的形式指向项目编译后的目录(这种方式亦称为热部署)

1. IDEA中整合了Tomcat,会拷贝tomcat的三个文件夹做副本,三个文件夹分别是,conf,work,log,没有webapps,因为IDEA部署项目用了方式二,即在conf中增添项目的配置文件来部署

2. servletContext.getContextPath()获取到的是配置文件中的path值,即该项目部署后对外提供的访问路径

3. servletContext.getRealPath("/")获取到的是配置文件中的docBase值,即被部署的这个项目在电脑磁盘中的物理位置(不一定在tomcat文件夹下,可以在任意位置,IDEA中部署的项目都在D:\IDEA_workspace\JavaWeb\out\artifacts\位置下,其中D:\IDEA_workspace\JavaWeb是博主的IDEA工作空间,即存放源代码的地方)

4. 综上所述,"/" 就是 对应该项目工程在电脑磁盘中的物理位置,又因为 "/"被服务器解析为 http://ip:port/工程路径/ ,所以通过http://ip:port/工程路径/ 是直接访问到项目在磁盘中的物理位置

5. 在IDEA中,模块下的src中的源代码,编译后会存放在web/WEB-INF/classes下,部署时是将web文件夹进行部署(其中包括src的源代码编译形成的class文件),源代码没部署

6. "/"对应 http://ip:port/工程路径 , 工程路径(即配置文件的path值) 对应 配置文件的docBase指向的物理位置 , 物理位置下的文件夹 对应 IDEA编写的模块中的web目录下的资源 , 因此,"/"(即http://ip:port/工程路径) 对应IDEA模块下的web目录.
————————————————
版权声明:本文为CSDN博主「阿龟在奔跑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43719791/article/details/120240564
posted @ 2022-10-08 20:39  疯一风  阅读(315)  评论(0编辑  收藏  举报