服务器会为每个工程创建一个全局唯一且工程内部都共享的对象,叫做全局应用程序共享对象(ServletContext对象)。
二、作用1、域对象
服务器在内存上创建的储存空间,用于不同动态资源之间传递与共享数据
2、可读取全局配置参数
3、可搜索当前工程目录下的资源文件
4、获取当前工程名字
5、使用方法:
setAttribute(name,value);name是String类型,value是Object类型; 往域对象里面添加数据,添加时以key-value形式添加 getAttribute(name); 根据指定的key读取域对象里面的数据 removeAttribute(name); 根据指定的key从域对象里面删除数据
例子:
setAttribute()
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
context.setAttribute("name","张三");
System.out.println("成功");
}
getAttribute(name):
package com.zhujiantao;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/OnServlet")
public class OnServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
System.out.println(servletContext.getAttribute("name"));
System.out.println("成功了!");
}
输入地址OnServlet返回:张三、成功了!
三、获取文件的真实路径context.getRealPath("");
会话技术一、基本理解
用户打开浏览器,点击链接访问服务器web资源,然后关闭浏览器,整个过程称为一次会话。在用户与服务器交互期间产生的数据,程序想将数据进行保存等操作时,就需要用到会话技术
二、Cookie、Session基本理解
1、Cookie:为客户端技术,程序把每个用户的数据以cookie的形式保存到各自的浏览器中,当用户用浏览器再次访问服务器中web资源时,就会带着各自的数据(cookie)过去。这样,web资源处理的就是用户各自的数据了。
步骤:
(1)创建cookie对象 • new Cookie(String name,String value); (2)发送cookie对象 • response.addCookie(Cookie cookie); (3)获取cookie对象,拿到数据 • Cookie[] request.getCookies();
注意:
1.可以一次发送多个cookies
创建多个Cookes对象,通过response.addCookie();添加多次
2.在浏览器中保存的时长
默认情况下,当浏览器关闭的时候,cookie会被销毁
3.持久化存储:
cookie.setMaxAge(int seconds);
正数: 将cookie数据写到硬盘中,持久化存储
负数: 默认
0: 删除cookie信息
2、Session:是服务器端技术,利用这个技术,服务器在运行时会为每一个用户的浏览器创建一个独享的session对象。由于这个session为用户浏览器所独享,所以用户在访问服务器时,可以把各自的数据放在各自的session中,当用户再次访问服务器中的web资源时,其他web资源再从用户各自的session中取出这个数据来为用户服务。
步骤:
HttpSession session = request.getSession(); Session.setAttribute(); 请求另一个sevlet中,可以获取会话的session数据 HttpSession session = request.getSession(); session.getAttribute();
注意:
1.session的实现是依赖于cookie的
2.当客户端关闭后,服务器不关闭,两次获取的sessionId默认是不一样的。
如果需要相同,则可以创建cookies,键为JSESSIONID,设置最大的存活时间
HttpSession session = request.getSession();
Cookies c = new Cookies("JSESSIONID",session.getId());
c.setMaxAge(10*10);
response.addCookies(c);
3.当客户端没关闭,服务器关闭后,两次获取的sessionId默认是不一样的。
4.session销毁
服务器关闭时,session失效
session对象调用 invalidate();
session的默认失效时间30分钟, 在tomcat的conf目录下的web.xml,配置session-config
session的特点-
session用于存储一次会话的多次请求的数据,存在服务器端
-
sessioni可以存储任意类型,任意大小的数据
-
session存储数据在服务器端, Cookie在客户端
-
session没有数据大小限制, Cookie有
-
session数据安全, Cookie相对于不安全
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理 作用:通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。一般用于登陆验证、统一编码处理等。
二、使用
1.定义一个类,实现接口filter
2.重写方法
3.配置拦截路径
配置方式: (1) web.xml(2)注解
package com.zhujiantao;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterServler implements Filter {
@Override
//请求、响应、
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);//放行
}
}
拦截路径配置
1. /index.jsp 访问index.jsp时,被拦截 2. /usr/* 访问/usr下的所有资源时被拦截 3. *.jsp 访问所有后缀名为.jsp的资源时被拦截 4. /* 拦截所有的资源
注解
-
实现Filter接口
-
添加@WebFilter注解,实现doFilter 方法
-
过滤器放行 chain.doFilter(request, response);
拦截方式配置
设置dispatcherTypes属性
1、QEQUEST:默认值。浏览器直接请求资源 2、FORWARD:转发访问资源 3、INCLUDE:包含访问资源 4、ERROR:错误跳转资源 5、ASYNC:异步访问资源
1.在注解中,使用dispatcherTypes属性
2.在web.xml中
设置
web.xml配置的方式
filter名称 filter路径 filter名称 /*
多个过滤器的顺序
1.注解配置
会按照类名顺序比较,值小的先执行。比如: AFilter和BFilter,AFilter就先执行
2.web.xml配置



