Java Servlet基础概念与开发环境准备
Java Servlet是Java EE技术中用于开发动态Web资源的核心组件,它运行在Web服务器端,负责接收客户端请求并生成响应,与传统的CGI技术相比,Servlet具有性能优越、可扩展性强、生命周期管理清晰等优势,开发Servlet应用需要以下环境准备:

- JDK安装:确保安装Java开发工具包(建议JDK 8及以上版本),配置好
JAVA_HOME环境变量。 - Web服务器:选择Tomcat(Apache)、Jetty或WebLogic等支持Servlet规范的容器,Tomcat因轻量易用成为初学者的首选。
- 开发工具:IntelliJ IDEA、Eclipse等集成开发环境(IDE)可简化Servlet开发流程,建议安装IDE的Web开发插件。
- 依赖管理:若使用Maven或Gradle,需在项目中添加Servlet API依赖(如
javax.servlet:javax.servlet-api:4.0.1)。
Servlet核心接口与生命周期
Servlet开发需理解其生命周期方法,这些方法由Web容器调用,控制Servlet的初始化、运行和销毁:
init(ServletConfig config)
- 作用:Servlet实例创建后,容器调用此方法进行初始化(仅执行一次)。
- 参数:
ServletConfig包含Servlet的配置信息(如初始化参数)。 - 示例:
@Override public void init(ServletConfig config) throws ServletException { String param = config.getInitParameter("initParam"); System.out.println("Servlet初始化,参数:" + param); }
service(ServletRequest request, ServletResponse response)
- 作用:容器每次请求时调用,处理客户端请求并生成响应(核心方法)。
- 注意:通常无需重写此方法,而是继承
HttpServlet并重写doGet()/doPost()等方法。
destroy()
- 作用:Servlet实例被销毁前调用(如服务器关闭时),用于释放资源(仅执行一次)。
- 示例:
@Override public void destroy() { System.out.println("Servlet销毁,释放资源"); }
创建第一个Servlet:步骤与代码实现
编写Servlet类
继承HttpServlet(抽象类,继承自GenericServlet,并简化了HTTP协议处理),重写doGet()或doPost()方法:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应内容类型为HTML
response.setContentType("text/html;charset=UTF-8");
// 获取输出流并写入响应内容
response.getWriter().println("<h1>欢迎使用Servlet!</h1>");
response.getWriter().println("<p>当前时间:" + new java.util.Date() + "</p>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理POST请求(例如表单提交)
String username = request.getParameter("username");
response.getWriter().println("<h1>POST请求接收用户名:" + username + "</h1>");
}
}
配置Web描述符(web.xml)
在WEB-INF目录下创建web.xml文件,映射Servlet的URL模式:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- Servlet注册 -->
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>com.example.FirstServlet</servlet-class>
<!-- 可选:初始化参数 -->
<init-param>
<param-name>initParam</param-name>
<param-value>helloServlet</param-value>
</init-param>
</servlet>
<!-- Servlet映射 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
部署与测试
- 将项目打包为WAR文件(或直接在IDE中部署Tomcat),访问
http://localhost:8080/项目名/first即可触发doGet()方法。 - 若需测试POST请求,可创建HTML表单并设置
action="/first"和method="post"。
Servlet高级特性与最佳实践
请求与响应处理
- 获取请求参数:通过
request.getParameter("paramName")获取GET/POST请求参数。 - 设置响应状态:
response.setStatus(200)设置状态码,response.sendRedirect("url")实现重定向。 - 请求转发与包含:
request.getRequestDispatcher("target.jsp").forward(request, response)转发请求(服务器端跳转),include()包含其他资源。
会话管理
Servlet通过HttpSession接口管理用户会话,
// 获取或创建会话
HttpSession session = request.getSession();
// 存储会话属性
session.setAttribute("user", "张三");
// 获取会话属性
String user = (String) session.getAttribute("user");
过滤器(Filter)与监听器(Listener)
- Filter:预处理请求和后处理响应,例如字符编码过滤:
@WebFilter("/*") public class EncodingFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); // 放行请求 } } - Listener:监听Servlet生命周期事件(如
ServletContextListener监听应用启动/销毁)。
异常处理
通过web.xml配置错误页面,捕获特定异常:
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
总结与进阶方向
Java Servlet作为Java Web开发的基石,掌握其核心概念(生命周期、请求响应处理、会话管理)是构建动态应用的基础,实际开发中,建议结合MVC模式将业务逻辑与视图分离,并逐步学习Spring MVC等现代框架(它们基于Servlet思想封装了更便捷的功能)。

进阶学习方向包括:异步处理(AsyncContext)、WebSocket通信、安全控制(Filter实现认证)等,通过持续实践,可逐步提升Web应用的开发效率与性能。
















