您的位置:首页 > 文旅 > 旅游 > 中国家居设计网_网站建设教程小说_下载app_全国疫情最新数据

中国家居设计网_网站建设教程小说_下载app_全国疫情最新数据

2025/5/1 10:47:37 来源:https://blog.csdn.net/2402_83322742/article/details/147112229  浏览:    关键词:中国家居设计网_网站建设教程小说_下载app_全国疫情最新数据
中国家居设计网_网站建设教程小说_下载app_全国疫情最新数据

Jsp技术入门指南【四】详细讲解jsp与Servlet的对比和Jsp生命周期和工作原理

  • 前言
  • 一、JSP与Servlet的对比区别
    • 1. 设计定位与职责分工
    • 2. 会话管理机制
    • 3. 隐式对象(Implicit Objects)
    • 4. 执行流程与编译方式
    • 5. 代码可读性与维护性
  • 二、JSP生命周期
    • 1. 翻译阶段(Translation Phase)
    • 2. 加载与编译阶段(Load & Compile Phase)
    • 3. 初始化阶段(Initialization Phase)
    • 4. 请求处理阶段(Request Handling Phase)
    • 5. 销毁阶段(Destruction Phase)
  • 三、JSP工作原理
    • 1. 翻译阶段(Translation Stage)
      • 步骤1:JSP文件解析
      • 步骤2:生成Servlet源文件
      • 步骤3:编译为字节码文件
    • 2. 请求处理阶段(Request Handling Stage)
      • 步骤1:接收请求
      • 步骤2:实例化与初始化(首次请求)
      • 步骤3:处理请求
      • 步骤4:响应客户端
      • 步骤5:销毁(非必要时)
  • 总结


前言

  • 在Java Web开发中,JSP(Java Server Pages)和Servlet是两大核心技术
  • JSP作为Servlet的延伸,简化了动态页面的开发;
  • 而Servlet则是Java Web的底层技术,提供了更细粒度的控制。
  • 本文将深入对比两者的差异,并解析JSP的生命周期和工作原理,帮助开发者理解其核心机制

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482

一、JSP与Servlet的对比区别

JSP和Servlet本质上都是Servlet(JSP会被编译为Servlet类),但在设计目标、开发方式和应用场景上有明显区别,以下从核心特性展开对比:

1. 设计定位与职责分工

  • Servlet

    • 核心职责:处理请求逻辑(如接收参数、操作数据库、业务逻辑处理),属于MVC架构中的“控制器(Controller)”。
    • 代码结构:以Java类为载体,通过重写doGet/doPost等方法处理请求,需手动拼接HTML响应内容,开发视图繁琐。
    • 优势:适合处理复杂业务逻辑,控制流程灵活。
  • JSP

    • 核心职责:聚焦页面展示(HTML/CSS/JS),嵌入少量Java代码(或EL表达式、JSTL标签),属于MVC中的“视图(View)”。
    • 代码结构:以.jsp文件为载体,支持直接编写HTML,通过<% %>标签嵌入逻辑,简化页面动态化开发。
    • 优势:开发效率高,页面逻辑直观,适合快速构建前端视图。

2. 会话管理机制

  • Servlet

    • 会话管理需显式启动,通过HttpServletRequest.getSession()获取HttpSession对象(若参数为true,无会话时会自动创建)。
    • 示例:
      HttpSession session = request.getSession(true); // 显式获取会话
      
  • JSP

    • 会话管理自动启动,默认启用会话支持(由page指令的session="true"控制)。
    • 可直接使用隐式对象session,无需手动获取。
    • 示例:
      <% session.setAttribute("user", "admin"); %> <!-- 直接使用session隐式对象 -->
      

3. 隐式对象(Implicit Objects)

  • JSP专属特性
    JSP内置11个隐式对象,无需声明即可直接使用,典型包括:

    • request(HttpServletRequest)、response(HttpServletResponse)、session(HttpSession)
    • application(ServletContext)、out(JspWriter,用于输出内容)
    • pageContext(PageContext,访问页面上下文)、config(ServletConfig)
    • page(当前JSP页面实例,等价于this)、exception(处理异常,仅在错误页面有效)
  • Servlet
    需手动通过方法参数获取相关对象,例如:

    HttpServletRequest request = req;
    HttpSession session = request.getSession();
    

4. 执行流程与编译方式

  • Servlet

    • 直接编写Java类,编译为.class文件后部署,修改后需重启服务器或重新部署。
  • JSP

    • 首次请求时由JSP引擎编译为Servlet源文件(.java),再编译为.class文件,后续请求直接执行编译后的类。
    • 修改JSP文件后,无需重启服务器,下次请求时会重新编译(生产环境需谨慎使用)。

