文章目录
- 简介
- 控制器servlet
- 控制器(Controller)概述
- 控制器的工作原理
- 控制器的生命周期
- 控制器的种类
- 控制器的应用场景
- 示例代码
- Servlet控制器示例
- Spring MVC控制器示例
- 总结
- 过滤器filter
- 过滤器(Filter)概述
- 过滤器的工作原理
- 过滤器的生命周期
- 过滤器的链式调用
- 过滤器的应用场景
- 示例代码
- 总结
- 监听器Listener
- 监听器是Web应用程序事件模型的一部分
- HttpSessionBindingListener接口![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8d9288c43c09454e8afc3edd8a521159.png)
- 实现步骤
- 实现在线用户统计的步骤
- HttpSessionBindingListener示例代码
- valueBound()和valueUnbound()方法
- HttpSessionListener接口:
- HttpSessionListener和ServletContextListener
- HttpSessionListener、HttpSessionBindingListener二者的 区别
- 常用监听器接口
简介
JavaWeb中的控制器servlet、过滤器filter和监听器listener是三种常用的组件,用于处理请求和响应、过滤和监听事件。
-
控制器servlet:
控制器servlet是处理用户请求并生成响应的组件。它可以接收HTTP请求,调用业务逻辑处理请求并生成响应。控制器servlet通常继承自javax.servlet.http.HttpServlet类,并通过重写doGet()和doPost()方法来处理GET和POST请求。它可以接收请求参数、访问数据库或其他资源,并将处理结果发送给客户端。 -
过滤器filter:
过滤器filter是用于在请求到达servlet之前或响应返回给客户端之前对请求和响应进行处理的组件。过滤器可以拦截请求、修改请求参数、验证用户身份、记录日志等。过滤器接收HTTP请求并可以修改请求的头、内容或包装请求使其符合特定要求。同样地,它可以接收HTTP响应并修改响应的内容或包装响应使其符合特定要求。过滤器通常实现javax.servlet.Filter接口,并通过重写doFilter()方法进行请求和响应的处理。 -
监听器listener:
监听器listener是用于监听Web应用程序中事件的组件。它可以监听ServletContext、HttpSession和ServletRequest等对象的创建、销毁以及属性变化等事件。监听器可以用于在事件发生时执行某些任务,比如在ServletContext初始化时加载配置信息、在HttpSession创建时记录用户登录信息等。监听器通常实现javax.servlet.ServletContextListener、javax.servlet.http.HttpSessionListener或javax.servlet.ServletRequestListener接口,并通过重写相应的方法来监听事件。
这三种组件在JavaWeb开发中经常被使用,可以根据不同的需求来选择合适的组件来处理请求、过滤和监听事件。
控制器servlet
学习JavaWeb中的控制器(Controller)是非常重要的,控制器通常用于接收用户请求、调用业务逻辑处理请求,并将处理结果返回给客户端。以下是关于JavaWeb控制器的学习笔记:
控制器(Controller)概述
- 控制器是JavaWeb应用中用于接收和处理用户请求的组件,通常负责调度请求、调用服务层处理业务逻辑,并最终返回响应给客户端。
- 控制器可以是一个Servlet、一个Spring MVC的Controller类或者其他框架提供的处理请求的组件。
控制器的工作原理
- 控制器接收来自客户端的请求,通常通过URL映射来确定具体的处理方法。
- 控制器调用服务层组件进行业务逻辑处理,可能涉及数据库操作、调用其他服务等。
- 控制器将处理结果封装成响应,返回给客户端。
控制器的生命周期
@WebServlet(name="indexServlet",urlPatterns = {"/index"})
public class IndexServlet extends HttpServlet {
//生命周期
//1.实例化
public IndexServlet(){
System.out.println("实例化IndexServlet");
}
//2.初始化 init
public void init() throws ServletException {
System.out.println("初始化init");
}
//3.提供服务(服务化) doget dopost 这两个方法可以重写
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
QuantityIndexService quantityIndexService =new QuantityIndexServiceImpl();
List<QuantityIndex> list = quantityIndexService.getQuantityIndexs();
request.getSession().setAttribute("list",list);
response.sendRedirect("index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("welcome1.jsp");
}
//4.销毁 destory
public void destroy() {
}
}
控制器的种类
- Servlet控制器:基于Servlet实现的控制器,通过继承
HttpServlet
类来处理请求。 - Spring MVC控制器:基于Spring MVC框架实现的控制器,通过
@Controller
注解标识处理请求的类和方法。 - Struts控制器:基于Struts框架实现的控制器,通过配置文件或注解来映射请求和处理方法。
控制器的应用场景
- 业务逻辑处理:控制器负责调度业务逻辑的执行,将请求转发给合适的服务层组件进行处理。
- 请求参数处理:控制器可以从请求中获取参数,进行验证和处理。
- 视图渲染:控制器通常会将处理结果传递给视图层进行渲染,生成最终的响应。
- 异常处理:控制器可以捕获异常并进行适当的处理,如返回错误信息或跳转到错误页面。
示例代码
Servlet控制器示例
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理GET请求
PrintWriter out = response.getWriter();
out.println("Hello, World!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理POST请求
PrintWriter out = response.getWriter();
out.println("Hello, World!");
}
}
Spring MVC控制器示例
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "helloPage";
}
}
总结
控制器是JavaWeb应用中的重要组件,负责接收和处理用户请求,调度业务逻辑并返回响应给客户端。不同框架提供了不同类型的控制器实现,开发人员可以根据需求选择合适的控制器来实现业务逻辑。建议深入学习控制器的相关知识,并结合实际项目应用来加深理解和掌握。
过滤器filter
学习JavaWeb中的过滤器(Filter)是非常重要的,它可以在请求到达Servlet之前或者响应返回给客户端之前对请求和响应进行预处理和后处理。以下是关于JavaWeb过滤器的学习笔记:
过滤器(Filter)概述
- 过滤器是JavaWeb中用于对请求和响应进行拦截、过滤和处理的组件。
- 过滤器可以在请求到达Servlet之前对请求进行预处理,也可以在响应返回给客户端之前对响应进行后处理。
- 过滤器可以用于实现日志记录、权限控制、字符编码转换、数据压缩等功能。
过滤器的工作原理
- 过滤器通过实现
javax.servlet.Filter
接口来创建,需要实现init()
、doFilter()
和destroy()
方法。 - 在
doFilter()
方法中,可以对请求和响应进行处理,还可以调用FilterChain
对象的doFilter()
方法来将请求传递给下一个过滤器或Servlet。 - 过滤器可以在
web.xml
配置文件中进行配置,指定过滤器的名称、URL模式、初始化参数等信息。
过滤器的生命周期
- 过滤器的生命周期由容器管理,容器在第一次请求到达过滤器时调用
init()
方法进行初始化,然后在过滤器不再需要时调用destroy()
方法进行销毁。
过滤器的链式调用
- 多个过滤器可以通过链式调用来依次处理请求,每个过滤器可以决定是否将请求传递给下一个过滤器或Servlet。
过滤器的应用场景
- 日志记录:记录请求信息、响应时间等。
- 权限控制:验证用户是否有权限访问某些资源。
- 字符编码转换:统一设置请求和响应的字符编码。
- 数据压缩:对响应数据进行压缩以提高传输效率。
- 防止跨站点脚本攻击(XSS):过滤请求参数中的恶意脚本。
- 缓存控制:控制缓存的行为,如设置缓存过期时间等。
示例代码
public class MyFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// 初始化操作
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 对请求进行处理
// 可以在这里进行日志记录、权限控制等操作
// 将请求传递给下一个过滤器或Servlet
chain.doFilter(request, response);
// 对响应进行处理
// 可以在这里进行数据压缩、字符编码转换等操作
}
public void destroy() {
// 销毁操作
}
}
总结
JavaWeb中的过滤器(Filter)是一个强大的功能组件,可以用于对请求和响应进行灵活的处理和控制。通过合理地使用过滤器,可以提高Web应用的安全性、性能和可维护性。建议深入学习过滤器的相关知识,并结合实际项目应用来加深理解和掌握。
监听器Listener
监听器是Web应用程序事件模型的一部分
- 监听器用于监听Web应用中特定事件的发生,并在事件发生时执行相应的操作。
- 监听器可以用于捕获ServletContext、HttpSession、ServletRequest等域对象的状态变化事件,以及域对象中属性的变化事件。
HttpSessionBindingListener接口
实现步骤
- 创建类实现相应的监听器接口,如
HttpSessionBindingListener
。 - 在实现的监听器接口中,实现相应的方法,如
valueBound()
和valueUnbound()
。 - 将监听器实例添加到对应的作用域对象中,如
session
作用域。
实现在线用户统计的步骤
- 创建类实现
HttpSessionBindingListener
接口。 - 在
valueBound()
方法中实现在线用户数量加1。 - 在
valueUnbound()
方法中实现在线用户数量减1。 - 将监听器实例添加到
session
作用域中。
HttpSessionBindingListener示例代码
public class UserSessionListener implements HttpSessionBindingListener {
public void valueBound(HttpSessionBindingEvent event) {
// 用户对象存入session时自动调用,用户数量加1
}
public void valueUnbound(HttpSessionBindingEvent event) {
// 用户对象从session中删除时自动调用,用户数量减1
}
}
valueBound()和valueUnbound()方法
valueUnbound方法会在三种情况下自动调用
- 调用使session失效的方法:session.invalidate()
- session超时
- 调用setAttribute重新设置了别的对象,或是调用removeAttribute移除了这个属性
HttpSessionListener接口:
sessionCreated(HttpSessionEvent event)
sessionDestroyed(HttpSessionEvent event)
- 执行session.invalidate()方法
- session会话超时
使用在HttpSessionListener接口需要在web.xml中配置监听器:
<listener>
<listener-class>监听器完全限定名</listener-class>
</listener>
HttpSessionListener和ServletContextListener
HttpSessionListener
用于监听整个应用中的session
的创建和销毁事件。ServletContextListener
用于监听ServletContext
对象的初始化和销毁事件。
HttpSessionListener、HttpSessionBindingListener二者的 区别
HttpSessionListener
只需要设置到web.xml就可以监听整个应用中的所有session
HttpSessionBindingListener
必须实例化后放入某一个session中,才能监听。
HttpSessionListener
设置一次就可以监听整个应用中的所有session
,而HttpSessionBindingListener
通常是一对一的监听。- 监听器接口包括
ServletContextListener
、HttpSessionListener
、HttpSessionBindingListener
等,用于监听不同层次的事件。
常用监听器接口
ServletContextListener
:在Servlet上下文对象初始化或销毁时得到通知。ServletRequestListener
:在请求对象初始化时或者被销毁时得到通知。HttpSessionListener
:在session
创建后或者失效前得到通知。- 其他如
ServletContextAttributeListener
、ServletRequestAttributeListener
等,用于监听属性变化事件。
通过合理使用监听器,可以实现对Web应用中各种事件的监听和处理,从而增强Web应用的灵活性和功能性。