目录
一、Servlet是什么
二、第一个Servlet项目
2.1 创建Maven项目
2.2 引入Servlet依赖
2.3 创建目录
三、Servlet启动
3.1 编写代码
3.2 打包程序
3.3 部署程序
四、更便捷的部署方式
4.1 安装Smart Tomcat插件
一、Servlet是什么
Servlet 是一种实现动态页面的技术。是一组 Tomcat 提供的 API,实现简单高效的开发一个 web app。Servlet主要做的工作:
- 允许注册一个类,在 Tomcat 收到某个特定的 HTTP 请求的时候,执行这个类中的一些代码。
- 解析 HTTP 请求,把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象。
- 构造 HTTP 响应。程序猿只要给指定的 HttpResponse 对象填写一些属性字段, Servlet就会自动的按照 HTTP 协议的方式构造出一个 HTTP 响应字符串,并通过 Socket 写回给客户端。
简而言之,Servlet 是一组 Tomcat 提供的 API,让程序猿自己写的代码能很好的和 Tomcat 配合起来,从而更简单的实现一个 web app。而不必关注 Socket,HTTP协议格式,多线程并发等技术细节,降低了 web app 的开发门槛,提高了开发效率。也就相当于一个小框架。
二、第一个Servlet项目
要使用Servlet的话就需要先创建一个Maven项目,Maven项目可以快速导入依赖,也能快速打包,
这里使用IDEA(2021版)来创建一个Maven项目,对于其他版本应该是差不多的方式
2.1 创建Maven项目
1) 菜单 -> 文件 -> 新建项目 -> Maven
2) 选择项目要存放的目录
3)点击Finish,一般右下角会弹出以下对话框。选择 Enable Auto-Import,第一次创建Maven项目时,是需要引入许多依赖文件的,可能会有点耗时。如果引入失败建议多尝试两次,如果还是不行的话建议更换国内镜像源!
2.2 引入Servlet依赖
项目创建完成之后,会自动生成一个pom.xml文件,我们需要在这个文件中引入Servlet的相关依赖文件,也就是Servlet API依赖的jar包
1)在中央仓库搜索“Servlet”,选择第一个点击进入
对于版本的选择是很重要的,Servlet的版本是要和Tomcat相匹配的,如果不知道使用什么版本建议上官网查询http://tomcat.apache.org/whichversion.html(不要问为什么知道,问就是版本没搞对拜拜浪费一天时间)这里Tomcat如果是8.几版本的话直接选择这个3.1.0
2)点击进入之后,不要再去下载jar包了,这里直接使用Mevean导入依赖,将依赖复制到pom.xml文件中
3)导入依赖的时候要注意先建立一个<dependencies>,以后所有的依赖都放入这里就行了
<dependencies> 标签内部放置项目依赖的 jar 包。maven 会自动下载依赖到本地。
2.3 创建目录
当项目创建好的时候,其实IDEA会自动创建一些目录。例如:
这些目录在实现一个web app还不够,这时还需要创建一些新的目录/文件
1)main目录下新建一个webapp(注意名字不可错)目录与java目录并列,右键点击main目录选择创建新目录
2)在webapp目录下创建新的目录 WEB-INF 目录(注意名字不可错)
3) 在WEB-INF目录中创建文件web.xml这是必须的
4)将以下代码复制到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>
- webapp 目录就是未来部署到 Tomcat 中的一个重要的目录。当前我们可以往 webapp 中放一些静态资源,比如 html ,css 等.
- 在这个目录中还有一个重要的文件 web.xml。Tomcat 找到这个文件才能正确处理 webapp 中的动态资源
三、Servlet启动
3.1 编写代码
在java目录下创建一个类,这个类继承自HttpServlet,如果这里的HttpServlet爆红的话可能是依赖还没有完全导入,这时需要刷新一下Maven
- 在这个类上方加上 @WebServlet("/hello") 注解,表示 Tomcat 收到的请求中,路径为 /hello的请求才会调用 HelloServlet 这个类的代码。 (这个路径未包含 Context Path)
- 重写 doGet 方法。doGet 的参数有两个,分别表示收到的 HTTP 请求和要构造的 HTTP 响应。这个方法会在 Tomcat 收到 GET 请求时触发
- HttpServletRequest 表示 HTTP 请求。Tomcat 按照 HTTP 请求的格式把 字符串格式 的请求转成了一个 HttpServletRequest 对象。后续想获取请求中的信息(方法,url,header,body 等) 都是通过这个对象来获取。
- HttpServletResponse 表示 HTTP 响应。代码中把响应对象构造好(构造响应的状态码,header,body 等)
- resp.getWriter() 会获取到一个流对象,通过这个流对象就可以写入一些数据,写入的数据会被构造成一个 HTTP 响应的 body 部分,Tomcat 会把整个响应转成字符串,通过 socket 写回给浏览器
3.2 打包程序
1)使用 maven 进行打包。打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口,如果看不到的话,可以通过 菜单 -> View -> Tool Window -> Maven 打开)然后展开 Lifecycle ,双击 package 即可进行打包。
打包成功,就会显示一个 build success
打包成功后可以发现这个项目的右边出现了一个target目录,并且生成了一个jar包
2)但是这个jar包不是我们需要的(项目打包需要的是war包),并且这个名字也有点复杂。通过在pom.xml文件中修改依赖,来达到需要的效果。添加完了依赖之后再重复1)过程打包
再次打包就可以得到想要的了
3.3 部署程序
1)将war包拷贝到Tomcat的webapps中,启动Tomcat时会自动解压缩war包
这里就会发现Tomcat自动解压了war包
2)启动Tomcat,并验证程序,访问127.0.0.1:8080/HelloServlet/hello ,这里就可以看到结果了
注意: URL 中的 PATH 分成两个部分,其中 HelloServlet 为 Context Path,hello 为 Servlet Path(其中Context Path是打包的文件名)
四、更便捷的部署方式
我们发现如果每次进行代码更改都要重新打包的话,那这样未免也太麻烦了,所以这里在项目编写的过程中推荐使用IDEA中的插件,但是最后在部署的时候还是要进行打包
4.1 安装Smart Tomcat插件
1) 菜单 -> 文件 -> Settings
2)安装好之后,最后只要配置一下就可以使用了
3)配置完成之后,就可以在IDEA中一键运行项目了(这里开始运行之前要先关闭之前的Tomcat)
没有报错的就说明已经运行成功了
访问 localhost:8080/test/hello,这里我没有更改Context path,所以默认的是文件名test,这里如果更改了的话就需要写成自己更改的路径
到这里Servlet的第一个程序就已经完成了