什么是servlet
Java官方规定的web开发的api(规范)。
网络编程对于客户端和服务端:
两端使用支持网络编程的语言,就能实现网络编程(网络通信)
但是应用层协议,还是需要应用程序自己来进行封装和分用。
对于hhtp协议:
- 客户端:基于浏览器可以省略程序自己封装分用http数据的步骤(浏览器会帮助我们进行封装和分用);
- 服务端:基于web服务器(部署网站,对应省略http协议处理的逻辑)也可以类似的省略封装和分用的步骤。
对于web服务器,有多种产品(支持多种编程语言),支持Java语言的,对应也有多种产品。对以一个Java开发的网站,可以运行在这些支持Java语言的不同web服务器上,就需要满足一定的规范,这个规范就是servlet。
总结:
- web服务器:针对所有编程语言,能运行网站系统的服务器程序;
- servlet容器:运行Java开发的网站(Java开发的网站就一定使用了servlet技术);
- servlet:Java官方规定的web开发的api规范。
一个完整的servlet程序
(1)创建一个maven项目
(2)引入依赖
项目创建完成后,会自动生成一个pom.xml文件。我们需要在该文件中引入servlet依赖包。需要注意以下事项:
(3)创建目录
项目创建好之后,idea会帮我们自动创建一些目录(我们还需要自己配置一个webapp目录):
- src:表示源代码所在的目录;
- main/java:源代码的根目录;
- main/resources:项目的一些资源文件所在的目录;
- test/java:测试代码的根目录。
此外,我们还需要创建一些新的目录:
在main目录下,和Java目录并列,创建一个webapp目录,webapp目录内部再创建一个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>
- webapp目录是未来部署到Tomcat中的一个重要的目录,可以在其中放一些静态的文件(html,css等);
- web.xml文件:Tomcat找到这个文件才能正确处理webapp中的动态资源。
(4)编写servlet代码
开发servlet的步骤(java目录下):
- 类注解@WebServlet:字符串必须以/开头,一个项目可以开发多个servlet,但是其路径必须唯一;
- 继承HttpServlet;
- 重写doXXX方法,XXX表示提供的方法。(常见doGet、doPost)
【1】获取请求信息:通过servlet规定的api,HttpServletRequest方法参数对象;
【2】进行一些逻辑操作:比如数据库的操作等;
【3】获取响应信息:通过servlet规定的api,HttpServletResponse方法参数对象。
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello world");
}
}
(5)打包程序
使用maven进行打包,找到项目目录下的Lifecycle的package双击即可,一定要出现success才算打包成功。打包成功后会在target目录下生成一个war包。
(6)部署
将war文件复制到tomcat/webapps目录下。
(7)运行
通过tomcat来运行网站。
补充
可以看到我们打包的war包名称很长,而且其中包含版本号,牵涉到版本更新的时候比较麻烦,所以我们可以使用以下代码配置文件名。
<build>
<!-- 最终打包的文件名,建议配置 -->
<finalName>servlet-demo</finalName>
</build>
部署方式
对于上面的部署方式,手动将war包拷贝到webapps目录下比较麻烦,我们可以使用idea中的Smart Tomcat插件更方便的完成部署。
(1)安装smart插件
按照以下步骤安装Smart Tomcat插件:
(2)配置Smart Tomcat插件
找到右上角Add:
进行如下配置:
访问出错的情况
404
表示用户访问的资源不存在。大部分情况是URL的路径有问题。
注意请求路径的写法:
如下,缺少上下文路径:
405
表示对应的HTTP请求方法没有实现。
如下,将上面的servlet程序的重写的doGet方法改为doPost方法(通过地址栏访问使用的是get方法):
500
往往是servlet代码中抛出异常导致。
如下,修改servlet代码,使其抛出异常,访问时HTTP状态码为500:
Servlet运行原理
Servlet容器(tomcat等运行Java网站的web服务器)和Servlet:容器管理整个Servlet的生命周期。
- Tomcat的代码中内置了main方法。我们启动Tomcat时,就是从Tomcat的main方法开始执行的;
- 类@WebServlet注解修饰的类会在Tomcat启动的时候被获取到,并集中管理;
- Tomcat通过反射来创建被注解修饰的类的实例;
- 这些实例被创建完之后,会调用init()方法进行初始化;
- 这些势力被销毁之前,会调用destory()方法进行收尾工作;
- Tomcat为了能同时相应多个HTTP请求,采取了多线程的方式实现。
处理请求的时候,根据请求路径(url)找到对应的servlet对象。
servlet三大生命周期方法:
- init():初始化方法,实例化对象之后,执行一次;
- service():每次请求,执行一次;
- destory():销毁方法,只执行一次。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
servlet三大生命周期方法:
- init():初始化方法,实例化对象之后,执行一次;
- service():每次请求,执行一次;
- destory():销毁方法,只执行一次。
[外链图片转存中…(img-YG7BI9SD-1714712299550)]
[外链图片转存中…(img-eGSoWo2j-1714712299551)]
[外链图片转存中…(img-r5nbC8If-1714712299551)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新