如何使用Servlet写一个简单的网站

news2024/11/19 6:23:03

在这里插入图片描述

文章目录

  • 前言
  • 1. 创建项目
  • 2. 引入依赖
  • 3. 创建目录
  • 4. 编写代码
  • 5. 打包程序
  • 6. 部署
  • 7.验证程序
  • 将 tomcat 集成到 idea 中

前言

前面我们学习了Java中常用的 HTTP 服务器 tomcat 的安装和使用,那么今天我们将使用这个 HTTP 服务器为大家写一个简单的网站,这个网站虽然简单,就是一句简单的话,没有很复杂的逻辑,但是要想把这句话体现在网站上也不是很简单的事情。

1. 创建项目

这里我们创建的项目跟平时使用 idea 的时候有些许的不同,在这里我们要创建的是 maven 项目。

什么是 maven 呢?

Maven是一个项目构建和管理工具,它使用项目对象模型(POM)来描述项目,包括项目的结构、依赖关系、构建配置等信息。Maven提供了一组标准集合,包括构建、文档、报告、依赖管理等,可以方便地编译代码、进行依赖管理、管理二进制库等。Maven还提供了一个项目生命周期(Project Lifecycle),定义了项目的构建、测试、发布等阶段,每个阶段都有相应的插件(plugin)可以运行。

Maven的依赖管理系统可以自动下载所需的jar包,并且能够防止版本冲突。它还提供了一个仓库管理器,可以为企业组织提供可部署组织内部生成的构件的地方。此外,Maven可以与主流的IDE集成,如Eclipse、IDEA等,可以很方便地实现自动化构建和部署。

使用Maven可以将项目的版本控制在同一个地方,避免版本混乱。它还可以生成文档,并可以方便地管理文档。此外,Maven还可以方便地管理测试用例和测试报告,并与持续集成工具配合使用,实现自动化构建和部署。

Maven是一个强大的项目构建和管理工具,可以提高开发效率,简化项目管理过程,并使得项目更加可维护、可重用。

maven 优势:

  1. 项目理解:Maven能够方便地解析项目的结构,它使用标准的项目布局,可以很容易地理解项目的目录结构,对于已有的项目,Maven能够自动地抽取项目信息,这样用户不再需要花费大量的时间去理解项目的结构。
  2. 依赖管理:Maven能够管理项目的依赖,可以自动下载所需的jar包,并且能够防止版本冲突。
  3. 项目管理:Maven基于项目对象模型,可以通过一小段描述信息来管理项目的构建、报告和文档,能够很方便地管理项目报告,生成站点,管理jar文件等。
    统一的构建环境:使用Maven管理的Java项目有着相同的项目结构,所有的java代码都放在src/main/java,所有的测试代码都放在src/test/java。
  4. 插件机制:Maven的plugin比较多,可以有更多功能,现有体系比较开放,采用的技术相对比较通用和成熟,plugin的机制也可以便于我们扩展更多功能。
    仓库管理器:Maven的仓库管理器能够为组织提供可部署组织内部生成的构件的地方。
  5. 与IDE集成:Maven可以很方便地与Eclipse、IDEA这样的主流的IDE集成。
  6. 版本控制:使用Maven可以将项目的版本控制在同一个地方,避免版本混乱。
  7. 持续集成:Maven可以与持续集成工具配合使用,实现自动化构建和部署。
  8. 文档管理:Maven可以生成文档,并可以方便地管理文档。
  9. 测试管理:Maven可以方便地管理测试用例和测试报告。
  10. 发布管理:Maven可以方便地发布项目到仓库或者私有仓库。
  11. 权限管理:Maven可以与权限管理工具配合使用,实现权限控制。
  12. 日志管理:Maven可以方便地记录日志,并可以方便地查看日志。
  13. 配置管理:Maven可以方便地管理配置文件。

简单来说就是咱们写网站,文件和文件之间的依赖关系可能会很复杂,所以为了解决文件和文件之间复杂的依赖关系,我们就选择使用 maven 来为我们维护好文件之间复杂的依赖关系。

