【Servlet】如何编写第一个Servlet程序

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【Servlet
本专栏旨在分享学习Servlet的一点学习心得,欢迎大家在评论区交流讨论💌

Servlet是Java编写的服务器端程序,主要用于处理客户端请求和生成响应。它可以接收来自客户端(通常是Web浏览器)的请求,执行特定的任务,并返回响应给客户端。


重要的事情放前面:Servlet程序运行时,一定要保证Tomcat处于运行状态

一、创建项目

在这里插入图片描述

什么是Maven
Maven是Java中的一个构建工具。
一个程序在编写过程中往往会涉及到第三方库的依赖,同时需要对写好的程序进行一个打包部署。
Maven存在的意义就是为了能够方便的进行依赖管理打包部署
IntelliJ是Java中默认的构建工具,Gradle(安卓中会用到)同样是是Java中常见的构建工具。

在这里插入图片描述

我们来带看一下pom.xml文件
在这里插入图片描述
后续我们会根据需要会继续向pom.xml文件中放新的内容。
在这里插入图片描述

好了,以上就是创建项目的步骤,接下来我们来到下一步,即引入依赖。

二、引入依赖

当前的代码要使用Servlet开发,而Servlet并不是Java标准库自带的,所以我们需要Maven把Servlet的依赖获取到。所以我们需要找到Maven的中央仓库,然后从中央仓库中找到我们想要获取到的依赖。

中央仓库地址:https://mvnrepository.com/

来到中央仓库后,直接搜索servlet即可。
在这里插入图片描述
如上图,点击Java Servlet API后来到如下页面
在这里插入图片描述
找到3.1.0的版本,因为Tomcat和Servlet是有对应关系的:如果Tomcat使用8版本的话,那么Servlet就需要使用3.1版本。
在这里插入图片描述
在这里插入图片描述
此时IDEA就会自动的通过Maven从中央仓库下载到这里的依赖。
我们可以看到上面报红了,有可能还没有下载完(第一次使用一般会比较慢,因为要从中央仓库中下载很多的依赖),这种情况稍微等一下就好了。
但是如果等了很长时间都没有解决的话,我们就需要点击下面的刷新按钮:
在这里插入图片描述

好了,以上就是引入依赖的全过程。

三、创建必要的目录和文件

Tomcat对于Servlet项目是有一些额外的要求的。

Maven最为一个通用的工具,不仅仅可以管理Servlet项目,还可以管理其它的项目。再此基础上还需要按照Servlet项目的要求来创建出特定的目录和文件。

  • 在main目录下创建webapp目录
  • webapp目录中创建一个目录WEB-INF
  • WEB-INF目录中创建web.xml文件,web.xml文件的作用就是告诉Tomcat我这个目录中的内容是一个webapp,需要把我加载起来。

整个目录结构如下:
在这里插入图片描述
上述创建的目录结构(包括目录的名字)和文件都是固定的。

另外,我们需要在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>

这个配置文件即web.xml的作用是指定了该 Web 应用程序的基本信息和配置参数,例如,控制应用程序如何处理请求、响应、会话管理等(具体细节我们这里暂时跳过)。

上述的配置文件可能会出现如下报错,请看:
在这里插入图片描述
爆红不是我们的原因,这里直接忽略即可(并不影响程序的运行)。
解释一下:爆红的部分即"http://java.sun.com/dtd/web-app_2_3.dtd"是一个schema文件,该文件描述了xml文件的格式是怎样的(哪些标签是合法的,哪些是不合法的,以及标签之间如何进行嵌套)。

好了,以上就是创建目录结构及文件的全部内容。接下来开始正式的代码编写。

四、代码编写

  • 第一步:创建类HelloServlet,然后让该类继承HttpServlet(此类是Servlet的jar包提供的,编写Servlet程序一般都需要继承这个类——HttpServlet),如下图:

