java Web中的三大器

先看一张图,对三大器的的作用范围有一个大致的了解

java三大器.PNG

监听器(listener)

作用

1.首先监听器的作用的范围最长。

2.监听器的监听事件源分别为ServletContext,HttpSession和ServletRequest这三个域对象。

因此,可以用监听器来统计有多少人访问此网站。

根据以上描述,大概知道了监听器的作用,接下来我们一起看看监听器到底是什么

在java中”一切皆对象“,所以我们可以把监听器理解为一个对象,我们只需要知道里面的方法,并能够灵活运用就可以了。

package com.dbstudy.demo;

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

public class IndexLinstener implements ServletRequestListener {

@Override

public void requestDestroyed(ServletRequestEvent sre) {

}

@Override

public void requestInitialized(ServletRequestEvent sre) {

}

}

与serverletRequestListener的方法一样,其他监听器的主要方法也分为两个

//初始化方法

public void init(Event eve){

System.out.println("我来了......")

}

//销毁方法

public void destroy(Event eve){

System.out.println("我走了......")

}

所以,可以根据监听器来获取网站的访问量。

这里,就涉及到javaweb域对象的知识点了,首先,监听器能监听的ServletContext,HttpSession和ServletRequest对象他们分别对应着

域对象

创建时间

销毁时间

ServletContext

浏览器发出第一个请求

浏览器关闭,或者服务器关闭

ServletRequest

浏览器发出一次请求

这个请求结束

HttpSession

浏览器发出一次会话

这个会话结束

过滤器(Filter)

拦截器,就是对请求进行拦截的,比如:可以进行用户登陆的判断。Filter也是一个接口类,可以通过它的方法对Filter的作用及用法进行一个了解。

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import java.io.IOException;

@Component

@WebFilter

public class IndexFilter implements Filter {

private Logger logger=LoggerFactory.getLogger(this.getClass());

@Override

public void init(FilterConfig filterConfig) throws ServletException {

//过滤器初始化

logger.info("我是过滤器,我已经初始化。。。。。。");

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest) servletRequest;

HttpServletResponse response= (HttpServletResponse) servletResponse;

HttpSession session= request.getSession();

Object user=session.getAttribute("UserName");

//如果是登陆页面就直接放行

String path=request.getRequestURI();

logger.info(path);

if(path=="/login.html")

{

logger.info("是登陆页面,已经放行。。。。。。");

filterChain.doFilter(request,response);

return;

}

//如果没有找到该用户

if (user==null)

{

logger.info("未登陆访问。。。。。。");

return;

}

filterChain.doFilter(servletRequest,servletResponse);

logger.info("登陆了以后访问。。。。。。");

}

@Override

public void destroy() {

}

}

监听器与过滤器是属于servlet的知识点。过滤器通常用法是对http请求进行一些预处理,比如设置字符,而filter的主要方法是初始化,进行过滤和销毁。

拦截器(Interceptor)

拦截器实在Spring MVC中的知识点,他和过滤器的基本作用是一样的,用于对请求进行拦截和过滤,主要运用于防止用户不登录就访问某一页面。

HandlerInterceptor 接口中定义了三个方法,我们就是通过这三个方法来对用户的请求进行拦截处理的。

(1 )preHandle (HttpServletRequest request, HttpServletResponse response, Object handle) 方法,顾名思义,该方法将在请求处理之前进行调用。SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle 方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。

(2 )postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法,由preHandle 方法的解释我们知道这个方法包括后面要说到的afterCompletion 方法都只能是在当前所属的Interceptor 的preHandle 方法的返回值为true 时才能被调用。postHandle 方法,顾名思义就是在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行,这和Struts2 里面的Interceptor 的执行过程有点类型。Struts2 里面的Interceptor 的执行过程也是链式的,只是在Struts2 里面需要手动调用ActionInvocation 的invoke 方法来触发对下一个Interceptor 或者是Action 的调用,然后每一个Interceptor 中在invoke 方法调用之前的内容都是按照声明顺序执行的,而invoke 方法之后的内容就是反向的。

(3 )afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) 方法,该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。

public class LoginHandlerInterceptor implements HandlerInterceptor {

//进行访问前执行的方法 只有当preHandler返回true才可以正常访问

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

return false;

}

//

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}

}

另外,关于拦截器的配置可以在Spring Boot配置接口 WebMvcConfigurer中配置

@Configuration

