跳到主要内容
Java Web 开发基础与 Servlet 核心技术 | 极客日志
Java java
Java Web 开发基础与 Servlet 核心技术 Java Web 开发涵盖 Web 应用结构、Servlet 核心技术、HTTP 请求响应处理、会话管理及过滤器监听器使用。内容包括 Servlet 定义分类、Request/Response 对象方法、Session/Cookie 管理、Filter/Listener 机制,以及登录、商品展示等实际场景。掌握这些技术可构建动态网页并处理客户端服务器通信。
月光旅人 发布于 2026/3/30 更新于 2026/5/31 27 浏览Java Web 开发基础与 Servlet 核心技术
学习目标与重点提示
学习目标 :掌握 Java Web 开发的核心概念与 Servlet 技术的使用方法,包括 Web 应用的结构、Servlet 的定义与使用、HTTP 请求与响应的处理、会话管理、过滤器与监听器的使用,学会在实际开发中处理 Web 应用问题。
重点 :Web 应用的结构(目录结构、配置文件)、Servlet 的定义与使用(Servlet 接口、HttpServlet 类、注解配置)、HTTP 请求与响应的处理(Request、Response 对象)、会话管理(Session、Cookie)、过滤器与监听器的使用、Web 开发的实际应用场景。
Web 开发概述
Java Web 开发是用于处理 Web 应用的机制。
Web 开发的定义
定义 :Web 开发是用于处理 Web 应用的机制。
作用 :
实现 Web 应用的开发。
实现客户端与服务器之间的通信。
实现动态网页的生成。
实现 Web 应用的部署与维护。
结论 :Web 开发是用于处理 Web 应用的机制,作用是实现 Web 应用的开发、客户端与服务器之间的通信、动态网页的生成、Web 应用的部署与维护。
Web 应用的结构
定义 :Web 应用的结构是指 Java Web 应用的目录结构。
常用目录 :
webapp:Web 应用的根目录。
WEB-INF:存放 Web 应用的配置文件和类文件。
lib:存放 Web 应用的依赖库。
classes:存放 Web 应用的类文件。
web.xml:Web 应用的配置文件。
结论 :Web 应用的结构是指 Java Web 应用的目录结构,常用目录包括 webapp、WEB-INF、lib、classes、web.xml。
Servlet 核心技术
Servlet 是 Java Web 开发的核心技术。
Servlet 的定义与分类
定义 :Servlet 是用于处理 HTTP 请求与响应的 Java 程序。
分类 :
继承 HttpServlet 类的 Servlet。
实现 Servlet 接口的 Servlet。
常用方法 :
doGet():处理 GET 请求。
doPost():处理 POST 请求。
doPut():处理 PUT 请求。
doDelete():处理 DELETE 请求。
init():初始化 Servlet。
destroy():销毁 Servlet。
示例 :
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/hello")
public class {
ServletException, IOException {
response.setContentType( );
response.getWriter();
out.println( );
out.println( );
out.println( );
out.println( );
out.println( );
out.println( );
out.println( );
out.println( );
}
ServletException, IOException {
doGet(request, response);
}
}
HelloWorldServlet
extends
HttpServlet
@Override
protected
void
doGet
(HttpServletRequest request, HttpServletResponse response)
throws
"text/html;charset=UTF-8"
PrintWriter
out
=
"<html>"
"<head>"
"<title>Hello World</title>"
"</head>"
"<body>"
"<h1>Hello, World!</h1>"
"</body>"
"</html>"
@Override
protected
void
doPost
(HttpServletRequest request, HttpServletResponse response)
throws
<html > <head > <title > Hello World</title > </head > <body > <h1 > Hello, World!</h1 > </body > </html >
结论 :Servlet 是用于处理 HTTP 请求与响应的 Java 程序,分类包括继承 HttpServlet 类的 Servlet、实现 Servlet 接口的 Servlet。
HTTP 请求与响应的处理 定义 :HTTP 请求与响应的处理是指 Java Web 应用中处理 HTTP 请求与响应的方法。
HttpServletRequest:用于表示 HTTP 请求的对象。
HttpServletResponse:用于表示 HTTP 响应的对象。
HttpServletRequest:
getParameter():获取请求参数。
getParameterValues():获取请求参数数组。
getMethod():获取请求方法。
getRequestURI():获取请求 URI。
getSession():获取会话对象。
HttpServletResponse:
setContentType():设置响应类型。
getWriter():获取输出流。
sendRedirect():重定向到其他页面。
addCookie():添加 Cookie。
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
@WebServlet("/user")
public class UserServlet extends HttpServlet {
@Override
protected void doGet (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>User Information</title>" );
out.println("</head>" );
out.println("<body>" );
out.println("<h1>User Information</h1>" );
out.println("<p>Name: " + request.getParameter("name" ) + "</p>" );
out.println("<p>Age: " + request.getParameter("age" ) + "</p>" );
out.println("<p>Email: " + request.getParameter("email" ) + "</p>" );
out.println("</body>" );
out.println("</html>" );
}
@Override
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<html > <head > <title > User Information</title > </head > <body > <h1 > User Information</h1 > <p > Name: 张三</p > <p > Age: 25</p > <p > Email: [email protected] </p > </body > </html >
结论 :HTTP 请求与响应的处理是指 Java Web 应用中处理 HTTP 请求与响应的方法,常用对象包括 HttpServletRequest、HttpServletResponse。
会话管理
Session 的定义与使用 定义 :Session 是用于表示 Web 应用中会话的对象。
setAttribute():设置会话属性。
getAttribute():获取会话属性。
removeAttribute():移除会话属性。
invalidate():销毁会话。
getMaxInactiveInterval():获取会话的最大不活动时间。
setMaxInactiveInterval():设置会话的最大不活动时间。
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username" );
String password = request.getParameter("password" );
if ("admin" .equals(username) && "123456" .equals(password)) {
HttpSession session = request.getSession();
session.setAttribute("username" , username);
response.sendRedirect("/index.jsp" );
} else {
response.sendRedirect("/login.jsp" );
}
}
}
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username" );
if (username != null ) {
response.setContentType("text/html;charset=UTF-8" );
PrintWriter out = response.getWriter();
out.println("<html>" );
out.println("<head>" );
out.println("<title>Index</title>" );
out.println("</head>" );
out.println("<body>" );
out.println("<h1>Welcome, " + username + "!</h1>" );
out.println("<a href=\"/logout\">Logout</a>" );
out.println("</body>" );
out.println("</html>" );
} else {
response.sendRedirect("/login.jsp" );
}
}
}
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate();
response.sendRedirect("/login.jsp" );
}
}
<html > <head > <title > Login</title > </head > <body > <h1 > Login</h1 > <form action ="/login" method ="post" > <label for ="username" > Username:</label > <input type ="text" name ="username" required > <br > <label for ="password" > Password:</label > <input type ="password" name ="password" required > <br > <input type ="submit" value ="Login" > </form > </body > </html >
<html > <head > <title > Index</title > </head > <body > <h1 > Welcome, admin!</h1 > <a href ="/logout" > Logout</a > </body > </html >
结论 :Session 是用于表示 Web 应用中会话的对象,常用方法包括 setAttribute()、getAttribute()、removeAttribute()、invalidate()、getMaxInactiveInterval()、setMaxInactiveInterval()。
Cookie 的定义与使用 定义 :Cookie 是用于表示 Web 应用中 Cookie 的对象。
getName():获取 Cookie 的名称。
getValue():获取 Cookie 的值。
setValue():设置 Cookie 的值。
getMaxAge():获取 Cookie 的最大存活时间。
setMaxAge():设置 Cookie 的最大存活时间。
setPath():设置 Cookie 的路径。
setDomain():设置 Cookie 的域名。
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/cookie")
public class CookieServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8" );
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();
String username = null ;
if (cookies != null ) {
for (Cookie cookie : cookies) {
if ("username" .equals(cookie.getName())) {
username = cookie.getValue();
break ;
}
}
}
if (username != null ) {
out.println("<html>" );
out.println("<head>" );
out.println("<title>Cookie Example</title>" );
out.println("</head>" );
out.println("<body>" );
out.println("<h1>Welcome, " + username + "!</h1>" );
out.println("<a href=\"/removeCookie\">Remove Cookie</a>" );
out.println("</body>" );
out.println("</html>" );
} else {
Cookie cookie = new Cookie ("username" , "admin" );
cookie.setMaxAge(3600 );
cookie.setPath("/" );
response.addCookie(cookie);
out.println("<html>" );
out.println("<head>" );
out.println("<title>Cookie Example</title>" );
out.println("</head>" );
out.println("<body>" );
out.println("<h1>Welcome, Guest!</h1>" );
out.println("</body>" );
out.println("</html>" );
}
}
@Override
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
@WebServlet("/removeCookie")
public class RemoveCookieServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie ("username" , "" );
cookie.setMaxAge(0 );
cookie.setPath("/" );
response.addCookie(cookie);
response.sendRedirect("/cookie" );
}
}
<html > <head > <title > Cookie Example</title > </head > <body > <h1 > Welcome, Guest!</h1 > </body > </html >
<html > <head > <title > Cookie Example</title > </head > <body > <h1 > Welcome, admin!</h1 > <a href ="/removeCookie" > Remove Cookie</a > </body > </html >
结论 :Cookie 是用于表示 Web 应用中 Cookie 的对象,常用方法包括 getName()、getValue()、setValue()、getMaxAge()、setMaxAge()、setPath()、setDomain()。
过滤器与监听器的使用 过滤器与监听器是 Java Web 开发的重要技术。
过滤器的定义与使用 定义 :过滤器是用于处理 HTTP 请求与响应的 Java 程序。
对请求进行过滤。
对响应进行过滤。
对请求与响应进行处理。
doFilter():处理请求与响应。
init():初始化过滤器。
destroy():销毁过滤器。
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.*;
@WebFilter("/user/*")
public class UserFilter implements Filter {
@Override
public void init (FilterConfig filterConfig) throws ServletException {
System.out.println("UserFilter 初始化" );
}
@Override
public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8" );
PrintWriter out = response.getWriter();
out.println("<html>" );
out.println("<head>" );
out.println("<title>User Filter</title>" );
out.println("</head>" );
out.println("<body>" );
out.println("<h1>User Filter</h1>" );
chain.doFilter(request, response);
out.println("</body>" );
out.println("</html>" );
}
@Override
public void destroy () {
System.out.println("UserFilter 销毁" );
}
}
<html > <head > <title > User Filter</title > </head > <body > <h1 > User Filter</h1 > User Information <p > Name: 张三</p > <p > Age: 25</p > <p > Email: [email protected] </p > </body > </html >
结论 :过滤器是用于处理 HTTP 请求与响应的 Java 程序,常用方法包括 doFilter()、init()、destroy()。
监听器的定义与使用 定义 :监听器是用于监听 Web 应用中事件的 Java 程序。
监听 ServletContext 事件。
监听 HttpSession 事件。
监听 ServletRequest 事件。
contextInitialized():ServletContext 初始化事件。
contextDestroyed():ServletContext 销毁事件。
sessionCreated():HttpSession 创建事件。
sessionDestroyed():HttpSession 销毁事件。
requestInitialized():ServletRequest 初始化事件。
requestDestroyed():ServletRequest 销毁事件。
import javax.servlet.*;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.*;
import java.io.*;
@WebListener
public class MyListener implements ServletContextListener , HttpSessionListener, ServletRequestListener {
@Override
public void contextInitialized (ServletContextEvent sce) {
System.out.println("ServletContext 初始化" );
}
@Override
public void contextDestroyed (ServletContextEvent sce) {
System.out.println("ServletContext 销毁" );
}
@Override
public void sessionCreated (HttpSessionEvent se) {
System.out.println("HttpSession 创建" );
}
@Override
public void sessionDestroyed (HttpSessionEvent se) {
System.out.println("HttpSession 销毁" );
}
@Override
public void requestInitialized (ServletRequestEvent sre) {
System.out.println("ServletRequest 初始化" );
}
@Override
public void requestDestroyed (ServletRequestEvent sre) {
System.out.println("ServletRequest 销毁" );
}
}
ServletContext 初始化 ServletRequest 初始化 HttpSession 创建 ServletRequest 销毁 HttpSession 销毁 ServletContext 销毁
结论 :监听器是用于监听 Web 应用中事件的 Java 程序,常用方法包括 contextInitialized()、contextDestroyed()、sessionCreated()、sessionDestroyed()、requestInitialized()、requestDestroyed()。
Web 开发的实际应用场景 在实际开发中,Web 开发的应用场景非常广泛,如:
实现用户的登录与登出。
实现商品的展示与购买。
实现订单的管理。
实现博客的发布与管理。
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Product {
private String productId;
private String productName;
private double price;
private int sales;
public Product (String productId, String productName, double price, int sales) {
this .productId = productId;
this .productName = productName;
this .price = price;
this .sales = sales;
}
public String getProductId () { return productId; }
public String getProductName () { return productName; }
public double getPrice () { return price; }
public int getSales () { return sales; }
@Override
public String toString () {
return "Product{" + "productId='" + productId + '\'' + "," + " productName='" + productName + '\'' + ", price=" + price + ", sales=" + sales + '}' ;
}
}
public class ProductService {
public List<Product> getTopSellingProducts (String sql, int topN) {
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false" ;
String username = "root" ;
String password = "123456" ;
List<Product> products = new ArrayList <>();
try {
Class.forName("com.mysql.jdbc.Driver" );
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功" );
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1 , topN);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String productId = resultSet.getString("product_id" );
String productName = resultSet.getString("product_name" );
double price = resultSet.getDouble("price" );
int sales = resultSet.getInt("sales" );
products.add(new Product (productId, productName, price, sales));
}
resultSet.close();
preparedStatement.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
}
@WebServlet("/products")
public class ProductServlet extends HttpServlet {
@Override
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ProductService productService = new ProductService ();
String sql = "SELECT * FROM product ORDER BY sales DESC LIMIT ?" ;
List<Product> topSellingProducts = productService.getTopSellingProducts(sql, 3 );
request.setAttribute("topSellingProducts" , topSellingProducts);
RequestDispatcher dispatcher = request.getRequestDispatcher("/products.jsp" );
dispatcher.forward(request, response);
}
@Override
protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Top 3 Selling Products Product ID Product Name Price Sales P004 手表 500.0 200 P005 耳机 300.0 150 P001 手机 1000.0 100
结论 :在实际开发中,Web 开发的应用场景非常广泛,需要根据实际问题选择合适的 Web 开发方法。
总结 本章我们学习了 Java Web 开发基础与 Servlet 核心技术,包括 Web 应用的结构、Servlet 的定义与使用、HTTP 请求与响应的处理、会话管理、过滤器与监听器的使用,学会了在实际开发中处理 Web 应用问题。其中,Web 应用的结构(目录结构、配置文件)、Servlet 的定义与使用(Servlet 接口、HttpServlet 类、注解配置)、HTTP 请求与响应的处理(Request、Response 对象)、会话管理(Session、Cookie)、过滤器与监听器的使用、Web 开发的实际应用场景是本章的重点内容。从下一章开始,我们将学习 Java 的框架使用、开发工具等内容。
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online