Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术

Java Web开发基础与Servlet核心技术

在这里插入图片描述
15.1 学习目标与重点提示

学习目标:掌握Java Web开发的核心概念与Servlet技术的使用方法,包括Web应用的结构、Servlet的定义与使用、HTTP请求与响应的处理、会话管理、过滤器与监听器的使用,学会在实际开发中处理Web应用问题。
重点:Web应用的结构(目录结构、配置文件)Servlet的定义与使用(Servlet接口、HttpServlet类、注解配置)HTTP请求与响应的处理(Request、Response对象)会话管理(Session、Cookie)过滤器与监听器的使用Web开发的实际应用场景

15.2 Web开发概述

Java Web开发是用于处理Web应用的机制。

15.2.1 Web开发的定义

定义:Web开发是用于处理Web应用的机制。
作用

  • 实现Web应用的开发。
  • 实现客户端与服务器之间的通信。
  • 实现动态网页的生成。
  • 实现Web应用的部署与维护。

✅ 结论:Web开发是用于处理Web应用的机制,作用是实现Web应用的开发、客户端与服务器之间的通信、动态网页的生成、Web应用的部署与维护。

15.2.2 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。

15.3 Servlet核心技术

Servlet是Java Web开发的核心技术。

15.3.1 Servlet的定义与分类

定义:Servlet是用于处理HTTP请求与响应的Java程序。
分类

  • 继承HttpServlet类的Servlet。
  • 实现Servlet接口的Servlet。

常用方法

  • doGet():处理GET请求。
  • doPost():处理POST请求。
  • doPut():处理PUT请求。
  • doDelete():处理DELETE请求。
  • init():初始化Servlet。
  • destroy():销毁Servlet。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;importjava.io.*;// 注解配置Servlet@WebServlet("/hello")publicclassHelloWorldServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{// 设置响应类型 response.setContentType("text/html;charset=UTF-8");// 获取输出流PrintWriter out = response.getWriter();// 输出响应内容 out.println("<html>"); out.println("<head>"); out.println("<title>Hello World</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello, World!</h1>"); out.println("</body>"); out.println("</html>");}@OverrideprotectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{doGet(request, response);}}

输出结果

<html> <head> <title>Hello World</title> </head> <body> <h1>Hello, World!</h1> </body> </html> 

✅ 结论:Servlet是用于处理HTTP请求与响应的Java程序,分类包括继承HttpServlet类的Servlet、实现Servlet接口的Servlet。

15.3.2 HTTP请求与响应的处理

定义:HTTP请求与响应的处理是指Java Web应用中处理HTTP请求与响应的方法。
常用对象

  • HttpServletRequest:用于表示HTTP请求的对象。
  • HttpServletResponse:用于表示HTTP响应的对象。

常用方法

  • HttpServletRequest:
    • getParameter():获取请求参数。
    • getParameterValues():获取请求参数数组。
    • getMethod():获取请求方法。
    • getRequestURI():获取请求URI。
    • getSession():获取会话对象。
  • HttpServletResponse:
    • setContentType():设置响应类型。
    • getWriter():获取输出流。
    • sendRedirect():重定向到其他页面。
    • addCookie():添加Cookie。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;importjava.io.*;importjava.util.*;// 注解配置Servlet@WebServlet("/user")publicclassUserServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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>");}@OverrideprotectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,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。

15.4 会话管理

会话管理是用于处理Web应用中会话的机制。

15.4.1 Session的定义与使用

定义:Session是用于表示Web应用中会话的对象。
常用方法

  • setAttribute():设置会话属性。
  • getAttribute():获取会话属性。
  • removeAttribute():移除会话属性。
  • invalidate():销毁会话。
  • getMaxInactiveInterval():获取会话的最大不活动时间。
  • setMaxInactiveInterval():设置会话的最大不活动时间。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;importjava.io.*;// 注解配置Servlet@WebServlet("/login")publicclassLoginServletextendsHttpServlet{@OverrideprotectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,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");}}}// 首页Servlet@WebServlet("/index")publicclassIndexServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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");}}}// 登出Servlet@WebServlet("/logout")publicclassLogoutServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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()。

15.4.2 Cookie的定义与使用

定义:Cookie是用于表示Web应用中Cookie的对象。
常用方法

  • getName():获取Cookie的名称。
  • getValue():获取Cookie的值。
  • setValue():设置Cookie的值。
  • getMaxAge():获取Cookie的最大存活时间。
  • setMaxAge():设置Cookie的最大存活时间。
  • setPath():设置Cookie的路径。
  • setDomain():设置Cookie的域名。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;importjava.io.*;// 注解配置Servlet@WebServlet("/cookie")publicclassCookieServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{// 设置响应类型 response.setContentType("text/html;charset=UTF-8");// 获取输出流PrintWriter out = response.getWriter();// 获取CookieCookie[] 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{// 设置CookieCookie cookie =newCookie("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>");}}@OverrideprotectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{doGet(request, response);}}// 移除Cookie的Servlet@WebServlet("/removeCookie")publicclassRemoveCookieServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{// 移除CookieCookie cookie =newCookie("username",""); cookie.setMaxAge(0); cookie.setPath("/"); response.addCookie(cookie);// 重定向到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()。

