Servlet 知识点汇总与简析
一、Servlet 基础概念
1. Servlet 定义
Servlet 是用 Java 编写的服务器端程序,运行在 Web 服务器或应用服务器上,作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2. Servlet 生命周期
-
初始化阶段:调用
init()方法- 在 Servlet 实例创建后立即调用
- 只调用一次
- 用于一次性初始化工作
-
服务阶段:调用
service()方法- 每次请求都会调用
- 根据请求类型调用
doGet()、doPost()等方法
-
销毁阶段:调用
destroy()方法- 在 Servlet 被卸载前调用
- 只调用一次
- 用于释放资源
3. Servlet 接口层次结构
Servlet (接口)
↑
GenericServlet (抽象类)
↑
HttpServlet (抽象类)
二、Servlet 核心组件
1. Servlet API 主要接口和类
- javax.servlet.Servlet:核心接口
- javax.servlet.GenericServlet:与协议无关的抽象类
- javax.servlet.http.HttpServlet:HTTP 协议专用的抽象类
- javax.servlet.ServletConfig:Servlet 配置接口
- javax.servlet.ServletContext:Servlet 上下文接口
- javax.servlet.http.HttpServletRequest:HTTP 请求接口
- javax.servlet.http.HttpServletResponse:HTTP 响应接口
2. HttpServletRequest 详解
-
获取请求信息:
getParameter(String name):获取请求参数getParameterValues(String name):获取多个同名参数getParameterMap():获取所有参数MapgetHeader(String name):获取请求头getMethod():获取请求方法(GET/POST等)
-
请求转发:
getRequestDispatcher(String path):获取请求转发器
3. HttpServletResponse 详解
-
设置响应:
setContentType(String type):设置内容类型setCharacterEncoding(String charset):设置字符编码getWriter():获取PrintWriter输出文本getOutputStream():获取ServletOutputStream输出二进制
-
重定向:
sendRedirect(String location):发送重定向
三、Servlet 配置
1. web.xml 配置
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>value</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
2. 注解配置 (Servlet 3.0+)
@WebServlet(
name = "MyServlet",
urlPatterns = {"/myservlet"},
initParams = {
@WebInitParam(name = "config", value = "value")
},
loadOnStartup = 1
)
public class MyServlet extends HttpServlet {
// ...
}
四、Servlet 高级特性
1. 过滤器(Filter)
- 用于预处理请求和后处理响应
- 实现
javax.servlet.Filter接口 - 配置方式:
或使用注解:<filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>@WebFilter("/*") public class MyFilter implements Filter { // ... }
2. 监听器(Listener)
- 用于监听 Web 应用中的事件
- 常用监听器:
ServletContextListener:监听上下文生命周期HttpSessionListener:监听会话生命周期ServletRequestListener:监听请求生命周期
3. 异步处理(Servlet 3.0+)
@WebServlet(urlPatterns = "/async", asyncSupported = true)
public class AsyncServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
AsyncContext asyncContext = req.startAsync();
asyncContext.start(() -> {
// 长时间处理
asyncContext.complete();
});
}
}
五、Servlet 会话管理
1. Cookie
// 创建Cookie
Cookie cookie = new Cookie("name", "value");
cookie.setMaxAge(3600); // 设置有效期(秒)
response.addCookie(cookie); // 添加到响应
// 读取Cookie
Cookie[] cookies = request.getCookies();
for (Cookie c : cookies) {
if (c.getName().equals("name")) {
String value = c.getValue();
}
}
2. HttpSession
// 获取Session
HttpSession session = request.getSession();
// 设置属性
session.setAttribute("key", "value");
// 获取属性
Object value = session.getAttribute("key");
// 使Session失效
session.invalidate();
六、Servlet 异常处理
1. 错误页面配置
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
2. 异常处理方式
- 在Servlet中捕获异常并处理
- 使用过滤器统一处理异常
- 配置错误页面
七、Servlet 安全
1. 基本认证配置
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Protected Area</realm-name>
</login-config>
2. 编程式安全
// 检查用户角色
boolean isAdmin = request.isUserInRole("admin");
// 获取用户信息
String username = request.getRemoteUser();
八、Servlet 最佳实践
- 线程安全:Servlet 是单例多线程的,避免使用实例变量
- 资源管理:在
init()中获取资源,在destroy()中释放 - 性能优化:使用缓冲、合理设置内容类型和编码
- 异常处理:统一处理异常,提供友好的错误页面
- 日志记录:使用日志框架记录重要事件
九、Servlet 3.0+ 新特性
- 注解支持:@WebServlet, @WebFilter, @WebListener
- 异步处理:AsyncContext 支持
- 可插拔性:模块化部署
- 文件上传:Part API
- 动态注册:ServletContext 动态添加组件
十、Servlet 与 JSP 关系
- Servlet:适合处理业务逻辑和控制流程
- JSP:适合生成动态HTML内容
- MVC 模式:
- Servlet 作为控制器(Controller)
- JavaBean 作为模型(Model)
- JSP 作为视图(View)
2645

被折叠的 条评论
为什么被折叠?



