编程自学指南:java程序设计开发,Java Web 之 Servlet 核心编程基础
一、课程信息
学习目标
- 理解 Servlet 的概念和作用。
- 掌握 Servlet 的生命周期。
- 学会编写和部署简单的 Servlet。
- 了解 Servlet 中请求和响应对象的使用。
二、课程导入
生活实例引入
- 想象你去银行办理业务,你向银行柜员提出办理业务的请求(如取款、转账等),柜员根据你的请求进行相应的处理,然后把处理结果反馈给你。在Java Web 开发中,Servlet 就像是银行柜员,客户端(如浏览器)发出的请求由 Servlet 接收和处理,处理完后将结果响应给客户端。
- 提问学生生活中还有哪些类似请求 - 处理 - 响应的场景,引导他们思考在编程中如何实现这种交互。
三、Servlet 基本概念
定义
Servlet 是 Java 编写的服务器端程序,运行在支持 Java 的应用服务器(如 Tomcat)中,用于处理客户端的请求并生成响应。它是 Java Web 开发的核心组件之一。
作用
- 处理客户端请求:接收来自客户端(如浏览器)的 HTTP 请求,如 GET、POST 请求。
- 生成响应内容:根据请求的内容进行相应的处理,并生成 HTML、JSON 等格式的响应内容返回给客户端。
- 与数据库交互:可以调用数据库操作的代码,实现数据的增删改查等功能。
优点
- 跨平台性:基于 Java 语言,具有良好的跨平台性。
- 可扩展性:可以方便地进行扩展和维护。
- 安全性:提供了一系列的安全机制,保障应用的安全。
四、Servlet 生命周期
生命周期阶段
加载和实例化
- 当客户端第一次请求某个 Servlet 时,Servlet 容器(如 Tomcat)会加载该 Servlet 的类文件,并创建 Servlet 实例。
初始化
- 调用 Servlet 的
init()
方法进行初始化操作,该方法在 Servlet 实例创建后只执行一次。通常用于初始化资源,如数据库连接、配置文件读取等。
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet 初始化...");
}
// 其他方法省略
}
服务
- 当客户端请求该 Servlet 时,Servlet 容器会调用
service()
方法处理请求。service()
方法根据请求的类型(如 GET、POST)调用相应的doGet()
或doPost()
方法。
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("处理客户端请求...");
}
销毁
- 当 Servlet 容器关闭或 Servlet 实例被销毁时,会调用
destroy()
方法,该方法用于释放 Servlet 占用的资源,如关闭数据库连接等。
@Override
public void destroy() {
System.out.println("Servlet 销毁...");
}
生命周期流程图
客户端请求 -> 加载和实例化 -> 初始化(init()) -> 服务(service()) -> 销毁(destroy())
五、编写和部署 Servlet
编写 Servlet
继承 HttpServlet 类
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello, Servlet!</h1>");
out.println("</body></html>");
}
}
代码解释
@WebServlet("/hello")
:使用注解的方式将该 Servlet 映射到/hello
路径。doGet()
方法:处理客户端的 GET 请求,将 HTML 内容输出到客户端。
部署 Servlet
使用 IDE(以 IntelliJ IDEA 为例)
- 创建一个新的 Dynamic Web Project。
- 在
src
目录下创建 Servlet 类。 - 配置 Tomcat 服务器,将项目部署到 Tomcat 中。
- 启动 Tomcat 服务器,访问
http://localhost:8080/项目名/hello
即可看到 Servlet 的响应内容。
六、Servlet 中请求和响应对象的使用
请求对象(HttpServletRequest)
获取请求参数
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
if (name != null) {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello, " + name + "!</h1>");
out.println("</body></html>");
}
}
代码解释
request.getParameter("name")
:获取客户端请求中名为name
的参数值。
获取请求头信息
String userAgent = request.getHeader("User-Agent");
System.out.println("客户端浏览器信息:" + userAgent);
响应对象(HttpServletResponse)
设置响应内容类型
response.setContentType("text/html; charset=UTF-8");
输出响应内容
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>这是响应内容</h1>");
out.println("</body></html>");
重定向
response.sendRedirect("http://www.example.com");
七、课堂练习
练习一
编写一个 Servlet,处理客户端的 POST 请求,接收客户端提交的用户名和密码,验证用户名是否为 admin
,密码是否为 123456
,如果验证通过,返回 “登录成功”,否则返回 “用户名或密码错误”。
练习二
编写一个 Servlet,获取客户端请求的 IP 地址,并将其输出到响应中。
八、课程总结
知识回顾
- 回顾 Servlet 的概念、作用和优点。
- 总结 Servlet 的生命周期和各个阶段的方法。
- 复习 Servlet 的编写和部署步骤,以及请求和响应对象的使用方法。
口诀总结
- “Servlet 是核心,处理请求有本领。生命周期四阶段,加载实例初化完。服务方法来处理,请求响应要牢记。注解映射路径明,部署之后能运行。”
九、课后作业
作业一
完善课堂上的登录验证 Servlet,将验证逻辑封装到一个独立的方法中,提高代码的可维护性。
作业二
研究并尝试使用 Servlet 实现一个简单的投票系统,用户可以通过表单提交投票信息,Servlet 负责处理投票请求并统计投票结果。