JSP(JavaServer Pages) 和 Servlet 都是在 Java EE 环境中用来处理 Web 请求的技术,但它们的执行过程和执行效率存在一定的差异。以下是 JSP 的执行过程和与 Servlet 执行效率的比较。
1. JSP 的执行过程
JSP 文件在被访问时,会经历以下几个步骤:
-
JSP 转译为 Servlet:当服务器首次加载一个 JSP 文件时,会将 JSP 文件转换为一个等价的 Java Servlet 类。这个过程由 JSP 容器自动完成。例如,
example.jsp可能被转换为example_jsp.java文件。 -
编译 Servlet:生成的 Servlet 类会被编译成字节码,生成
.class文件。这个过程通常是一次性的,除非 JSP 文件被修改,否则不会重复进行。 -
加载并初始化 Servlet:编译后的 Servlet 类会被加载到内存中,并通过调用
init()方法进行初始化。 -
处理请求:在 Servlet 类中,JSP 内容会被转换为
doGet()或doPost()方法中的 Java 代码,以处理客户端的请求。对于每个请求,容器会调用service()方法(进而调用doGet()或doPost())来处理请求并生成响应。 -
返回响应:JSP/Servlet 处理请求后,将生成的 HTML 内容返回给客户端浏览器。
在后续的请求中,只需要直接执行编译好的 Servlet 类,除非 JSP 文件有改动(此时会重新转译和编译),所以 JSP 实际上会作为 Servlet 来执行。
2. JSP 和 Servlet 的执行效率比较
- 第一次访问时:由于 JSP 文件需要先转换为 Servlet,然后编译执行,因此在第一次访问时,JSP 的执行速度相对较慢,略低于直接使用 Servlet。
- 后续访问时:在 JSP 转译为 Servlet 并编译完成后,实际上运行的也是 Servlet 类,所以 JSP 和 Servlet 在后续访问中的执行效率几乎没有差别。
为什么会认为 JSP 效率较低?
-
初次加载时间:JSP 在第一次加载时需要进行转译和编译,而原生的 Servlet 是直接写的 Java 代码,不需要这一步骤,所以 JSP 的首次执行效率相对略低。
-
逻辑与显示分离:一般来说,JSP 文件会更多地承担页面展示的任务,可能会包含较多的 HTML 代码和较少的业务逻辑。而 Servlet 往往用于处理业务逻辑,比较直接。为了代码的整洁性和可维护性,复杂的逻辑通常不会直接放在 JSP 中,而是交给后台的 Java 类或 Servlet 处理。
使用建议
- 适合场景:JSP 适合用于页面内容展示,而 Servlet 更适合用来处理业务逻辑。它们可以互相调用、配合使用。
- 性能优化:对于性能要求高的系统,可以避免在 JSP 中放置大量的逻辑代码,将复杂的业务逻辑交由 Servlet 或后台 Java 类来处理。
总结
- JSP 的执行过程包含了转译和编译步骤,在首次请求时可能略慢于 Servlet。
- 后续请求的效率:在 JSP 转译为 Servlet 后,两者执行效率基本一致。
- 适用场景:JSP 适合页面展示,Servlet 更适合业务逻辑处理。

被折叠的 条评论
为什么被折叠?