可以放心的是因为 idea 知道 maven 的这些优势,所以我们在下载 idea 的时候就自动集成了 maven,我们在创建项目的时候选择 maven 就可以了。

在这里插入图片描述

在这里插入图片描述

创建之后会形成下面这样的目录形式,并且当你第一次创建 maven 项目的时候,需要保证有一个好的网络,因为他会自动下载相关的依赖组件。

在这里插入图片描述
在这里插入图片描述

2. 引入依赖

因为 servlet 是第三方库,所以要想使用 servlet 就需要手动安装引入,这里我们可以手动下载,也可以选择让 maven 帮我们下载,我们只需要将 servlet 所在的 jar 包在哪就可以了。在 maven 中央仓库中也是有这个 servlet。

进入 maven 中央仓库,https://mvnrepository.com/

在这里插入图片描述

在上面导航栏中搜索 servlet。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
tomcat 和 servlet 的对应版本关系。
在这里插入图片描述

在找到对应的 tomcat 和 servlet 的对应关系之后,我们就将下面的这个 servlet 坐标给复制到 idea 中。

在这里插入图片描述
这里在 pom.xml 文件下创建一个 <dependencies> </dependencies>标签 然后将我们刚复制的坐标粘贴到这个标签中。

在这里插入图片描述

3. 创建目录

这里为什么还需要创建目录呢?前面我们创建 maven 项目的时候,不是自动帮我们创建目录了吗?其实前面创建的目录只是 maven 需要的目录,而 maven 项目不仅仅只是适用于 tomcat ,还适用于其他的项目,而其他有些项目在 maven 目录的基础上还需要额外的创建一些额外的目录,这里的 tomcat 就是,在 maven 目录的基础上,tomcat 对目录结构这件事上还做了其他的要求。

在 main 中创建一个 webapp 目录。
在这里插入图片描述
在这里插入图片描述

在 webapp package 下创建 WEB-INF 目录。

在这里插入图片描述
在这里插入图片描述

然后在 WEB-INF 目录下创建一个 web.xml 文件。

在这里插入图片描述

在这里插入图片描述

然后在 web.xml 文件中写入以下内容。

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

当构建完成目录结构之后,整体是这样的。

在这里插入图片描述

4. 编写代码

当完成前面的准备工作了之后,就可以编写我们的业务代码了,我们在 java 文件下创建 .class 文件。

在这里插入图片描述

在这个文件中继承 HttpServlet 父类,并且重写 doGet 方法。这个不是都是重写 doGet 方法,而是你的请求是 GET 请求就重写 doGet 方法,如果是 POST 请求,就重写 doPost 请求。

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello java");
        resp.getWriter().write("hello java");
    }
}

这里 System.out.println("hello java"); 是将结果打印在 tomcat 的控制台中,而 resp.getWriter().write("hello java"); 则是将结果显示在网页中。

当写完这些代码之后,还要注意在类的开头加上注解 @WebServlet("/hello") 这个参数必须以 / 开头,表示 HTTP 的路由配置路径,也就是我们 HTTP 请求中 URL 部分。

5. 打包程序

当写完代码之后,我们就需要将这个项目打包成 war 包,以便 tomcat 能够启动它。在打包之前,我们还需要在 pom.xml 中添加一些代码才能完成打包操作。

<packaging>war</packaging>
    <build>
        <finalName>java</finalName>
    </build>

在这里插入图片描述
双击 package 。
在这里插入图片描述

当出现 build success 说明打包成功。

在这里插入图片描述

6. 部署

打包成功会会生成一个 target 目录,我们在这个 target 目录中找到刚刚打包好的 war 包,然后进入到这个文件路径,将这个文件复制到 tomcat 的 webapps 目录下。

在这里插入图片描述
在这里插入图片描述

7.验证程序

当部署完成之后,就可以启动 tomcat 验证我们这个程序了。需要先启动 tomcat ,然后在浏览器搜索栏中输入 URL 127.0.0.1:8080/java/hello 这里,java就是我们的 war 包名,而 hello 则是我们这里的路由路径。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将 tomcat 集成到 idea 中