15.5 过滤器与监听器的使用

过滤器与监听器是Java Web开发的重要技术。

15.5.1 过滤器的定义与使用

定义:过滤器是用于处理HTTP请求与响应的Java程序。
作用

  • 对请求进行过滤。
  • 对响应进行过滤。
  • 对请求与响应进行处理。

常用方法

  • doFilter():处理请求与响应。
  • init():初始化过滤器。
  • destroy():销毁过滤器。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebFilter;importjava.io.*;// 注解配置过滤器@WebFilter("/user/*")publicclassUserFilterimplementsFilter{@Overridepublicvoidinit(FilterConfig filterConfig)throwsServletException{System.out.println("UserFilter初始化");}@OverridepublicvoiddoFilter(ServletRequest request,ServletResponse response,FilterChain chain)throwsIOException,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>");}@Overridepublicvoiddestroy(){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()。

15.5.2 监听器的定义与使用

定义:监听器是用于监听Web应用中事件的Java程序。
作用

  • 监听ServletContext事件。
  • 监听HttpSession事件。
  • 监听ServletRequest事件。

常用方法

  • contextInitialized():ServletContext初始化事件。
  • contextDestroyed():ServletContext销毁事件。
  • sessionCreated():HttpSession创建事件。
  • sessionDestroyed():HttpSession销毁事件。
  • requestInitialized():ServletRequest初始化事件。
  • requestDestroyed():ServletRequest销毁事件。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebListener;importjavax.servlet.http.*;importjava.io.*;// 注解配置监听器@WebListenerpublicclassMyListenerimplementsServletContextListener,HttpSessionListener,ServletRequestListener{@OverridepublicvoidcontextInitialized(ServletContextEvent sce){System.out.println("ServletContext初始化");}@OverridepublicvoidcontextDestroyed(ServletContextEvent sce){System.out.println("ServletContext销毁");}@OverridepublicvoidsessionCreated(HttpSessionEvent se){System.out.println("HttpSession创建");}@OverridepublicvoidsessionDestroyed(HttpSessionEvent se){System.out.println("HttpSession销毁");}@OverridepublicvoidrequestInitialized(ServletRequestEvent sre){System.out.println("ServletRequest初始化");}@OverridepublicvoidrequestDestroyed(ServletRequestEvent sre){System.out.println("ServletRequest销毁");}}

输出结果

ServletContext初始化 ServletRequest初始化 HttpSession创建 ServletRequest销毁 HttpSession销毁 ServletContext销毁 

✅ 结论:监听器是用于监听Web应用中事件的Java程序,常用方法包括contextInitialized()、contextDestroyed()、sessionCreated()、sessionDestroyed()、requestInitialized()、requestDestroyed()。

15.6 Web开发的实际应用场景

在实际开发中,Web开发的应用场景非常广泛,如:

  • 实现用户的登录与登出。
  • 实现商品的展示与购买。
  • 实现订单的管理。
  • 实现博客的发布与管理。

示例

importjavax.servlet.*;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;importjava.io.*;importjava.util.*;// 产品类publicclassProduct{privateString productId;privateString productName;privatedouble price;privateint sales;publicProduct(String productId,String productName,double price,int sales){this.productId = productId;this.productName = productName;this.price = price;this.sales = sales;}publicStringgetProductId(){return productId;}publicStringgetProductName(){return productName;}publicdoublegetPrice(){return price;}publicintgetSales(){return sales;}@OverridepublicStringtoString(){return"Product{"+"productId='"+ productId +'\''+",+ productName +'\''+", price="+ price +", sales="+ sales +'}';}}// 产品服务类publicclassProductService{publicList<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 =newArrayList<>();try{// 1. 加载驱动程序Class.forName("com.mysql.jdbc.Driver");// 2. 建立数据库连接Connection connection =DriverManager.getConnection(url, username, password);System.out.println("数据库连接成功");// 3. 执行SQL语句PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, topN);ResultSet resultSet = preparedStatement.executeQuery();// 4. 处理结果集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(newProduct(productId, productName, price, sales));}// 5. 关闭资源 resultSet.close(); preparedStatement.close(); connection.close();}catch(ClassNotFoundException e){ e.printStackTrace();}catch(SQLException e){ e.printStackTrace();}return products;}}// 产品Servlet@WebServlet("/products")publicclassProductServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{// 创建产品服务对象ProductService productService =newProductService();// 定义SQL语句String sql ="SELECT * FROM product ORDER BY sales DESC LIMIT ?";// 获取销量top3的产品List<Product> topSellingProducts = productService.getTopSellingProducts(sql,3);// 设置请求属性 request.setAttribute("topSellingProducts", topSellingProducts);// 转发到产品页面RequestDispatcher dispatcher = request.getRequestDispatcher("/products.jsp"); dispatcher.forward(request, response);}@OverrideprotectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{doGet(request, response);}}// 产品页面<%@ page contentType="text/html;charset=UTF-8" language="java"%><html><head><title>Products</title></head><body><h1>Top3SellingProducts</h1><table border="1"><tr><th>Product ID</th><th>ProductName</th><th>Price</th><th>Sales</th></tr><%List<Product> topSellingProducts =(List<Product>) request.getAttribute("topSellingProducts");for(Product product : topSellingProducts){%><tr><td><%= product.getProductId()%></td><td><%= product.getProductName()%></td><td><%= product.getPrice()%></td><td><%= product.getSales()%></td></tr><%}%></table></body></html>