public class MvcConfig implements WebMvcConfigurer {

//模型视图控制

@Override

public void addViewControllers(ViewControllerRegistry registry) {

registry.addViewController("/index").setViewName("login");

registry.addViewController("/*").setViewName("login");

}

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html");

}

}

最后用一张图来总结三大器:

java三大器.PNG

java中三web_Java Web中的三大器相关推荐

  1. java通过struts实现web中的文件下载

    上一篇已经记录了 web中的文件上传功能 java通过struts实现web中的文件上传 本篇记录下载功能 定义一个Action类,FileDownload.java package com.stru ...

  2. java 问号乱码_Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  3. java通过struts实现web中的文件上传

    单文件上传 fileupload.jsp <%@ page language="java" import="java.util.*" pageEncodi ...

  4. php三种web开发技术,三种WEB开发主流技术ASP-PHP-JSP的评价

    三种Web开发主流技术ASP-PHP-JSP的评价 [摘要]本文从程序开发者的角度,对现今社会盛行的WEB开发技术进行了分析,旨在让WEB 开发人员.使用者.准备学习的人对WEB开发技术有更加深入的了 ...

  5. java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...

    一.实现的具体功能 (1)实现用户在线数量的统计,并显示在页面上. (2)实现强制用户下线的功能.创建一个超链接,用于实现强制用户下线的功能. (3)监听session的创建和销毁. 二.代码实现 ( ...

  6. 一种使用Java的快速将Web中表格转换成Excel的方法

    背景 随着后疫情时代的到来,在过去的2022年,全国的经济情况,想必是很多学者和研究对象都非常关心的事.而这些数据在国家统计局网站上都有相应的记录.通过分析这些数据,可以从某一个角度来验证和观察当下的 ...

  7. java 三级考试_java web 学习 --第三天(Java三级考试)

    Jsp中的动作标签 实现动态包含,在一个文件里包含另一个文件 动作标签的包含结果是"结果的合并"而不是内容的合并 定义和实例化JavaBean组件类的对象实例 该动作标签创建Jav ...

  8. java怎么注销cookie_java web中cookie的永久创建与撤销

    标签: 一.首先是创建cookie 当在数据库中查找知道所输入的用户名和密码正确之后,就开始创建: String cb=request.getParameter("cb");//c ...

  9. java cookie 永久_java web中cookie的永久创建与撤销

    一.首先是创建cookie 当在数据库中查找知道所输入的用户名和密码正确之后,就开始创建: String cb=request.getParameter("cb");//cb就是登 ...

最新文章

  1. 在SpringBoot项目中使用redis简单用法(一)
  2. kafka的一些常用命令
  3. Spring Boot Vue从零开始搭建系统(三):项目前后端分离
  4. delphi ---break,exit,continue等跳出操作的区别
  5. if condition 大于_条码打印软件之脚本编程的应用(if语句)
  6. UART串口通信浅谈之(一)--基础概述
  7. oracle 整个表空间迁移,oracle11g迁移表空间
  8. 【Leetocde | 24 】152. 乘积最大子序列
  9. python编辑邮件格式_python发送邮件模板
  10. javaTemplates-学习笔记四
  11. Oracle IMP数据时报20001错误
  12. linux 进程崩溃log,linux调试:dmesg 查看程序崩溃原因分析方法之一
  13. 华为手机怎样才算激活了_外观专利到底怎样才算侵权呢?
  14. 流程管理系统成功实施的六个步骤
  15. Microsoft Access 2002中文版标准培训教程pdf
  16. 政务信息系统整合共享实施方案
  17. 零基础云计算学习路线,到底什么是云计算?
  18. R语言与机器学习学习笔记(分类算法)(1)K-近邻算法
  19. e4a 蓝牙温度app_IIOT应用之Arduino无线蓝牙温湿度和距离测量系统
  20. max7456 C语言,用于MAX7456随屏显示器SPI接口的C程序

热门文章

  1. mt6765和骁龙665哪个好_联发科mt6765怎么样?和联发科P30/P35/P40处理器区别对比哪个好...
  2. 国家的超级计算机用处,超级计算机是什么,有什么用处?
  3. python turtle如何写字_python的turtle库可以利用代码写字吗?
  4. mysql case when then end 和 if判断 常见使用方法
  5. CEF Xilium.CefGlue 防止浏览器闪退
  6. 【VUE基础】Vuex
  7. 0xc000007b解决办法支持列表
  8. 还没35岁的我已经快秃了
  9. Linux系统下rar软件的安装以及如何解压文件
  10. P2P原理 和技术演变(概念性质)