个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【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方法
最后,程序成功执行。
注意事项
如果我们要对代码进行修改的话,我们需要重复上述的五、六、七
步骤。
好了,以上就是本文的全部内容了。希望各位友友可以一键三连哈!!!