【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也比较适配,真的要快速追赶式学习,在迎接最新的框架和技术时又要做好原理的沉淀,凡事多问几个为什么。

相关文章
|
1月前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
120 6
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
92 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
1月前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
2月前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
41 6
|
2月前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
107 1
|
1月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
67 0
|
2月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
490 1
|
2月前
|
Java Linux Maven
IDEA如何用maven打包(界面和命令两种方式)
【10月更文挑战第14天】本文介绍了两种Maven项目打包方法:命令行与IDEA界面。首先确保已安装Maven并配置环境变量,通过`mvn -v`检查安装。命令行打包需进入项目目录,执行`mvn package`,之后在`target`目录查看结果。IDEA打包则需配置Maven路径,打开Maven Projects窗口,双击Lifecycle下的`package`阶段,同样在`target`目录查找生成文件,并在Build窗口查看日志以排查问题。
1364 1
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
169 3
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
184 45