JSP是如何被执行的?
JSP(JavaServer Pages)是一种用于构建动态Web页面的技术,它允许开发者在HTML、XML或其他文本格式的文档中嵌入Java代码。JSP页面在服务器端被编译成Servlet,然后由Servlet容器(如Tomcat)执行。以下是JSP页面的执行过程:
1. 请求到达
- 当客户端(通常是浏览器)发送一个HTTP请求到Web服务器时,服务器会根据请求的URL确定请求的资源类型。
- 如果请求的资源是一个JSP文件(通常以
.jsp
为扩展名),服务器会将请求转发给JSP引擎(也称为JSP容器)。
2. JSP页面转换为Servlet
- 首次请求:如果这是第一次请求该JSP页面,JSP引擎会读取JSP文件的内容,并将其转换为一个Java Servlet源代码文件。
- 转换过程:
- JSP页面中的静态内容(如HTML标记)会被转换为
out.println()
语句。 - JSP页面中的Java代码(如脚本片段、声明和表达式)会被直接嵌入到生成的Servlet中。
- 生成的Servlet源代码文件通常保存在服务器的临时目录中。
- JSP页面中的静态内容(如HTML标记)会被转换为
3. 编译Servlet
- 生成的Servlet源代码文件会被编译成字节码文件(
.class
文件)。 - 编译过程由JSP引擎调用Java编译器(
javac
)完成。
4. 加载和初始化Servlet
- 编译后的Servlet类会被加载到内存中。
- Servlet容器会调用Servlet的
init()
方法进行初始化。在这个阶段,可以进行一些初始化操作,如加载配置文件、建立数据库连接等。
5. 执行Servlet
- 当Servlet准备好后,Servlet容器会调用Servlet的
service()
方法来处理客户端请求。 service()
方法会根据请求的HTTP方法(如GET、POST)调用相应的doGet()
或doPost()
方法。- 在这些方法中,生成的Servlet会执行嵌入的Java代码,处理业务逻辑,并生成动态的HTML内容。
6. 生成响应
- 生成的HTML内容会被发送回客户端浏览器。
- 浏览器会解析并显示这些HTML内容。
7. 重复使用或销毁Servlet
- 对于后续的请求,如果JSP页面没有发生变化,Servlet容器可以直接使用已经编译好的Servlet来处理请求,而不需要再次进行转换和编译。
- 如果JSP页面发生了变化(如文件被修改),JSP引擎会重新执行上述步骤,重新转换、编译和加载新的Servlet。
8.示例
假设有一个简单的JSP页面index.jsp
,内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP Example</title>
</head>
<body>
<h1>Hello, JSP!</h1>
<p>Current Time: <%= new java.util.Date() %></p>
</body>
</html>
转换后的Servlet源代码(伪代码):
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class index_jsp extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP Example</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello, JSP!</h1>");
out.println("<p>Current Time: " + new java.util.Date() + "</p>");
out.println("</body>");
out.println("</html>");
}
}
.9.总结
JSP页面的执行过程主要包括请求到达、JSP页面转换为Servlet、编译Servlet、加载和初始化Servlet、执行Servlet、生成响应和重复使用或销毁Servlet。通过这种方式,JSP技术能够高效地生成动态的Web内容。
在JSP页面的执行过程中,以下操作是在服务器端完成的:
- 请求的接收和转发
- JSP页面的读取和转换为Servlet源代码
- Servlet源代码的编译
- Servlet类的加载和初始化
- Servlet的执行,包括处理请求和生成动态内容
- 生成的HTML内容的发送
- Servlet的缓存和重新编译
这些操作确保了JSP页面能够高效地生成动态的Web内容,并将其发送回客户端浏览器。