在本节中,我们将深入探讨Java Web开发中的两个核心技术:Servlet和JSP(Java Server Pages)。这两者是Java Web应用程序的基础,理解它们的工作原理、生命周期以及如何高效地使用它们,对于开发者来说至关重要。
1. Servlet概念、生命周期与配置
Servlet概述
Servlet是Java EE(现为Jakarta EE)技术中用于构建动态Web应用的基础组件。它是一个运行在Web服务器中的Java程序,负责处理客户端请求并生成动态响应。Servlet是由Web服务器容器(如Apache Tomcat、Jetty等)加载和执行的。
Servlet的核心职责是接收HTTP请求、处理业务逻辑并生成HTTP响应。它是Java Web开发的关键组件,广泛应用于请求处理、用户认证、会话管理等方面。
Servlet生命周期
Servlet的生命周期由Web容器管理,生命周期的关键步骤如下:
-
加载与实例化:
- 当Servlet首次被请求时,Web容器会加载该Servlet并创建其实例。如果Servlet已经被加载且实例化过,那么它将会使用之前创建的实例。
-
初始化(init):
init()
方法是Servlet的初始化方法。它在Servlet实例化之后,且请求被处理之前执行。此方法只会在Servlet的生命周期内执行一次,通常用于执行一些初始化任务,比如加载配置文件、建立数据库连接等。init()
方法的签名:
public void init() throws ServletException { // Initialization code }
-
请求处理(service):
service()
方法用于处理每个HTTP请求。每当Servlet收到一个请求时,Web容器会调用该方法。service()
方法接收HttpServletRequest
和HttpServletResponse
对象,并通过这些对象获取请求信息并生成响应内容。service()
方法的签名:
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Request handling code }
-
销毁(destroy):
destroy()
方法在Servlet实例销毁之前被调用,通常用于释放资源(如关闭数据库连接、释放内存等)。该方法只会执行一次,当容器停止或Servlet被卸载时执行。destroy()
方法的签名:
public void destroy() { // Cleanup code }
Servlet配置
Servlet需要在web.xml
配置文件中进行声明,指定Servlet的类名和URL映射。web.xml
是Web应用的部署描述符,用于定义Servlet及其初始化参数、URL映射、监听器等。
例如,在web.xml
中配置一个名为HelloServlet
的Servlet:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
Servlet示例:HelloServlet
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Hello, Welcome to Servlet!</h1>");
}
}
2. 编写并部署第一个Servlet
接下来,我们将通过创建和部署一个简单的Servlet应用程序,演示如何配置Servlet和处理HTTP请求。
步骤1:创建Servlet类
首先,在src/main/java/com/example
目录下创建一个Servlet类,命名为FirstServlet.java
。该Servlet会响应/first
路径的HTTP GET请求。
步骤2:配置web.xml
虽然使用注解@WebServlet
可以省去在web.xml
中配置Servlet的步骤,但对于传统的Servlet配置,我们仍然可以手动修改web.xml
文件。在WEB-INF/web.xml
文件中添加以下配置:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.example.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
步骤3:部署Servlet
将项目部署到Tomcat服务器中。在IDE(如IntelliJ IDEA或Eclipse)中配置Tomcat服务器,然后将项目部署到服务器上。在浏览器中访问http://localhost:8080/your_project_name/first
,您将看到Servlet返回的网页。
3. JSP概念与生命周期
JSP概述
JSP(JavaServer Pages)是一种动态网页技术,它使得开发者可以在HTML代码中嵌入Java代码。JSP允许开发者在页面中插入Java表达式、脚本块和指令,并将这些内容与HTML标签结合,从而动态生成内容。
JSP是Servlet的扩展,通过简化动态内容生成的过程,开发者可以专注于编写逻辑,而无需编写大量的Servlet代码。JSP文件通常以.jsp
扩展名保存。
JSP生命周期
JSP的生命周期与Servlet类似,由Web容器管理。JSP的生命周期包括以下几个阶段:
-
请求与实例化:
- 当JSP页面首次被请求时,Web容器会将其编译成一个Servlet类,并将其实例化。
-
初始化(init):
- Web容器调用
jspInit()
方法,这是JSP的初始化阶段。此方法类似于Servlet中的init()
方法,仅会在JSP实例化时调用一次。
- Web容器调用
-
请求处理(service):
- JSP通过调用
_jspService()
方法来处理每个请求。在这个方法中,JSP页面中的Java代码会被执行,并生成响应内容。该过程与Servlet的service()
方法类似。
- JSP通过调用
-
销毁(destroy):
- 当JSP页面不再被需要时,Web容器会调用
jspDestroy()
方法来释放资源。
- 当JSP页面不再被需要时,Web容器会调用
JSP示例:HelloJSP.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"%>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<h1>Hello, Welcome to JSP!</h1>
<p>Current Date and Time: <%= new Date() %></p>
</body>
</html>
4. 使用JSP动态展示数据
在本节中,我们将通过一个示例展示如何使用JSP动态地展示数据。假设我们有一个简单的用户列表,JSP将从请求中接收数据并在页面上动态展示。
步骤1:Servlet传递数据给JSP
在Servlet中,我们将创建一个User
对象,并将该对象添加到请求属性中,然后转发到JSP页面显示数据。
@WebServlet("/userList")
public class UserListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<String> users = Arrays.asList("John", "Jane", "Tom", "Alice");
request.setAttribute("users", users);
RequestDispatcher dispatcher = request.getRequestDispatcher("/userList.jsp");
dispatcher.forward(request, response);
}
}
步骤2:创建JSP页面
在userList.jsp
页面中,使用JSP标签和EL表达式来动态显示用户数据。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"%>
<%@ page import="java.util.*" %>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>List of Users</h1>
<ul>
<c:forEach var="user" items="${users}">
<li>${user}</li>
</c:forEach>
</ul>
</body>
</html>
在这个示例中,<c:forEach>
标签用来遍历users
集合并动态生成HTML列表。
关于作者:
15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我
标签:Web,生命周期,Java,请求,JSP,Servlet From: https://blog.csdn.net/u012263104/article/details/144692104