【Java Web编程 二】第一个Java Web项目(Idea2021+Maven3+Tomcat8+JDK8)

简介: 【Java Web编程 二】第一个Java Web项目(Idea2021+Maven3+Tomcat8+JDK8)

接下来我们基于这样的组合工具来创作第一个Java Web项目,在这个过程中由于不熟悉Idea和Maven自身的强大功能,走了很多弯路,这里把这些弯路都总结一下,输出一篇较为正确的第一个项目:

安装与配置

首先需要进行组合套件的安装与配置,因为我之前写过类似的文章,这里就不再重复了,针对当前的组合套件来进行一个介绍:(Idea2021+Maven3+Tomcat8+JDK8)

好的,所有的套件组装完毕了,让我们接下来创建第一个Java Web项目并且明确一些注意事项

Java Web创建

包括创建新项目,Tomcat的一些配置疑惑,以及Maven去哪里了?

创建新项目

点击新建项目创建一个新的project,点击【New Project】开始创建第一个项目,并且为这个项目的组成方式选择配置:

选择要构建的项目的一些必须属性,例如我们通过Maven来构建这个Java Web项目,就按照如下的方式去选择,当然你也可以通过Gradle去构建,这里我们选择Maven;同时这里的服务器是我们本地安装好的,选中即可。

接下来是我们项目可以选择的额外装配内容,这里我们暂时都不选择,需要的时候再通过Maven引入即可:

这样一个项目已经构建完了,构建完成的目录如下:

项目目录结构

因为是依据Maven构建的,所以也是用的Maven的经典目录结构,详细我会在Maven的一篇专题Blog中具体介绍,敬请期待,这里简单的说明下:

再来看看部署后的文件:

而WEB-INF下存放编译后的Servlet文件和web配置文件:

配置Tomcat服务器

我们需要调整一下Tomcat的默认配置来让我们的项目运转的更舒服,让我们解决以下几个问题:

解决URL路径和项目名称不符问题

首先我们需要调整一下请求的URL路径名称,这样我们在浏览器里就不必输入较为长的Tomcat默认附加的奇怪地址:

解决JSP修改后需要重启服务器问题

接下来我们打开Tomcat热部署,这样每次JSP的调整都不需要重启服务器了,会自动的生效。同时我们还需要设置Tomcat所有项目部署,这样的好处是所有部署在Tomcat上的项目启动时都可以同时使用了

这里顺便提一下两种部署模式:

  • war模式这种可以称之为是发布模式,就是先将WEB工程打成war包,然后再将其上传到服务器进行发布
  • war exploded模式是将WEB工程以当前文件夹的位置关系上传到服务器,即直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来.

同时需要注意需要设置Tomcat所有项目部署,这里的勾选指的是会连同:TOMCAT_HOME\webapps下的项目一起部署。如果不勾选,那么甚至连localhost的主页都不会显示,因为它会遵循配置寻找自己要部署的项目,下面将会聊到:

解决tomcat的webapps目录下找不到项目的问题

最后我们要设置Web部署包的输出目录,Idea对tomcat的操作是这样的,默认设置输出的部署地址:

每次在IDEA启动Tomcat的时候Idea会在一个默认的地址为我们生成一个包含Tomcat全部配置拷贝的Tocat副本:

C:\Users\13304\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat

在这个拷贝下我们可以找到当前项目的配置文件,该配置文件描述了tomcat该如何找到当前的部署地址:

\522868f8-acc6-45a8-8ea9-753cc1111423\conf\Catalina\localhost

这样当tomcat启动时通过配置文件找到真实的项目输出位置,启动项目,为了解决这个问题,让我们所有的项目不必依赖idea而启动我们需要修改项目地址,修改为安装的tomcat的webapps下:

这样当我们运行项目后就能找到了:

当然这个属于历史服务器默认配置tomcat没有办法的办法,如果我们依然想使用idea默认的方式也可以,但是其中的原理还是要理解一下的,即tomcat依据配置路径去寻找部署包并运行。

WEB-INF下的lib目录去哪了

我们知道标准的Java EE构建在web-inf下会有lib,文件夹里会存放我们的包依赖,但是从这里我们却没有找到lib,这是因为Maven已经接管了我们的包管理,无需自己再进行手动装配和引入依赖了,这就是Maven最大的优势啊,还搞神秘lib目录?

配置Maven包管理器

我们先来找到Maven并修改一些配置,保证项目可用。关于Maven的详细介绍,可以看我的这个目录:Maven的基本概念和基本功能

Maven安装在哪

我们可以看到,到现在为止并没有安装任何的Maven,那是因为Idea依据帮我们集成了,版本默认是3.6.3,本地仓库默认放到了用户文件夹下。

添加Maven的依赖

为了能让JSP能正常运行,我们后续能够引入Java代码使用,我们需要修改Maven的pom.xml文件引入相关依赖:

<dependencies>
        <!--引入servlet相关依赖,https://repo.maven.apache.org/maven2/javax/servlet/servlet-api/-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!--引入jsp相关依赖,https://repo.maven.apache.org/maven2/javax/servlet/jsp/jsp-api/-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.2.1</version>
            <scope>provided</scope>
        </dependency>
        <!--引入junit测试引擎相关依赖-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

如果没有引用,很有可能报如下错误:

编辑项目并启动

查看和编辑下JSP和Servlet文件,启动查看显示。

编辑JSP&Servlet文件

首先我们看到有个入口的index.jsp程序,这个文件是我们的首页文件,在首页文件我们能调整页面显示的文字等:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">我的第一个JavaWeb项目</a>
</body>
</html>

然后我们可以看到一个默认的Servlet文件,可以看到接收的是一个Get请求

package com.example.FirstJavaWeb;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    private String message;
    public void init() {
        message = "Hello World!";
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }
    public void destroy() {
    }
}

关于JSP和Servlet,之后的文章里详细介绍,这里有个概念即可。

启动服务器并在浏览器查看

然后我们启动服务器,访问我们的URL路径来查看启动的JSP:

总结一下

这是我这几天实践的一点感悟,工具更新了,时代变了,最好的方式就是拥抱变化,不要再停留在MyEclipse时代,不要再停留在固有的历史的web结构和古早的实现方式,技术变化太快了,idea真是yyds,可以让我们专注业务开发,组件全部集成,看来还是要不断学习才能赶上技术的变化,至于为什么还是用tomcat8和JDK8,是因为生产环境目前还是jdk8,tomcat8也比较适配,真的要快速追赶式学习,在迎接最新的框架和技术时又要做好原理的沉淀,凡事多问几个为什么。

相关文章
|
6月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
649 1
|
7月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
2302 1
|
6月前
|
IDE 安全 Java
Lombok 在企业级 Java 项目中的隐性成本:便利背后的取舍之道
Lombok虽能简化Java代码,但其“魔法”特性易破坏封装、影响可维护性,隐藏调试难题,且与JPA等框架存在兼容风险。企业级项目应优先考虑IDE生成、Java Records或MapStruct等更透明、稳健的替代方案,平衡开发效率与系统长期稳定性。
437 115
|
7月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
815 64
|
6月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
8月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
698 0
|
8月前
|
人工智能 安全 Java
掌握Java反射:在项目中高效应用反射机制
Java反射是一种强大功能,允许程序在运行时动态获取类信息、创建对象、调用方法和访问字段,提升程序灵活性。它在框架开发、动态代理、注解处理等场景中广泛应用,如Spring和Hibernate。但反射也存在性能开销、安全风险和代码复杂性,应谨慎使用。
176 0
|
5月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
507 4
|
9月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
9月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。

推荐镜像

更多