介绍
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个方法 。
执行流程
图片
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则需要手动捕捉和处理异常 。