通过以上操作我们就可以实现一个简单的网页。但是如果我们想要更改我们的代码的话,就需要重新打包,并且重新部署,这个过程是比较麻烦的,所以是否有方法可以简化这个过程呢?答案是有的,我们可以通过 idea 插件,将 tomcat 继承到 idea 中,这样就能通过 idea 一键重新打包和部署了。

在这里插入图片描述
在这里插入图片描述
如果在 idea 中下载不了 tomcat 插件的话,我们可以直接在浏览器上下载,然后将下载的 jar 包拖入 idea,idea 会自动下载。

进入这个网站 https://plugins.jetbrains.com/idea搜索tomcat,下载就可以了。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成上面的操作之后我们就可以运行这个程序了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之输入输出重定向和管道

一、是什么 linux中有三种标准输入输出&#xff0c;分别是STDIN&#xff0c;STDOUT&#xff0c;STDERR&#xff0c;对应的数字是0、1、2&#xff1a; STDIN 是标准输入&#xff0c;默认从键盘读取信息STDOUT 是标准输出&#xff0c;默认将输出结果输出至终端STDERR 是标准错误…

新版软考高项试题分析精选(三)

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 1、项目整体管理要综合考虑项目各个相关过程&#xff0c;围绕整体管理特点&#xff0c;以下说法中&#xff0c;&#xff08; &#xff09;是不正确的。 A.项目的…

【2021集创赛】 RISC-V杯三等奖:基于E203 处理器的SM4算法硬件加速

杯赛题目&#xff1a;基于蜂鸟E203 RISC-V处理器内核的SoC设计 参赛要求&#xff1a;研究生组/本科生组 赛题内容&#xff1a; 基于芯来科技的开源蜂鸟E203 Demo SoC进行扩展&#xff0c;在限定的可编程逻辑平台上构建面向专用应用领域&#xff08;譬如人工智能、信息安全、工业…

194. 二叉树的最近公共祖先