输出结果

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的框架使用、开发工具等内容。

Read more

你以为你在部署 AI 助手,其实也可能在打开一扇“数据侧门”:OpenClaw 安全风险全解析

你以为你在部署 AI 助手,其实也可能在打开一扇“数据侧门”:OpenClaw 安全风险全解析

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 你以为你在部署 AI 助手,其实也可能在打开一扇“数据侧门”:OpenClaw 安全风险全解析 * * 1、你以为你在装 AI 助手,其实你可能在给系统加一个“高权限自动化入口” * 2、OpenClaw 和普通 AI 最大的区别,到底在哪里? * 3、我为什么说:OpenClaw 更像“拿到部分权限的数字操作员”? * 4、为什么说 AI 助手不是“更聪明的搜索框”? * 5、OpenClaw 的 5

By Ne0inhk
字节跳动AI IDE:Trae 完全上手指南——从零安装到熟练使用,开启AI驱动开发新范式

字节跳动AI IDE:Trae 完全上手指南——从零安装到熟练使用,开启AI驱动开发新范式

目录 * 前言:当IDE进化为智能体 * 1.初识Trae * 1.1 Trae是什么? * 1.2 Trae的核心优势 * 1.3 谁适合使用Trae? * 2.安装与初始配置 * 2.1 支持的操作系统 * 2.2 下载与安装步骤 * 2.3 验证安装成功 * 3.界面导航(五分钟熟悉布局) * 3.1 核心区域功能说明 * 3.2 常用快捷键速查 * 4.核心AI功能详解 * 4.1 Chat模式:随时提问的编程助手 * 4.2 Builder模式:自然语言生成完整项目 * 4.2.1 实战案例:做一个待办事项应用 * 4.

By Ne0inhk

一文彻底搞懂 OpenClaw:是什么、怎么装、怎么用、结合2026最新AI趋势完整教程

一文彻底搞懂 OpenClaw:是什么、怎么装、怎么用、结合2026最新AI趋势完整教程 (超详细版,新手也能一步步跟着做) 一、先讲清楚:OpenClaw 到底是什么? 1. 最简单定义 OpenClaw 是一个开源、免费、本地优先、能让AI“动手操作电脑”的智能体框架。 它不是大模型本身,而是给大模型装上手、眼睛、记忆、工具,让 AI 能: * 控制电脑、操作文件 * 自动打开浏览器、查新闻、搜资料 * 执行命令、写代码、跑脚本 * 自动完成一系列复杂任务 你可以把它理解为: ChatGPT 只是聊天,OpenClaw 是真的能帮你打工。 2. 结合 2026 最新新闻背景 2026 年被称为 AI

By Ne0inhk
AI毕业论文写作指令全攻略:50条高效生成指令助你零基础完成高质原创论文

AI毕业论文写作指令全攻略:50条高效生成指令助你零基础完成高质原创论文

引言 在当今这个数字化迅猛发展的时代,人工智能(AI)技术正以一种前所未有的速度,深刻地改变着我们的生活与工作模式。对于那些即将毕业的大学生和研究生而言,撰写一篇高质量的毕业论文,无疑是他们迈向学术和职业道路的重要一步。然而传统的论文写作过程往往充满了各种挑战,需要投入大量的时间和精力。而人工智能技术的出现,为论文写作提供了一种全新的解决方案,它能够助力我们更高效地完成论文撰写工作。同时,在撰写过程中也可以借助图灵论文ai写作助手这样的学术ai工具,高效完成论文写作,一站式解决论文烦恼。本文将为大家呈上一份全面的AI毕业论文写作指令攻略,其中包含50条高效生成指令。即便你是零基础,也能借助这些指令完成高质量的原创论文。 论文前期准备阶段的指令 确定研究论题 * 指令1:“结合当前[具体领域]的热门趋势,给出5个具备研究价值的毕业论文论题。” 举例来说,在人工智能领域,你可以输入“结合当前人工智能的热门趋势,给出5个具有研究价值的毕业论文论题。”此时,AI可能会给出诸如“基于深度学习的图像识别算法优化研究”“人工智能在医疗诊断中的应用与挑战”等论题。 * 指令2:“对

By Ne0inhk