首页 > 其他分享 >Servlet原理

Servlet原理

时间:2022-12-14 09:34:45浏览次数:119  
标签:请求 tomcat Servlet 原理 servlet response out

Servlet的本质是一个Java接口,定义了一套处理网络请求的规范。

最主要的是两个生命周期方法init()和destory(),以及一个处理请求的service()。

因为处理一个网络请求,绕不开:初始化?请求处理?销毁? 这三个基本面。

其中:init()和destory()方法各自执行一次,service会在每次有新请求到来时被调用。

Servlet并不能直接和客户端打交道。

那请求是如何到达servlet的呢?答案是:servlet容器。

比如tomcat。tomcat监听端口,请求过来后,根据url信息,转发给相应servlet进行处理,servlet调用servlet的service()方法,返回response对象,tomcat再将response对象返回给客户端。

所谓的Request和Response其实是Tomcat传给的Servlet,所以servlet更偏向于业务代码。

Request和Response已经被Tomcat封装好,所以在意网络请求部分的内容,应该去看tomcat的源码。

到这里servlet的部分就已经结束了。

**当下Spring全家桶大行其道, Servlet开始退居幕后,取而代之的是更加方便的SpringMVC。而SpringMVC的核心组件DispatcherServlet其实本质就是一个Servlet。

 回顾servlet:

上述servlet相关方法的参数主要有三个:ServletConfig,ServletRequest,ServletResponse

ServletConfig:web.xml,tomcat帮我们解析了。。

ServletRequest和ServletResponse:tomcat处理并封装。其中response由tomcat转发进来是空,由servlet填充,再由tomcat返回给客户端。

 

Java Servlet封装:

浏览器发送请求基本是两种:get和post,但我们无需自行判断处理。一般是自定义一个Servlet继承HttpServlet,继承关系如图:

 因为HttpServlet已经帮我们封装好。所以自定义servlet只需关注具体业务逻辑即可。

 1 @WebServlet(name = "helloServlet", value = "/hello-servlet")
 2 public class HelloServlet extends HttpServlet {
 3     private String message;
 4     public void init() {
 5         message = "Hello World!";
 6     }
 7     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
 8         response.setContentType("text/html");
 9         // Hello
10         PrintWriter out = response.getWriter();
11         out.println("<html><body>");
12         out.println("<h1>" + message + "</h1>");
13         out.println("</body></html>");
14     }
15     public void destroy() {
16     }
17 }

 

参考文献:

An introduction to Tomcat servlet interactions

How Spring MVC Really Works 

标签:请求,tomcat,Servlet,原理,servlet,response,out
From: https://www.cnblogs.com/hangwei/p/16979151.html

相关文章

  • Glibc---__gen_tempname函数原理分析学习
    引言__gen_tempname是Glibc库stdio.h头文件中生成临时文件名的函数,包含了相关临时文件名的生成逻辑,我们来一起分析一下临时文件名的生成过程。__gen_tempname函数参数说明ch......
  • [oeasy]python0029_放入系统路径_PATH_chmod_程序路径_执行原理
    ​ 放入路径回忆上次内容上次总算可以把sleep.py直接执行了sleep.py文件头部要声明好打开方式#!/usr/bin/python3用的是python3解释sleep.py修改......
  • 协程的原理与实现
    为什么需要协程我们知道操作系统在线程等待IO的时候,会阻塞当前线程,切换到其它线程,这样在当前线程等待IO的过程中,其它线程可以继续执行。当系统线程较少的时候没有什么问题......
  • Cannot invoke “org.springframework.web.servlet.mvc.condition.PatternsRequestCon
    异常信息:Cannotinvoke“org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()”because“this.condition”isnull出现该异常......
  • 什么是 Ajax,Ajax 的原理,Ajax 都有哪些优点和缺点
    ajax是异步的js和xml,是一种创建交互式网页的开发技术,是和服务器进行异步通讯的技术;核心就是使用XMLHttpRequest向服务器发送请求获取数据;优点:页面不需要刷新,用户......
  • Servlet单表CRUD
    Servlet单表CRUD使用Servlet完成对单表的CRUD(B/S结构)实现步骤第一步:准备一张数据库表CREATETABLE`dept`( deptnointprimarykey,dnamevarchar(255......
  • ThreadLocal实现原理和使用场景
    ThreadLocal是线程本地变量,每个线程中都存在副本。实现原理:每个线程中都有一个ThreadLocalMap,而ThreadLocalMap中的key即是ThreadLocal。  内存泄漏:ThreadLocal......
  • 深入理解 Spring 事务:入门、使用、原理
    大家好,我是树哥。Spring事务是复杂一致性业务必备的知识点,掌握好Spring事务可以让我们写出更好地代码。这篇文章我们将介绍Spring事务的诞生背景,从而让我们可以更清晰......
  • ElasticSearch原理篇
    一、开篇几个问题 1、大规模数据如何检索?当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑:1)用什么数据库好?(MySQL、sybase、Oracle、达......
  • servlet原理
      service方法的两个参数,一个request接受从浏览器传过来的请求通过xml文件里指向的类里边的doget或者dopost方法接受,处理后返回一个respo参数......