当前位置: 首页 > news >正文

Servlet详解

目录
  • Servlet详解
    • tomcat怎么去调用servlet的,怎么去传递request和response的。
    • socket实现和Tomcat实现
      • Servlet的底层真相
      • Servlet开发者视角
      • 封装的核心思想
        • 对请求的封装(HttpServletRequest)
        • 对响应的封装(HttpServletResponse)
      • Servlet规范的伟大之处
      • Servlet容器的职责
      • 一句话总结

Servlet详解

Servlet全解(一篇就够)-CSDN博客

Servlet 规范发展:
Servlet 2.5 (2005) → Servlet 3.0 (2009) → Servlet 3.1 (2013) 
→ Servlet 4.0 (2017) → Jakarta Servlet 5.0 (2020)

image-20260129141158870

Servlet生命周期

public class ServletDemo1 implements Servlet {//Servlet对象倍实例化的时候init方法就会执行,而且只执行一次。(Servlet是单例)@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("ServletDemo1 实例化");}//Service方法:任何一次请求都会执行service方法,可以执行多次@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("ServletDemo1 执行");}//Servlet从服务器中移除或服务器关闭的时候销毁Servlet,只执行一次@Overridepublic void destroy() {System.out.println("ServletDemo1 销毁");}
}

tomcat怎么去调用servlet的,怎么去传递request和response的。

解答:tomcat中:servlet引擎解析请求,看是不是第一次,是就执行初始化方法,并且根据web.xml的配置创建servletconfig对象,然后通过init方法传递到servlet里面去。不是第一次就调用service方法,并创建request对象和空的response对象,传递到servlet的service方法里。

socket实现和Tomcat实现

Tomcat - 如何设计一个简单的web容器 | Java 全栈知识体系

总结:关于servlet的真相就是,socket连接成功后,socket.getInputStream()封装到HttpRequest,socket.getOutputStream()到HttpResponse,然后传递给对应的servlet的service方法里面,这样就封装好了,servlet只需要关注业务。

Servlet的底层真相

// Tomcat/Nginx等Web服务器的处理流程
while (true) {// 1. 接受socket连接Socket socket = serverSocket.accept();// 2. 获取输入输出流InputStream input = socket.getInputStream();OutputStream output = socket.getOutputStream();// 3. 封装成HTTP对象(核心步骤!)HttpServletRequest request = new HttpServletRequestImpl(input);HttpServletResponse response = new HttpServletResponseImpl(output);// 4. 找到对应的ServletServlet servlet = findServletByUrl(request.getRequestURI());// 5. 调用Servlet的service方法servlet.service(request, response);  // 这是关键!// 6. 关闭连接socket.close();
}

Servlet开发者视角

// 开发者只需要关心业务逻辑
public class MyServlet extends HttpServlet {// 完全不用管socket、inputstream等底层细节protected void doGet(HttpServletRequest request, HttpServletResponse response) {// 直接使用封装好的request获取参数String username = request.getParameter("username");// 直接使用response写响应response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<h1>Hello " + username + "</h1>");// 不需要手动关闭流,容器会处理}
}

封装的核心思想

对请求的封装(HttpServletRequest)
  • 原始数据socket.getInputStream() 获取的字节流
  • 封装后:提供 getParameter()getHeader()getSession() 等方便的方法
  • 实现方式:解析HTTP协议头,解析URL参数,解析Cookie等
对响应的封装(HttpServletResponse)
  • 原始数据socket.getOutputStream() 获取的字节流
  • 封装后:提供 setContentType()getWriter()sendRedirect() 等方法
  • 实现方式:自动添加HTTP响应头,处理编码,管理缓冲等

Servlet规范的伟大之处

// 对比:没有Servlet框架的原始代码
public void handleRequest(Socket socket) {try {BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream());// 手动解析HTTP请求String line;while ((line = in.readLine()) != null && !line.isEmpty()) {// 解析请求行、请求头...}// 手动构造HTTP响应out.println("HTTP/1.1 200 OK");out.println("Content-Type: text/html");out.println();out.println("<html><body>...</body></html>");in.close();out.close();socket.close();} catch (IOException e) {e.printStackTrace();}
}

Servlet容器的职责

  1. 网络通信:监听端口,管理socket连接池
  2. 协议解析:解析HTTP请求,封装成对象
  3. 生命周期管理:Servlet的初始化、销毁
  4. 线程管理:为每个请求分配线程
  5. 会话管理:维护HttpSession
  6. 资源管理:处理静态资源,JSP编译等

