前言
-
JSP、Filter
都是 Servlet
的进化版,JSP负责视图展示
,Filter负责过滤
-
Servlet
规范中三大技术:Servlet、Filter、Listener
Filter 过滤器(单例)
拦截请求
与响应
权限控制、敏感词汇过滤、压缩加密响应信息等
1、创建一个Filter类,实现Filter接口
2、重写接口方法
3、web.xml配置Filter
<filter>
<filter-name>userFilter</filter-name>
<filter-class>com.tuobida.filter.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>userFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter其实是加了load-on-startup的servlet,换句话说:Tomcat启动时,Filter就已经加载创建并初始化好了
,所以一个应用每种过滤器只有一个
//放行请求
chain.doFilter(req, resp); //如果没有调用,则拦截
执行顺序
取决于<filter-mapping>在web.xml中的位置,越靠前越优先
1、获取FilterConfig名称
2、获取FilterConfig初始化参数
3、获取ServletContext对象
1、精确匹配,以‘/’开头
/user
2、匹配所有
/*
3、扩展名匹配
*.jsp
要想单独拦截某个Servlet该如何做呢?(2种方法)
1、配置 <filter-mapping> 的<url-pattern>值 = <servlet-mapping> 的<url-pattern>值
2、配置 <filter-mapping> 的<servlet-name>值
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()
作用:实现JSP页面的逻辑处理和流程控制
导入jar包
引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="name" value="120"></c:set> // 存数据到作用域对象中
<c:out value="${name}" default="0"></c:out> // 输出
<c:remove var="name"></c:remove>
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:include page="date.jsp" />
<jsp:forward page="相对 URL 地址" />
<jsp:param name="fontcolor" value="red" />
<jsp:useBean id="name" class="package.class" />
<jsp:setProperty name="myName" property="someProperty" .../>
<jsp:getProperty name="myName" property="someProperty" .../>
<%@ page contentType="text/html; charset=UTF-8" %>有什么用?
答:服务器响应浏览器时,response响应头会有这样一个数据:Content-Type:text/html; charset=UTF-8
(有点与<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />作用一样)
包含文件有2种形式,到底有什么区别?
静态包含(先包含,后编译):<%@ include file="/commons/taglibs.jsp"%>
动态包含(先运行,后包含):<jsp:include page="/commons/taglibs.jsp"/>
静态包含:在.jsp转化成.java时,2个.jsp文件转成1个.java文件,速度快
动态包含:在.jsp转化成.java时,2个.jsp文件转成2个.java文件,速度慢
使用原则:能用静态就不要使用动态,一般只使用静态包含
JAVAWEB 项目架构发展历程
- 第三级:
JSP+Servlet+JavaBean
(经典MVC)
Javeweb 执行流程(请求->响应)
注意:一般框架都会在web.xml文件中,重新定义默认Servlet或filter
用于拦截分发所有请求
到自己的架构里进行处理
如果请求URL无法匹配当前Servlet,就会使用默认Servlet来处理
(先判断URL是文件还是目录,如果是文件就转发,如果是目录就查询welcome-file-list配置)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。