Javaweb(servlet深入)
在Javaweb中,servlet是处理客户端请求的核心组件,负责接收请求、处理业务逻辑并生成响应。下面将为您介绍servlet的方法:
一、servlet基础原理与核心机制
1、本质与生命周期
本质:servlet是运行在web服务器()如tomcat上的Java类,必须实现javax.servlet.Servle(接口)通常通过继承HttpServlet简化开发,是Javaweb的"控制器"核心
生命周期(由web容器管理):
init():初始化阶段,容器创建servle实例后调用,用于加载资源(如数据库连接),仅执行一次
service():处理请求耳洞核心方法,容器每次收到请求都会调用(多线程环境),根据请求方式(GET/POST等)分发到doGet()/doPost()等方法
destroy():销毁阶段,容器关闭或servlet被移除时调用,用于释放资源(如关闭连接)
2、核心作用:
请求处理:接收客户端(浏览器)的HTTP请求(封装到HttpServletRequest对象中),解析请求参数、Cookie、Session等信息
业务逻辑:调用Service层处理具体业务(如用户登录验证、数据查询)
响应生成:通过HttpServletsponse对象生成响应(如返回HTML、JSON、重定向或转发)
映射访问
1、通过web,xml配置或注解(@WebServlet)将Servlet与URL路径绑定。例如:
@WebServlet("/user/login") // 访问路径:http://localhost:8080/项目名/user/login public class LoginServlet extends HttpServlet { ... }
2、容器根据 URL 匹配对应的 Servlet 实例处理请求
//登录:service层 函数名,要以功能来,要以功能来命名
//Dao层以数据库的操作命名
//ServletContext:代表了这个站点,同时是一个域对象,
范围:整个站点,域对象数据的存储都是key = value 的形式
//域对象:色绿了他context,session。request、page
//注意:servletcontext的生命周期太长,我们要手动收回
//利用ServletContext的读取外部的配置文件,如果是servlet要访问的资源是相当于web的路径,普通Java 类的资源可以放在src
例如:InputStream in = servletContext.getResource As Streaml "....";
二、Servlet高级特性与实践
1、会话管理
Servlet:Servlet通过HTTP Session对象维护用户会话状态,解决HTTP无状态问题。例如:
HttpSession session = request.getSession();
session.setAttribute("user", currentUser); // 存储用户信息
Cookie:通过response.addCookie()
设置客户端 Cookie,用于存储轻量信息(如记住登录状态)
2、请求转发与重定向
转发(Forward):通过RequestDispatcher
在服务器内部跳转,共享request
和response
对象,URL 不变:
request.getRequestDispatcher("/success.jsp").forward(request, response);
重定向(Redirect):服务器返回 302 状态码,客户端重新请求新 URL,URL 改变,不共享请求对象:
response.sendRedirect("/index.jsp");
3、过滤器(Filter)与监听器(Listener)
过滤器:拦截 Servlet 请求 / 响应,用于统一处理(如编码设置、权限校验),通过@WebFilter
配置:
@WebFilter("/*") // 拦截所有请求
public class EncodingFilter implements Filter {
public void doFilter(...) {
request.setCharacterEncoding("UTF-8"); // 统一编码 chain.doFilter(request, response); // 放行
}
}
监听器:监听 ServletContext、Session、Request 等对象的创建 / 销毁或属性变化,用于初始化全局资源(如加载配置文件)
4、异常处理
传统Servlet处理请求为同步阻塞模式,JDK+引入同步Servlet(@WebServlet(asyncSupported = true)),允许Servlet将请求交给线程处理,释放容器线程,提升高并发能力
3、与其他组件的协作
与JSP配合:Servlet处理逻辑后,转发到JSP渲染视图(MVC模式中的C层)
与数据库交互:通过JDBC或ORM框架(如MyBatis)在Servlet中操作数据,实现动态内容生成