题目 题解 递归 def lowestCommonAncestor(root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:if not root or root p or root q:return rootleft lowestCommonAncestor(root.left, p, q)right lowestCommonAncestor(root.right, p, q)if not left:return right…

2.4G射频收发芯片XL2400P,收发一体,性能优异

XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块&#xff0c;并且支持一对多组网和带 ACK 的通信模式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外围…

全志R128基础组件开发指南——图像采集

图像采集 CSI&#xff08;DVP&#xff09; 图像采集 SENSOR -> CSI 通路 CSI &#xff08;CMOS sensor interface&#xff09;接口时序上可支持独立 SYNC 和嵌入 SYNC(CCIR656)。支持接收 YUV422 或 YUV420 数据。 VSYNC 和HSYNC 的有效电平可以是正极性&#xff0c;也可…

常用网络命令(实习报告)

南京信息工程大学 实验&#xff08;实习&#xff09;报告 实验&#xff08;实习&#xff09;名称 常用网络命令 实验&#xff08;实习&#xff09;日期 2017/5/25 得分 指导教师 *** 专业 网络工程 年级 2015 班次 1 姓名 *** …

Mybatis报错找不到参数解决之编译保留参数名称

Hi, I’m Shendi Mybatis报错找不到参数解决之编译保留参数名称 需求场景 在使用 Mybatis 的过程中&#xff0c;对于函数参数&#xff0c;通常会加上 Param 注解来给参数命名&#xff0c;以让 Mybatis 找到参数。 有的时候忘记添加&#xff0c;执行时就会报找不到参数的错误&…

spring cloud之网关

Gateway网关(*) 什么是网关 # 1.说明 - 网关统一服务入口&#xff0c;可方便实现对平台众多服务接口进行管控。 - 网关 路由转发 过滤器路由转发&#xff1a;接收一切外界请求&#xff0c;转发到后端的微服务上去过滤器&#xff1a;在服务网关中可以完成一系列的横切功能&a…

学Diffusion前需要储备的一些知识点

自学Diffusion是非常困难的&#xff0c;尤其是到了VAE和VI这里基本找不到比较好的中文资料&#xff0c;甚至是涉及到一些重参数化&#xff0c;高斯混合之类的问题摸不着来龙去脉。在本文中&#xff0c;基本不会涉及公式&#xff0c;只有intuition和理解&#xff0c;如果要看公式…

Pytorch CUDA CPP简易教程,在Windows上操作

文章目录 前言一、使用的工具二、学习资源分享三、libtorch环境配置1.配置CUDA、nvcc、cudnn2.下载libtorch3.CLion配置libtorch4.CMake Application指定Environment variables5.测试libtorch 四、PyTorch CUDA CPP项目流程1.使用CLion结合torch extension编写可以调用cuda的C代…

推介会如何做好媒体宣传

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 推介会是一种专为企业、社会组织和团体、政府等提供的展示自身特点、产品和政策的活动形式&#xff0c;旨在促进交流活动&#xff0c;形成合作&#xff0c;从而带来共同利益。推介会的本…

硬盘分区后数据还能恢复吗?答案揭晓!

“前两天刚给我的电脑硬盘分了区&#xff0c;但今天在查找数据时却发现某些数据丢失了。硬盘分区导致的数据丢失还有机会找回吗&#xff1f;怎么操作呢&#xff1f;请帮帮我&#xff01;” 在使用电脑时&#xff0c;可能由于电脑需要重装系统&#xff0c;或者出现系统崩溃的情况…

天气越来越寒冷,一定要注意保暖

你们那里下雪了吗&#xff1f;听说西安已经下了今年的第一场雪&#xff0c;我们这里虽然隔了几百公里&#xff0c;但是只下雨没有下雪&#xff0c;不过气温是特别的冷&#xff0c;尤其是对我们这些上班族和上学的人而言&#xff0c;不管多冷&#xff0c;不管刮风下雨&#xff0…

InputStream和OutputStream

文章目录 &#x1f4a1;FileInputStream 构造方法&#x1f4a1;InputStream 常用方法&#x1f4a1;OutputStream 概述&#x1f4a1;OutputStream 常用方法&#x1f4a1;PrintWriter&#x1f4a1;小程序练习 使用字节流进行读/写操作时&#xff0c;是以字节为单位的&#xff1b;…

Python如何使用Matplotlib模块的pie()函数绘制饼形图?

Python如何使用Matplotlib模块的pie函数绘制饼形图&#xff1f; 1 模块安装2 实现思路3 pie()函数说明4 实现过程4.1 导入包4.2 定义一个类4.3 读取数据并处理4.4 定义饼图绘制方法 5 完整源码 1 模块安装 先安装matplotlib&#xff1a; pip install matplotlib安装numpy模块…

Pandas教程(非常详细)(第六部分)

接着Pandas教程&#xff08;非常详细&#xff09;&#xff08;第五部分&#xff09;&#xff0c;继续讲述。 三十一、Pandas Excel读写操作详解 Excel 是由微软公司开发的办公软件之一&#xff0c;它在日常工作中得到了广泛的应用。在数据量较少的情况下&#xff0c;Excel 对…

动手学深度学习——序列模型

序列模型 1. 统计工具1.1 自回归模型1.2 马尔可夫模型 2. 训练3. 预测4. 小结 序列模型是一类机器学习模型&#xff0c;用于处理具有时序关系的数据。这些模型被广泛应用于自然语言处理、音频处理、时间序列分析等领域。 以下是几种常见的序列模型&#xff1a; 隐马尔可夫模型…

忘记7-zip密码,如何解压文件?

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

字符流的讲解 以及 Reader和Writer的用法

文章目录 ❤专栏导读❤字符流❤Reader类的操作 ❤Writer类操作❤Writer类的构造方法 ❤专栏导读 &#x1f680;《多线程》 &#x1f680;《数据结构剖析》 &#x1f680;《JavaSE语法》 在Java标准库中&#xff0c;提供的读写文件的流对象有很多很多的类&#xff0c;但是可以将…