在这里插入图片描述
如果HttpServlet报红的话,可能是之前的pom.xml中的依赖没有正确引入。这是我们只需要刷新一下pom.xml文件即可。
在这里插入图片描述
在这里插入图片描述

  • 第二步:重写父类HttpServlet中的方法(doGet方法

在这里插入图片描述
在解释doGet方法之前,我们先来回顾下服务器典型的三步走流程:
①读取请求并解析请求
②根据请求计算响应
③把响应写回到客户端

好了接下来解释doGet方法:
在这里插入图片描述

doGet方法要做的事情就是根据请求(req)计算出响应(resp),所以对应的doGet方法中的代码就是根据req请求中不同的参数细节从而生成一个具体的resp对象(即往空对象中设置属性)。

然后,Tomcat就会根据这个resp响应对象转换成符合HTTP协议的响应报文并返回给浏览器。

注解(配置路由):
在这里插入图片描述
我们已经知道Tomcat会在合适的时机自动调用doGet方法,体现在两个方面:
第一个方面:根据请求方法的不同来调用不同的方法。举例:如果请求方法是GET,那么Tomcat就会在合适的时机自动调用doGet;如果请求的方法是PUT,那么Tomcat就会在合适的时机自动调用doPost。
第二个方面:请求的路径中,url后面带有层次结构的路径。一个Servlet程序中可能有多个Servlet类,这些Servlet类需要在不同的情况下被执行到。比如当请求的路径中有hello的时候,才能执行到HelloServlet的代码。当然,不同的Servlet类可以关联到不同的路径
总结:Tomcat在合适的时机自动调用Servlet的方法,根据请求的方法类型和请求的路径进行匹配,以调用对应的Servlet方法来处理请求。这样可以实现不同Servlet类在不同情况下的执行(不同的代码应用到不同的场景)。

总而言之,doGet方法就是根据请求算出响应(即服务器典型三步走的第二步,第一步和第三步由Tomcat来完成)。

以上就是代码的编写,现在问题来了,为什么没有出现main方法。
解释:Servlet程序不需要main方法。上述写的代码并不是独立的程序,而是放到Tomcat上去执行的。而main方法在Tomcat,我们写的代码比如说doGet之类的方法都是让Tomcat来调用的

五、打包程序

这里写的程序是放到Tomcat上运行,所以需要对程序进行打包。
打包成一个Tomcat能识别的包的格式,此时代码才会被Tomcat给加载起来。
打包的过程是借助Maven来完成。

在这里插入图片描述

看到如下图就说明已经打包好了。在这里插入图片描述
在这里插入图片描述
在Maven中默认打包生成的是jar包(jar包是java中常用的打包方式,jar包中就是一些.class文件),但是Tomcat需要的并不是jar包,而是war包(war包本质上和jar包差不多,war包中会包含一些前端的代码,如html、css等,以及一些Tomcat的配置(web.xml))。
所以我们需要修改配置项来让Maven打包出来的是一个war包
pom.xml文件中插入<packaging>war</packaging>即可,如下图:
在这里插入图片描述

另外,除了在pom.xml中添加packaging标签外,我们还可以添加其它标签,如下:

<build>
    <finalName>java_servlet</finalName>
</build>

在这里插入图片描述
通过finalName标签可以设置打包出来的war包的名字(不是必须的,也可以使用默认的名字)。

好了,修改了上述的配置之后,接下来我们重新打包:
在这里插入图片描述
在这里插入图片描述
可以看到上图中target目录中新打成的war包。
在这里插入图片描述
这个war包就是我们想要向Tomcat中部署的内容。

至此,打包完成,我们就可以把war包放到Tomcat中了。

六、程序部署

程序部署就是把我们刚刚打包生成的war包放到Tomcat上,具体来说就是把这个war包拷贝到Tomcat中的webapps目录中。

在这里插入图片描述
把war包复制到Tomcat中的webapps目录后,Tomcat就会识别到有新的webapp到来了,然后就会自动对这个war包进行解压缩。

下面就到了最后一步——验证程序。

七、验证程序

通过浏览器发起http get请求,触发刚刚的servlet的代码。

在这里插入图片描述
第一点:通过第一级路径(称为context path/application path)来确认要访问哪个webapp(这个路径就是war包的名字);第二点:然后通过第二级路径(称为servlet path)来访问哪一个servlet代码;第三点:然后通过方法来确定执行servlet中哪个方法。

结合上面三点就定位到了要执行的代码时doGet方法

最后,程序成功执行。

在这里插入图片描述

注意事项

如果我们要对代码进行修改的话,我们需要重复上述的五、六、七步骤。

好了,以上就是本文的全部内容了。希望各位友友可以一键三连哈!!!

在这里插入图片描述

相关推荐

  1. <span style='color:red;'>Servlet</span>

    Servlet

    2024-01-26 14:50:01      45 阅读
  2. <span style='color:red;'>servlet</span>

    servlet

    2024-01-26 14:50:01      66 阅读
  3. <span style='color:red;'>Servlet</span>

    Servlet

    2024-01-26 14:50:01      32 阅读
  4. <span style='color:red;'>Servlet</span>

    Servlet

    2024-01-26 14:50:01      35 阅读
  5. servlet

    2024-01-26 14:50:01       30 阅读
  6. <span style='color:red;'>Servlet</span>

    Servlet

    2024-01-26 14:50:01      21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 14:50:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 14:50:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 14:50:01       87 阅读
  4. Python语言-面向对象

    2024-01-26 14:50:01       96 阅读

热门阅读

  1. tmux原理及常用指令、快捷键介绍

    2024-01-26 14:50:01       59 阅读
  2. MySQL ORDER BY 实现原理

    2024-01-26 14:50:01       54 阅读
  3. 基础前端知识第一期:DIV 标签

    2024-01-26 14:50:01       54 阅读
  4. 大数据量分页优化,应对PageHelper

    2024-01-26 14:50:01       50 阅读
  5. 常见的前端打包构建工具有哪些

    2024-01-26 14:50:01       50 阅读
  6. 指针与引用的区别

    2024-01-26 14:50:01       53 阅读
  7. 前端同时上传json对象和MultipartFile文件

    2024-01-26 14:50:01       52 阅读
  8. React 表单、处理受控表单组件、非受控组件

    2024-01-26 14:50:01       46 阅读
  9. Nginx

    Nginx

    2024-01-26 14:50:01      36 阅读
  10. 前端demo: 将传入文件压缩到不超过指定大小(M)

    2024-01-26 14:50:01       53 阅读
  11. ubuntu 22.04 怎么安装websocat

    2024-01-26 14:50:01       56 阅读
  12. 【git】记录一个git error解决方法

    2024-01-26 14:50:01       55 阅读
  13. js中将回调地狱改装成promise方式的函数

    2024-01-26 14:50:01       54 阅读
  14. C语言sizeof 不是函数吗?

    2024-01-26 14:50:01       45 阅读
  15. YAML语法记录

    2024-01-26 14:50:01       57 阅读