一文带你了解什么是 Servlet

介绍

Servlet是文带在服务器端运行的Java程序,可以接收客户端请求并做出响应 ,文带是文带基于 Java 技术的 web 组件,该组件由容器托管,用于生成动态内容。他是文带用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据  ,文带生成动态Web内容。文带

servlet说实在点就是文带个接口,浏览器发送请求给Tomcat(服务器) ,文带若是文带这个请求正好对应了servlet实现类的源码库请求路径 ,Tomcat就会使用它来响应浏览器 ,文带这也就是文带request(请求) 、response(响应)了 。文带

复制public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1,文带 ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy(); }1.2.3.4.5.6.7.8.9.10.11.

servlet有5个方法 。

执行流程

图片

浏览器发出 http://localhost:8080/web-demo/demo1 请求 ,文带从请求中可以解析出三部分内容,文带分别是localhost:8080、web-demo 、demo1:

a.根据localhost:8080可以找到要访问的Tomcat Web服务器

b.根据web-demo可以找到部署在Tomcat服务器上的web-demo项目

c.根据demo1可以找到要访问的是项目中的香港云服务器哪个Servlet类 ,根据@WebServlet后面的值进行匹配

找到ServletDemo1这个类后 ,Tomcat Web服务器就会为ServletDemo1这个类创建一个对象  ,然后调用对象中的service方法ServletDemo1实现了Servlet接口  ,所以类中必然会重写service方法供Tomcat Web服务器进行调用service方法中有ServletRequest和ServletResponse两个参数,ServletRequest封装的是请求数据 ,ServletResponse封装的是响应数据  。

那么Servlet由谁创建?

Servlet方法由谁调用? Servlet由web服务器创建 ,Servlet方法由web服务器调用  。

服务器怎么知道Servlet中一定有service方法?

因为自定义的源码下载Servlet,必须实现Servlet接口并复写其方法 ,而Servlet接口中有service方法。这就是接口的规范

生命周期

生命周期就是指对象在被创建到销毁的整个过程

Servlet运行在Servlet容器(web服务器)中 ,其生命周期由容器来管理  ,分为4个阶段 :

加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象 。

a.loadOnstartup的取值有两类情况:

b.负整数:第一次访问时创建Servlet对象

c.0或正整数:服务器启动时创建Servlet对象 ,数字越小优先级越高

默认情况,Servlet会在第一次访问被容器创建 ,模板下载但是如果创建Servlet比较耗时的话,那么第一个访问的人等待的时间就比较长 ,用户的体验就比较差 ,可以修改loadOnStartup配置 -> @WebServlet(urlPatterns = "/demo1",loadOnStartup = 1)初始化:在Servlet实例化之后  ,容器将调用Servlet的 init() 方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次 。请求处理 :每次请求Servlet时,云计算Servlet容器都会调用Servlet的 service() 方法对请求进行处理。 service方法在Servlet被访问的时候调用,每访问1次就调用1次服务终止 :当需要释放内存或者容器关闭时 ,容器就会调用Servlet实例的 destroy() 方法完成资源的释放。在destroy()方法调用之后  ,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收 。 destroy() 方法只调用一次。

HttpServlet

前端发送GET和POST请求的时候 ,参数的免费模板位置不一致 ,GET请求参数在请求行中 ,POST请求参数在请求体中 ,为了能处理不同的请求方式 ,得在service方法中进行判断,然后写不同的业务处理 。但是每个Servlet类中都将有相似的代码 ,因此就有了HttpServlet,来简化代码开发  。

编写Servlet类的时候,只需要继承MyHttpServlet ,重写父类中的doGet和doPost方法,就可以用来处理GET和POST请求的业务逻辑。

和MVC的对比

Spring MVC 和 Servlet 都是 Java Web 开发中常用的技术,它们之间的区别在于:

Spring MVC 是基于 Servlet 的框架,它提供了一种 MVC(Model-View-Controller)的架构模式来帮助组织代码 ,简化开发。而 Servlet 则是 Java Web 应用程序的基础 ,它允许 Java 开发人员处理 HTTP 请求和响应 。Spring MVC 框架提供了更加强大、灵活的控制器(Controller)层,支持不同的数据绑定 、校验等功能,同时也提供了 AOP 、IOC 等企业级特性。而 Servlet 只提供了基本的请求处理和转发功能  。Spring MVC 对前端技术支持更加友好 ,如内置 JSP 标签库 、支持 RESTful 架构等 。

Spring MVC 相比于 Servlet 的优势:

MVC模式 :Spring MVC 提供了基于 MVC 模式的架构,可以将应用程序分为模型(Model)、视图(View)和控制器(Controller) ,使代码更容易组织 、维护和测试 。而 Servlet 则需要手动处理请求和响应  ,代码比较混乱。易于扩展:Spring MVC 借助 Spring Framework 强大的 DI(依赖注入)和 AOP(面向切面编程)特性 ,更容易进行扩展和定制 。开发人员可以轻松地添加新的拦截器(Interceptors)  、过滤器(filters)等功能  。而在Servlet中,需要手动开发这些功能,增加了开发难度和工作量 。更好的灵活性:Spring MVC 支持多种视图技术 ,包括 JSP、FreeMarker 、Velocity、Thymeleaf 等。并且支持 RESTful 架构, 可以方便地创建 REST 风格的应用程序 。而Servlet通常使用JSP或者HTML进行前端展示。更好的测试性:Spring MVC 代码更容易进行单元测试  ,开发人员可以通过模拟请求来测试控制器的行为。而在 Servlet 中,由于代码比较混乱 ,测试方法也会比较复杂。更好的错误处理机制 :Spring MVC 提供了更好的异常处理机制 ,可以集中处理应用程序中出现的各种异常 ,而Servlet则需要手动捕捉和处理异常 。
滇ICP备2023006006号-38