web
服务器:服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务
服务器软件:放在服务器上,为其他的客户机提供服务的软件,支持客户机的请求和对客户机作出响应。(只支持该服务特定服务的客户机)
Web服务器软件:放在服务器上,为其他的客户机提供服务的软件,支持客户机的请求和对客户机作出响应。(第三方厂商提供,可以支持部署多个web应用程序)
WebLogic: 由oracle公司提供一款收费的、高性能的web服务器软件。支持所有的JavaEE开发标准
WebSphere:由IBM公司提供一款收费的、高性能的web服务器软件。支持所有的JavaEE开发标准
JBOSS :是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
Tomcat:Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。(重点)
Tomcat
下载(tomcat.apache.org官网下载)
安装:解压即安装(注意:不能解压到具有中文或空格的目录下)
启动:点击bin/startup.bat启动
启动过程出现的问题:
闪退的问题:
端口号占用
解决办法:
暴力的方式:通过netstat -ano命令查看对应8080端口号所占用的PID,记住该PID并在任务管理器中,找到对应的PID并结束进程
温柔的方式:修改被占用的端口号,在con/server.xm文件中,找到端口号并修改(<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />)
使用80端口号,可以不用在地址栏上写端口号,浏览器默认使用80端口
JDK的环境变量配置有问题(%JAVA_HOME%、%CLASSPATH%)
解决办法: 打开环境变量重新配置以下(参考Java基础JDK的配置)
关闭:
点击bin/shutdown.bat关闭
直接点X(避免使用)
ctrl+c关闭
卸载:删除解压以后的目录
配置
打印日志乱码:找conf/loggings.properties文件,修改(java.util.logging.ConsoleHandler.encoding = UTF-8)的编码
修改端口号:找到conf/server.xml文件,修改(<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />)端口号
项目的部署
直接将项目拷贝到webapps目录下
直接将项目打包为war包到webapps目录下
将需要部署项目的路径和虚拟路径在server.xml中进行配置(<Context path="/hello" docBase="D:\hello"></Context>)path:是虚拟路径也就是地址栏访问的路径,docBase是真实路径也就是项目所在的位置(了解)
在conf/catalina/localhostm目录下新建一个XML文件,文件的内容就是需要部署的项目的路径真实路径(<Context docBase="D:\hello"></Context>),XML文件的文件名就是虚拟路径
Tomcat目录结构
动态资源在tomcat中的目录结构
项目部署到webapps下的目录结构
-WEB-INF
-classes 被tomcat编译为字节码文件的代码
-lib 项目所依赖的jar包
-web.xml 核心配置文件
-静态资源(imgs、js、css、html)
IDEA集成Tomcat
Servlet
概述:
Servlet由Servlet容器提供,所谓的Servlet容器是指提供了Servlet 功能的服务器(本书中指Tomcat),Servlet容器将Servlet动态的加载到服务器上。与HTTP 协议相关的Servlet使用HTTP请求和HTTP响应与客户端进行交互。因此,Servlet容器支持所有HTTP协议的请求和响应。
tomcat->servlet容器->servlet接口->servlet类
入门开发
创建一个类,这个类去实现servlet接口并重写servlet中的方法
配置servlet
执行原理
执行原理
浏览器发出请求,携带请求资源
由tomcat解析请求资源
再到web.xml中查找是否具有该请求的资源
如果没有该资源就出现404状态码,如果有就找到该资源对象servlet的名字并定位到servlet
通过全限定类名利用反射创建对象,并通过对象去调用service方法
service执行逻辑代码并作出响应
生命周期
init方法
用于初始化对象或加载资源
只会被执行一次(servlet只会被创建一次(单例))
每个人访问的对象都是同一个对象那就意味着数据安全的问题
Java基础保证数据安全可以加锁,但是现在不能加锁(性能不好)
解决方案:
将成员变量改为局部变量
定义成员变量的时候尽可能不要赋值,并使用的过程中,不要修改变量
service方法
用于接收客户端发送的请求和对客户端做出响应
客户端发送一次请求该方法就执行一次
destroy方法
用于销毁servlet对象
可以用该方法关闭资源
Servlet注解的方式
servlet3.0以后提供注解的方式去配置servlet
使用@WebServlet来配置servlet,
value
urlPatterns
loadOnStartup
Servlet体系结构
Servlet接口
GenricServlet抽象类
HttpServlet类
url-pattern的使用规则:
url-pattern的使用方式:
1. /XXX
2. /XXX/YYY
3. *.do *.action *.html
4. /*
* 注意:
1. 多个url-pattern时,不能重复
2. 不能直接使用*或/
3. 启动tomcat出错,考虑url-pattern是否配置错误
HTTP协议
概述:
HTTP是Hyper Text Transfer Protocol的缩写,即超文本传输协议。
它是一种基于TCP/IP请求/响应式的协议,客户端在与服务器端建立连接后,
就可以向服务器端发送请求,这种请求被称作HTTP请求,
服务器端接收到请求后会做出响应,称为HTTP响应
HTTP专门用于定义浏览器与服务器之间交换数据的过程以及数据本身的格式
特点:
一次请求一次响应
请求和请求之间是独立的,不能进行数据交换
是一种面向连接的无状态的协议,提高了响应的效率和安全性
组成部分
请求
请求行
请求方式 协议 URL
常用请求方式:
Get请求
数据直接暴露在url上
传输数据量有限
不安全
Post请求
数据不会暴露在url上
传输的数据量是无限
相对安全
协议
协议的版本
http/1.0
请求和响应一次就连接一次,相对来说效率低下
http/1.1
第一次请求就一值建立连接,保持连接相对说效率高
URL(统一资源定位符)
ip地址+端口号+请求资源
请求头
请求行
请求携带的信息(以键值对的方式携带)
请求空行
就是一个空行,目的在于隔开请求头和请求正文
请求正文
发出请求向浏览器传输的数据(登录时的用户名和密码、上次文件时的文件)
请求正文只有POST请求才有
响应
响应行
组成:协议 响应状态码 响应状态码的描述
响应状态码(由三位数字组合)
1XX 表示消息
2XX 表示成功 代表200
3XX 表示重定向 代表302 304
4XX 表示请求错误 代表404 405
5XX 表示服务器内部错误 代表500
响应头
Server: Tengine 服务的类型
Content-Type: image/jpeg 响应内容的类型还可以指定客户端浏览器解码的方式
Content-Length: 12365 响应内容的长度
Date: Mon, 14 Sep 2020 12:42:30 GMT 响应时间
响应空行
响应正文:就是服务器响应给客户端的数据(一张图片、JS代码、HTML)
Request对象
概述:客户端在请求服务器的时候,服务器就会创建一个请求对象(Request对象),通过该对象就可以实现客户端和服务器之间的请求操作(客户端给服务端发送数据、服务端可以获取客户端发送的数据,通过该对象该可以获取请求消息)
产生和体系结构
产生:服务器(Tomcat)创建的
体系结构:
ServletRequest接口
HttpServletRequest接口继承了ServletRequest接口
RequestFacade类实现了HttpServletRequest接口
注意:使用请求对象时,由tomcat创建了RequestFacade的对象
具体的作用
获取请求消息中的数据
请求行
组成:请求方式 + URL + 协议
案例:GET localhost:8080/day02/hello?name=zhangsan HTTP/1.1
方法:
String getMethod()获取请求方式(GET、POST、PUT)
String getQueryString()获取请求参数(name=zhangsan)
(*)String getRequestURI()获取请求的统一资源标识符(/day02/hello)
(*)StringBuffer getRequestURL()获取请求的统一资源定位符(localhost:8080/day02/hello)
统一资源标识符比统一资源定位符的资源范围更广
(*)String getServletPath()获取请求的Servlet路径(/hello)
String getProtocol()获取请求的协议(HTTP/1.1)
String getRemoteHost()获取请的IP和端口号(localhost:8080)
(*)String getContextPath()获取请求的虚拟路径(/day02)
请求头
String gerHeader(String name)通过请求头的键获取值
Enumeration<String> getHeaderNames()获取所有请求头中的键
请求正文
BufferedReader getReader()获取字符输入流读取请求正文
InputStream getInputStream()获取字节输入流读取请求正文
其他功能(核心功能)
获取请求参数
请求参数:客户端发送给服务器的数据
方法:
String getParameter(String var1);通过键获取值
Enumeration<String> getParameterNames();获取所有的键
String[] getParameterValues(String var1);通过键获取所由的值
Map<String, String[]> getParameterMap();获取所有的键和值
注意:
获取参数的乱码问题:
get提交:tomcat8.0以后就对get请求的方式的乱码进行了处理
post提交:乱码,tomcat并未作出处理,需要调用request对象中的setCharacterEncoding("编码")来处理乱码
请求转发:一次请求在服务器内部的多次跳转的过程(服务器的行为)
步骤:
通过请求对象(request)来获取RequestDispatcher并指定跳转的资源
通过RequestDispatcher对象中的forward(req,resp)方法跳转
RequestDispatcher dispatcher =
request.getRequestDispatcher("/request06");
dispatcher.forward(request,response);
request.getRequestDispatcher("/request07").forward(request,response);
特点
一次请求(url地址不会发送改变,始终保持请求转发之前的URL)
可以数据的共享(绑定到请求对象上的数据)
数据共享
作用域:数据可以被访问的区间(请求转发的资源之间)
方法:
void setAttribute(String var1, Object var2)将数据var2绑定到request请求对象上并取名为var1
void removeAttribute(String var1);将绑定在请求对象上的名字为var1的数据删除
Object getAttribute(String var1);获取绑定到请求对象上的名字为var1的数据
String str = "a lot of data";
request.setAttribute("data",str);
Object data = request.getAttribute("data");
request.removeAttribute("data");
获取ServletContext对象
ServletContext servletContext = request.getServletContext();
Response
概述:服务器在响应客户端的时候,服务器就会创建一个响应对象(Response对象),通过该对象就可以实现服务器和客户端之间的响应操作(服务端发送数据给客户端、客户端接收数据并显示,通过该对象该可以获取响应消息)
体系结构
ServletResponse接口
HttpServletResponse接口继承了ServletResponse接口
ResponseFacade类实现了HttpServletResponse接口
功能
设置响应内容
响应行
设置状态码 setStatus(int i)
响应头
setHeader(String key,String value)
响应正文
获取字符输出流
response.getWriter();
字符输出流向浏览器响应中文文本或文件会出现乱码问题
解决办法:
response.setContentType("text/html;charset=utf-8");该方法的原理是通过设置响应头的Content-type属性
获取字节输出流
response.getOutputStream()
重定向
特点:
1. 两次请求
2. 地址栏会发生变化(相对于跳转之前的地址)
3. 不仅仅只是在服务器内部跳转
4. 重定向不能共享request对象中的数据
转发:
特点
一次请求
地址栏不会发送改变
只能在服务器内部跳转
可以共享request对象中的数据
面试题:
请阐述forward和redirect的区别?
路径问题
相对路径
规则:相对于当资源去定位到目标资源,不能定位到唯一的资源
相对路径以./开头
返回上级目录../
注意:相对路径比较麻烦,当前资源定位目标资源比较复杂,后续将尽可能使用绝对路径
绝对路径
规则:是以/开头,可以通过绝对路径定位到唯一的资源;
注意:绝对路径不同的场景使用的方式也不一样,不一样在于虚拟路径加不加的问题
当此绝对路径是在客户端被使用时,就需要添加虚拟路径 /day03
当此绝对路径是在服务器被使用是,就不需要添加虚拟路径
注意:在服务器端不能将虚拟路径写死,需要使用request对象获取虚拟路径,然后动态的定义虚拟路径;另在服务器端绝对路径的使用不加虚拟路径的情况一般就转发。
(案例)验证码
ServletContext对象(web应用上下文对象)
概述:是一个web应用的上下文,一个web应用只有一个ServletContext对象
生命周期:伴随着Tomcat的启动该web应用的ServletContext对象就创建,Tomcat关闭该web应用的ServletContext对象就销毁,(一个web应用对应一个ServletContext对象)。
获取ServletContext的方式
request.getServletContext()
this.getServletContext()
功能
作用域(整个web应用):共享数据
Object getAttribute(String name) 从ServletContext对象上获取数据
void setAttribute(String name, Object object) 将数据绑定到ServletContext对象上
void removeAttribute(String name) 将数据从ServletContext对象上删除
注意:共享的数据可以在整个web应用被实现共享
再次注意:因为作用域太大,慎用
案例:统计网站的访问量
获取MIME类型
String getMimeType(String file) 获取文件的MIME类型
获取服务器文件的真实路径
servletContext.getRealPath(FIlename str)该方法一般用于上传文件和下载文件时使用
会话
会话
概述:客户端和服务器多次请求和响应过程中共享数据的过程。
原理
通过请求和响应来实现会话
实现
Cookie 客户端会话技术
Session 服务端会话技术
Cookie
概述:基于客户端浏览器会话的一种技术
原理:
setCookie:name=zhangsan 响应
Cookie:name=zhangsan 请求
使用
Cookie c1 = new Cookie(String name,String data);创建Cookie
response.addCookie(c1) 添加Cookie
request.getCookies() 获取Cookie
Cookie可以存放多个吗?
可以,但是同一个域名(tomcat)下的Cookie数量是有限的,一般最多只能有20个Cookie
生命周期如何?
默认情况当浏览器关闭Cookie就销毁
其他情况需要是setMaxAge(int second)
正数:表示在浏览器中持久化多秒(关闭浏览器再打开也存在)
零:表示删除Cookie
负数:和默认情况一致
是否可以在同一个服务资源中跨应用访问
默认情况不可以,但是可以通过Cookie中的setPath()来设置
是否可以跨服务资源访问
默认情况不可以,但是可以通过Cookie中的setDomain()来设置
Cookie中是否可以存中文和特殊字符
在tomcat8以后的版本都是可以支持中文数据设置到Cookie的
特殊的字符不可以,可以使用URL编码进行发送,获取Cookie再进行URL解码
URLEncoder.encode(String str,String charset)编码
URLDecoder.decode(String str,String charset)解码
Cookie的特点
存放在浏览器
一个Cookie最多存放4k的数据,同一个域名(tomcat)下的Cookie数量是有限的,一般最多只能有20个,因此存放数据量有限
不安全,一般用存放一些无关紧要的数据
Cookie使用案例(浏览记录、浏览时间)
Session
概述:也是一种会话技术,基于服务端会话的技术,客户端和服务端之间多次请求和响应之间共享数据
入门开发
获取Session对象 request.getSession()
绑定数据 session.setAttribute(String str,Object obj)
从Session对象移除数据 session.removeAttribute(String str)
原理
Session的细节
服务器不关闭,浏览器关闭,是否可以获取到session中的数据?
默认找不到,因为浏览器默认情况下关闭就会清空Cookie,那么在浏览器Cookie中的JSESSIONID也就没有了,没有JSESSIONID就找不到服务器中对应的Session
可以通过Cookie设置一下名字为JSESSIONID的Cookie的失效时间
Cookie cookie = new Cookie("JSESSIONID",session1.getId());
cookie.setMaxAge(300);
response.addCookie(cookie);
服务器关闭,浏览器不关闭,是否可以获取session中的数据?
在IDEA中不行
当项目部署到Tomcat(tomcat8以后)中是可以继续访问之前的数据的
Session保持多久?
默认情况保持30分钟
可以在当前IDEA的此项目的web.xml中和tomcat下的config/web.xml中修改
<session-config>
<session-timeout>30</session-timeout>
</session-config>
可以通过session调用invalidate()方法立即销毁
特点
数据存放在服务器端,JSESSION的Cookie存放在浏览器
session可以存放大量数据
安全性高
案例
JSP
- 概述:JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。(动态网页的技术标准、可以处理客户端请求和对客户端进行响应,可以理解为一个特殊的HTML)
- 原理
- 访问JSP时,tomcat会将当前访问的xxx.jsp在tomcat内部创建一个类xxx_jsp.java,并将其编译为一个字节码文件
- JSP本质就是一个Servlet
- 脚本:写的代码相当于在servlet中
- <% 代码 %>小脚本:相当于在Service方法中写代码
- <%! 代码 %> 大脚本:相当于在Servlet中Service外写代码
- <%=表达式 %>表达式:相当于在Service方法中使用print()方法
- 指令
- 语法:<%@ 指令 属性=属性值… %>
- 常用的指令
- page
- 常用属性:
-
contentType:设置响应编码
-
language:指定JSP编程语言
-
errorPage:指定错误页面(当前页面出现异常跳转的页面)
-
import:用于导包
-
isELIgnored:是否忽略EL表达式
-
include:包含,使用file属性指定包含的jsp
-
taglib
-
注释
-
HTML的注释
-
JSP的注释 <%-- 注释内容 --%>
-
JSP注释不能在浏览器页面源码看到,而HTML注释着可以看到
-
内置对象
-
pageContext
-
page
-
application
-
out
-
request
-
response
-
session
-
config
-
exception
-
特点:
-
极大的简化了Servlet开发
MVC -
概述:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
EL表达式
-
概述:EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
-
语法:${表达式}
-
作用:简化JSP表达式
-
运算符
-
算术运算符
-
关系运算符
-
逻辑运算符
-
empty
获取数据
从域对象中获取数据,如果没有指定那个域对象,那么就从域对象的范围由小到大查找该属性
pageContext
${pageScope.attr}
request
${requsetScope.attr}
session
${sessionScope.attr}
application
a p p l i c a t i o n S c o p e . a t t r 注 意 : {applicationScope.attr} 注意: applicationScope.attr注意:{xxxScope.attr}中xxxScope可以省略,从域对象中获取数据,从域对象的范围由小到大查找该属性attr
获取域对象中绑定的对象以及对象中的属性
获取绑定对象的名字以及绑定对象的属性的getXX和setXX方法
${user.name}
name -> Name -> getName()
获取List中的数据
${域对象中绑定的名字[下标].对象的属性}
${域对象中绑定的名字.get(下标).对象的属性}
${list[0].name}
${list.get(0).name}
获取Map中的数据
${域对象中绑定的名字[“key”].对象的属性}
${域对象中绑定的名字.key.对象的属性}
${map[“user”].name}
${map.user.name}获取项目虚拟路径
${pageContext.request.contextPath}
JSTL标准标签库
概述:JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
使用步骤:
导包 jstl.jar
通过taglib指令引入jar包,prefix前缀属性,uri指定核心包
使用
1. <c:set> 属性var value
2. <c:if> 属性test
3. <c:choose><c:when><c:otherwise>结合使用类似switch-case
4. <c:foreach>循环
AJAX
概念:Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
同步和异步的区别
使用方式
原生ajax
获取ajax对象
var xhttp;
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
通过ajax对象打开链接
通过ajax对象发送请求
处理响应
jquery的ajax
$.ajax(url,[settings])
url:表示请求的资源
settings表示参数选项:
常用的参数选项:
contentType 指定发送信息至服务器时内容的编码类型(MIME类型)
data 发送到服务器的数据.值的格式(字符串、json格式)
type 指定请求的方式
dataType 预期服务器返回的数据类型
text 文本
html html文本
json json格式
jsonp jsonp格式
success 请求响应成功以后执行的回调函数
error 请求响应失败以后执行的函数
$.get()
$.post()
JSON
概念:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
语法
JSON 语法衍生于 JavaScript 对象标记法语法:
数据在名称/值对中
数据由逗号分隔
花括号容纳对象
方括号容纳数组
值的数据类型:
字符串
数字
对象(JSON 对象)
数组
布尔
null
创建
var stu1 = {"name":"张三","age":18,"gender":"男"};
var stus = {
"stu1":{"name":"张三","age":18,"gender":"男"},
"stu2":{"name":"李四","age":20,"gender":"女"},
"stu3":{"name":"王五","age":19,"gender":"男"}
};
var stus = {
"stu1":{"name":"张三","age":18,"gender":"男","hobby":["打游戏","美女"]},
"stu2":{"name":"李四","age":20,"gender":"女","hobby":["逛淘宝","帅哥"]},
"stu3":{"name":"王五","age":19,"gender":"男","hobby":[{"name":"QQ飞车","level":134},{"name":"QQ炫舞","level":135}]}
};
var stus = [
{"name":"张三","age":18,"gender":"男","hobby":["打游戏","美女"]},
{"name":"李四","age":20,"gender":"女","hobby":["逛淘宝","帅哥"]}
];
注意:
将JSON格式的字符串转换为JSON对象:var obj = JSON.parse(str);
将JSON对象转换为JSON格式的字符串:var str = JSON.stringify(obj);
获取JSON中的数据
json对象.键
json对象["键"]
解析JSON
常用的JSON解析器
GSON、Jsonlib、FastJson、JackSon
将Java对象转换为JSON
导包
创建ObjectMapper
调用方法
mapper.writeValueAsString(obj);
mapper.writeValue(OutputStream out, Object obj );
将JSON转换为Java对象
导包
创建ObjectMapper
调用方法
mapper.readValueAsString(String str,Class c);
过滤器与监听器
过滤器
概述:Servlet API中提供了一个Filter接口,开发web应用时,
如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。
通过Filter技术,开发人员可以实现用户在访问某个目标资源之前(请求)对资源进行预处理,对服务器响应进行后处理。
入门使用
创建一个Java类并实现Filter接口
重写Filter接口中的方法(init、doFilter、destory)
配置过滤器(配置过滤资源)
执行原理
浏览器发出请求进入过滤器,过滤器进行预处理
通过FilterChain调用doFilter()方法放行进入对应的资源
资源处理完成,服务器作出响应后进入Filter中放行以后的代码
过滤器进行后处理响应完成
生命周期
init:过滤器的初始化方法,执行一次
doFilter:过滤器的过滤方法,请求一次就执行一次
destory: 过滤器的销毁方法,执行一次
过滤器链
多个过滤器对某些资源进行过滤
一个过滤器执行完继续往后执行
如:现有过滤器a,b
执行顺序:请求-a-b-资源-b-a-响应
执行过滤器的优先级:
如果是在web.xml中配置过滤器就看配置的顺序
如果是注解配置过滤器就看当前过滤器类的类名的顺序
如果既有web.xml配置也有注解配置,则先看web.xml的顺序再看注解的类名的顺序
拦截过滤的配置方式
*.jsp:过滤jsp页面
/*:过滤所有内容(jsp/servlet/html)
/demo:过滤某个Servlet