JavaWeb里的控制器Servlet,过滤器Filter,监听器Listener

简介

JavaWeb中的控制器servlet、过滤器filter和监听器listener是三种常用的组件,用于处理请求和响应、过滤和监听事件。

  1. 控制器servlet:
    控制器servlet是处理用户请求并生成响应的组件。它可以接收HTTP请求,调用业务逻辑处理请求并生成响应。控制器servlet通常继承自javax.servlet.http.HttpServlet类,并通过重写doGet()和doPost()方法来处理GET和POST请求。它可以接收请求参数、访问数据库或其他资源,并将处理结果发送给客户端。

  2. 过滤器filter:
    过滤器filter是用于在请求到达servlet之前或响应返回给客户端之前对请求和响应进行处理的组件。过滤器可以拦截请求、修改请求参数、验证用户身份、记录日志等。过滤器接收HTTP请求并可以修改请求的头、内容或包装请求使其符合特定要求。同样地,它可以接收HTTP响应并修改响应的内容或包装响应使其符合特定要求。过滤器通常实现javax.servlet.Filter接口,并通过重写doFilter()方法进行请求和响应的处理。

  3. 监听器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类或者其他框架提供的处理请求的组件。

控制器的工作原理

  1. 控制器接收来自客户端的请求,通常通过URL映射来确定具体的处理方法。
  2. 控制器调用服务层组件进行业务逻辑处理,可能涉及数据库操作、调用其他服务等。
  3. 控制器将处理结果封装成响应,返回给客户端。

控制器的生命周期

@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() {
}
}

控制器的种类

  1. Servlet控制器:基于Servlet实现的控制器,通过继承HttpServlet类来处理请求。
  2. Spring MVC控制器:基于Spring MVC框架实现的控制器,通过@Controller注解标识处理请求的类和方法。
  3. Struts控制器:基于Struts框架实现的控制器,通过配置文件或注解来映射请求和处理方法。

控制器的应用场景

  1. 业务逻辑处理:控制器负责调度业务逻辑的执行,将请求转发给合适的服务层组件进行处理。
  2. 请求参数处理:控制器可以从请求中获取参数,进行验证和处理。
  3. 视图渲染:控制器通常会将处理结果传递给视图层进行渲染,生成最终的响应。
  4. 异常处理:控制器可以捕获异常并进行适当的处理,如返回错误信息或跳转到错误页面。

示例代码

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之前对请求进行预处理,也可以在响应返回给客户端之前对响应进行后处理。
  • 过滤器可以用于实现日志记录、权限控制、字符编码转换、数据压缩等功能。

过滤器的工作原理

  1. 过滤器通过实现javax.servlet.Filter接口来创建,需要实现init()doFilter()destroy()方法。
  2. doFilter()方法中,可以对请求和响应进行处理,还可以调用FilterChain对象的doFilter()方法来将请求传递给下一个过滤器或Servlet。
  3. 过滤器可以在web.xml配置文件中进行配置,指定过滤器的名称、URL模式、初始化参数等信息。

过滤器的生命周期

  • 过滤器的生命周期由容器管理,容器在第一次请求到达过滤器时调用init()方法进行初始化,然后在过滤器不再需要时调用destroy()方法进行销毁。

过滤器的链式调用

  • 多个过滤器可以通过链式调用来依次处理请求,每个过滤器可以决定是否将请求传递给下一个过滤器或Servlet。

过滤器的应用场景

  1. 日志记录:记录请求信息、响应时间等。
  2. 权限控制:验证用户是否有权限访问某些资源。
  3. 字符编码转换:统一设置请求和响应的字符编码。
  4. 数据压缩:对响应数据进行压缩以提高传输效率。
  5. 防止跨站点脚本攻击(XSS):过滤请求参数中的恶意脚本。
  6. 缓存控制:控制缓存的行为,如设置缓存过期时间等。

示例代码

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接口在这里插入图片描述
实现步骤
  1. 创建类实现相应的监听器接口,如HttpSessionBindingListener
  2. 在实现的监听器接口中,实现相应的方法,如valueBound()valueUnbound()
  3. 将监听器实例添加到对应的作用域对象中,如session作用域。
实现在线用户统计的步骤
  1. 创建类实现HttpSessionBindingListener接口。
  2. valueBound()方法中实现在线用户数量加1。
  3. valueUnbound()方法中实现在线用户数量减1。
  4. 将监听器实例添加到session作用域中。
HttpSessionBindingListener示例代码
public class UserSessionListener implements HttpSessionBindingListener {
    public void valueBound(HttpSessionBindingEvent event) {
        // 用户对象存入session时自动调用,用户数量加1
    }
    
    public void valueUnbound(HttpSessionBindingEvent event) {
        // 用户对象从session中删除时自动调用,用户数量减1
    }
}

valueBound()和valueUnbound()方法

valueUnbound方法会在三种情况下自动调用

  1. 调用使session失效的方法:session.invalidate()
  2. session超时
  3. 调用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通常是一对一的监听。
  • 监听器接口包括ServletContextListenerHttpSessionListenerHttpSessionBindingListener等,用于监听不同层次的事件。

常用监听器接口

  • ServletContextListener:在Servlet上下文对象初始化或销毁时得到通知。
  • ServletRequestListener:在请求对象初始化时或者被销毁时得到通知。
  • HttpSessionListener:在session创建后或者失效前得到通知。
  • 其他如ServletContextAttributeListenerServletRequestAttributeListener等,用于监听属性变化事件。

通过合理使用监听器,可以实现对Web应用中各种事件的监听和处理,从而增强Web应用的灵活性和功能性。

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

分才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值