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
-
add comfigurations
中点击左侧加号, 选择 tomcat - local 选择好tomcat; -
确认端口未被占用的情况下 , 确认访问路径;
1.6 选择部署方式和Application Context
在deployment
面板下, 选择好部署方式war_exployded, 并将 Application Context
改为 /
.
启动项目, 在浏览器输入地址和对应servlet访问路径拼接成的URL地址;
2. idea使用tomcat部署JavaWeb项目两种方式及区别
从表面来看分为两种方式:
- 手动将工程打包成war包, 然后放在webapps下, 再启动tomcat进行访问(war方式);
- 使用idea中的tomcat副本的方式直接进行部署(war_exployded);
在idea工具栏, 绿色小锤子处, add configurations
面板中, 添加tomcat后, 编辑Deployement
中可以选择war或者war_exployded任意一种.
两种方式的区别
-
war方式是将项目文件打包成war包的方式, 放在webapps下
-
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