Servlet、Listener、Filter、JSP

前言

  • JSP、Filter都是 Servlet 的进化版,JSP负责视图展示,Filter负责过滤
  • Servlet规范中三大技术:Servlet、Filter、Listener

Filter 过滤器(单例)

  • 作用
拦截 请求响应
  • 应用场景
权限控制、敏感词汇过滤、压缩加密响应信息等
  • 使用步骤
1、创建一个Filter类,实现Filter接口
2、重写接口方法
3、web.xml配置Filter
  • 配置Filter(在web.xml中)
    
        userFilter
        com.tuobida.filter.UserFilter
    
    
        userFilter
        /*
    
  • 初始化时机
Filter其实是加了load-on-startup的servlet,换句话说: Tomcat启动时,Filter就已经加载创建并初始化好了,所以一个应用每种过滤器只有一个
  • 多个Filter拦截顺序问题(过滤链)
//放行请求
chain.doFilter(req, resp);   //如果没有调用,则拦截
执行顺序取决于 在web.xml中的位置,越靠前越优先
  • FilterConfig对象的作用
1、获取FilterConfig名称
2、获取FilterConfig初始化参数
3、获取ServletContext对象
  • Filter映射规则配置
1、精确匹配,以‘/’开头
/user
2、匹配所有
/*
3、扩展名匹配
*.jsp
要想单独拦截某个Servlet该如何做呢?(2种方法)
1、配置 值 =
2、配置

Listener 监听器

  • 作用
监听 ServletContext、HttpSession、ServletRequest 三个对象的生命周期和属性变化事件

**ServletContext代表应用,一个应用对应一个ServletContext对象
**HttpSession代表Session,一个Session代表一个会话,一个浏览器对应一个会话
**ServletRequest代表请求,一个请求就会产生一个ServletRequest对象

按数量来分:ServletRequest > HttpSession > ServletContext
  • 分类
监听生命周期
ServletContextListener
ServletRequestListener
HttpSessionListener

监听属性变化事件
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
  • (多个监听器)执行顺序
按照监听器在web.xml中注册顺序执行
  • 监听器加载时机
在Tomcat启动时加载,ServletContext是Tomcat启动时为每一个应用创建的,HttpSession是浏览器第一次访问服务器时创建,ServletRequest是每次请求都会创建并销毁

Servlet 小程序 (单例)

  • 作用
作为web应用程序 入口接受请求并处理,一般MVC中,用作 控制器Controller
  • 使用步骤
1、创建一个Servlet类,实现 HttpServlet接口 或 Servlet接口
2、重写接口方法
3、web.xml配置Servlet
  • 执行过程
启动Tomcat的执行过程:加载每个项目的web.xml配置文件

当浏览器使用URL访问Tomcat时,
1、先查找是否有Tomcat服务器
2、再查找Tomcat中对应的web项目
3、再匹配查找对应Servlet
  • 生命周期
1、出生(初始化)
2、服务
3、死亡(Tomcat停止了)

JSP

JSP 实际上就是 Servlet,只是JSP与html更像作为视图模板
  • 基础语法
1、写Java代码   <%  %>   (代码都是在方法中执行,所以声明的变量都是局部的)
2、输出表达式   <%=  %>  (等同于out.print())
3、声明变量     <%!  %>  (全局声明,成员变量与成员方法)
  • 内置对象(九大内置对象)与 四种作用域对象
  • EL表达式
作用: 简化获取数据(获取四大作用域的数据)
${user.username}  ==  作用域对象.getAttribute("user").getUsername()
  • JSTL 标准标签库
作用:实现JSP页面的逻辑处理和流程控制
导入jar包
引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

               // 存数据到作用域对象中
          // 输出
  • 三种 JSP指令
1、page   
语法:<%@ page ... %>
主要属性:
import 导包
errorPage
pageEncoding
contentType

2、include
语法:<%@ include ... %>
主要属性:
file 

3、taglib
语法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  • 七种 JSP动作





  • 疑问
<%@ page contentType="text/html; charset=UTF-8" %>有什么用?

答:服务器响应浏览器时,response响应头会有这样一个数据:Content-Type:text/html; charset=UTF-8
(有点与作用一样)

包含文件有2种形式,到底有什么区别?
静态包含(先包含,后编译):<%@ include file="/commons/taglibs.jsp"%>
动态包含(先运行,后包含):

静态包含:在.jsp转化成.java时,2个.jsp文件转成1个.java文件,速度快
动态包含:在.jsp转化成.java时,2个.jsp文件转成2个.java文件,速度慢
使用原则:能用静态就不要使用动态,一般只使用静态包含

JAVAWEB 项目架构发展历程

  • 第一级:JSP

  • 第二级:JSP+JavaBean

  • 第三级:JSP+Servlet+JavaBean (经典MVC)

Javeweb 执行流程(请求->响应)

注意:一般框架都会在web.xml文件中, 重新定义默认Servlet或filter用于 拦截分发所有请求到自己的架构里进行处理

如果请求URL无法匹配当前Servlet,就会使用默认Servlet来处理先判断URL是文件还是目录,如果是文件就转发,如果是目录就查询welcome-file-list配置

你可能感兴趣的:(java-ee)