一句话总结

Servlet容器把复杂的网络编程和HTTP协议解析封装起来,让开发者只需要关心业务逻辑,通过简单的API就能处理HTTP请求和响应。

这就是为什么你只需要写 doGet()doPost() 方法,就能轻松开发Web应用的原因!

http://www.jsqmd.com/news/381911/

相关文章:

  • 2026年离心/超细/隔音/复合/保温/铝箔/耐高温玻璃棉板推荐:廊坊展航实力之选 - 品牌推荐官
  • 从“图像视频编码”到“通信物理层”
  • 2026年隔离桩生产厂家推荐:郑州奉合添工不锈钢制品有限公司,全材质全系列隔离桩专业供应 - 品牌推荐官
  • 2026年二手工业设备推荐:唐山明科电源设备厂二手电炉/冷却塔/变压器等全品类供应 - 品牌推荐官
  • 2026年油气回收设备推荐:山东昶拓环保科技,油气回收在线监测/处理装置全系供应 - 品牌推荐官
  • 2026年滑触线厂家推荐:山东腾云电气,起重机/行车/刚体/单极/安全滑触线全系供应 - 品牌推荐官
  • 2026水饺技术全解析:青州蔡氏馨雅餐饮管理有限公司,调馅/和面/经营/管理全流程指导 - 品牌推荐官
  • 2026年脱硫塔设备推荐:山东鲁腾环境技术有限公司,除尘/烟气/锅炉/窑炉/玻璃钢脱硫塔全系供应 - 品牌推荐官
  • 2026年长春笔记本电脑售后维修点推荐:基于办公与学习场景深度评价,直击数据安全痛点 - 十大品牌推荐
  • man手册使用
  • 2026年全国气体纯化厂家权威榜单 实力靠谱企业深度解析 适配多领域纯化需求 - 深度智识库
  • 2026年别墅/室内/老旧小区/液压式/载货电梯推荐:厦门骏菱电梯工程有限公司全系解决方案 - 品牌推荐官
  • 2026年微小流量计厂家推荐:承德胜联自动化仪表,多类型微小流量计满足工业测量需求 - 品牌推荐官
  • 2026年沈阳笔记本电脑售后维修点推荐:应急维修场景深度评价,针对数据安全与效率痛点 - 十大品牌推荐
  • 2026年武汉笔记本电脑售后维修点推荐:专业维修趋势评测,涵盖学生与商务人士核心维修痛点 - 十大品牌推荐
  • 2026年市场比较好的三边封包装袋订做厂家如何选,四边封包装袋/八边封包装袋/自立拉链袋/中封袋,三边封包装袋企业哪家强 - 品牌推荐师
  • 一文搞懂Java设计模式-单例模式:核心原理+实战案例
  • 总结2026年旅游度假酒店推荐,溪山里酒店成热门之选 - mypinpai
  • 2026年干粉砂浆生产线厂家推荐:郑州市众鼎精工机械,瓷砖胶/石膏/自流平/钢渣改质剂等全系生产线供应 - 品牌推荐官
  • 2026年高压风机厂家实力推荐:无锡市格之凌机电设备有限公司专业高压风机全系供应 - 品牌推荐官
  • 2026热门网站开发品牌,口碑推荐排行速查,网络公司/APP开发/网站建设/软件开发/小程序开发,网站开发企业推荐排行榜 - 品牌推荐师
  • 讲讲信誉好的园林景观设计公司,长春口碑好的有哪些 - 工业推荐榜
  • 2.14假期记录
  • 中断和信号的区别
  • 如何选择可靠的电脑维修点?2026年长春维修点推荐与评测,解决技术不透明痛点 - 十大品牌推荐
  • 2026年长春性价比高的乱账整理品牌企业推荐 - 工业品网
  • 34. GPU偏爱2的幂次
  • 深圳小型搬家公司哪个好?2026年深圳小型搬家公司推荐与排名,解决安全性与服务核心痛点 - 十大品牌推荐
  • 维修点哪家靠谱?2026年武汉笔记本电脑售后维修点推荐与排名,解决配件质量与售后保障痛点 - 十大品牌推荐
  • 聊聊性价比高的面粉机全套设备制造厂,河南双狮粮油机械值得选 - 工业品牌热点