5. 代码可读性与维护性

  • Servlet

    • 纯Java代码,逻辑清晰,适合复杂业务,但拼接HTML代码可读性差(需用PrintWriter.println()输出)。
  • JSP

    • HTML中嵌入Java代码(称为“脚本段”),若逻辑复杂会导致页面臃肿(“意大利面条式代码”),现代开发推荐结合EL+JSTL标签减少脚本段,或使用前后端分离架构。

二、JSP生命周期

JSP的生命周期遵循Servlet规范,可分为5个阶段,核心通过编译后的Servlet类(如HelloWorld_jsp)实现:

1. 翻译阶段(Translation Phase)

  • 首次请求时触发:JSP引擎将.jsp文件转换为Servlet源文件(命名规则类似*_jsp.java),并继承HttpJspBase(最终继承HttpServlet)。
  • 关键操作
    • 将HTML内容转换为out.write()语句,Java脚本段(<% %>)保留为方法内代码。
    • 生成隐式对象(如requestresponsesession)的声明和初始化逻辑。

2. 加载与编译阶段(Load & Compile Phase)

  • 编译Servlet源文件为.class字节码文件,加载到JVM中。

3. 初始化阶段(Initialization Phase)

  • 调用_jspInit()方法(对应Servlet的init()),用于初始化JSP特有的资源(如数据库连接)。
  • 仅在JSP实例化后执行一次,可通过page指令的init-method属性自定义初始化方法。

4. 请求处理阶段(Request Handling Phase)

  • 每次请求时调用_jspService(request, response)方法(重写Servlet的service()),根据请求方法(GET/POST)分发到doGet/doPost等方法。
  • 核心逻辑:
    1. 创建或获取隐式对象(如pageContextout)。
    2. 执行JSP中的Java代码和标签,生成动态内容并写入out对象。
    3. 最终通过response.getWriter()将内容输出到客户端。

5. 销毁阶段(Destruction Phase)

  • 当JSP引擎关闭或重新部署时,调用_jspDestroy()方法(对应Servlet的destroy()),用于释放初始化阶段申请的资源。

三、JSP工作原理

JSP的核心原理是“一次翻译,多次执行”,其工作流程可分为两大阶段:

1. 翻译阶段(Translation Stage)

步骤1:JSP文件解析

  • JSP引擎读取.jsp文件,分离静态内容(HTML/CSS/JS)和动态内容(Java脚本、EL表达式、JSTL标签)。

步骤2:生成Servlet源文件

  • 将静态内容转换为out.write("HTML内容")形式的代码,动态内容保留为Java逻辑。
  • 示例:
    <!-- JSP代码 -->
    <html><body><% String name = "JSP"; %><h1>Hello, <%= name %>!</h1></body>
    </html>
    
    转换为Servlet代码(简化版):
    out.write("<html>\r\n\t<body>\r\n\t\t");
    String name = "JSP";
    out.write("<h1>Hello, ");
    out.print(name); // 对应<%= name %>
    out.write("!</h1>\r\n\t</body>\r\n</html>");
    

步骤3:编译为字节码文件

  • 将生成的.java文件编译为.class,加载到内存中,形成JSP对应的Servlet实例。

2. 请求处理阶段(Request Handling Stage)

步骤1:接收请求

  • 客户端发送请求到JSP页面,服务器匹配到对应的Servlet(即编译后的JSP类)。

步骤2:实例化与初始化(首次请求)

  • 若JSP类未实例化,创建实例并调用_jspInit()初始化(仅首次请求执行)。

步骤3:处理请求

  • 调用_jspService()方法,处理用户请求:
    • 解析请求参数,执行JSP中的业务逻辑(如数据库查询)。
    • 生成动态内容,通过out对象写入响应体。

步骤4:响应客户端

  • 将包含动态内容的HTML响应返回给浏览器,关闭相关资源(隐式对象由容器管理,无需手动关闭)。

步骤5:销毁(非必要时)

  • 当服务器关闭或JSP文件被修改时,销毁实例,释放资源。

总结

  • JSP vs Servlet:Servlet是底层控制核心,适合复杂逻辑;JSP是视图层技术,简化动态页面开发,二者在MVC架构中互补。
  • JSP生命周期:经历翻译、加载、初始化、请求处理、销毁,核心通过编译后的Servlet类实现,首次请求触发翻译和编译。
  • 工作原理:JSP本质是“模板化的Servlet”,通过隐式对象和自动会话管理提升开发效率,最终转换为Servlet代码执行。

理解JSP与Servlet的差异及JSP的底层机制,有助于在开发中合理分工(如Servlet处理业务、JSP负责展示),并优化应用性能(如避免在JSP中编写复杂逻辑)。随着前后端分离架构的普及,JSP的视图职责逐渐被前端框架取代,但其核心思想仍对理解Java Web生态至关重要。


以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com