过滤器
监听器
一 过滤器
手动在web.xml配置过滤器
url-pattern设置过滤器要保护的资源的路径
每当我打开一次index.jsp页面或者第一个jsp.jsp页面,都会在控制台输出:-------------
表示先走过一次过滤器
添加注解的方式配置过滤器
value值代表要保护的资源路径,多个资源路径用花括号和逗号拼接
多个过滤器对同一个资源路径的执行顺序
虽然添加注解的方式比较方便,但触发过滤器先后执行顺序依据web.xml文件的先后顺序为准,因为web.xml配置文件最先被解析执行。
所以想要决定执行顺序,尽量在xml文件中配置过滤器。
或者每个过滤器起名一样,在名字后加123数字来决定先后顺序
过滤器的拦截目标
默认拦截重定向的访问,转发请求可以直接绕过过滤器直接访问资源路径
需要设置 dispatcher标签对其他访问方式进行拦截
对控制器所有以.do结尾设置请求数据和响应数据编码集为"utf-8"
这样就不用在控制器中写请求数据的编码集格式了
response.setContentType设置的是jsp界面文本的输出格式
实现一个用户登录过滤请求
login.jsp ,login.do -->登录
index.jsp (超链接: 登录 ,我的购物车,我的订单,商品列表)
car.jsp,car.do -->购物车
orders.jsp,order.do -->订单
goodsList.jsp,goodsList.do -->商品列表
要求: 购物车,订单必须登录后可访问 ,未登录则跳转到登录页面
2.1) 目录结构
1 需要登录后可访问 资源 都统一设置到/admin目录下
2 直接访问的资源 ,不放到此目录
二 监听器
可以监听WEB应用程序中request,session,application作用域 对象的状态。
这些对象的状态的改变监听器都能捕获。
当对象的状态产生了改变就自动被监听器捕获,并调用相应的方法。
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebListener public class Listener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener { public Listener() { } @Override public void contextInitialized(ServletContextEvent sce) { /* This method is called when the servlet context is initialized(when the Web application is deployed). */ System.out.println("-----------application创建"); } @Override public void contextDestroyed(ServletContextEvent sce) { /* This method is called when the servlet Context is undeployed or Application Server shuts down. */ System.out.println("------------application销毁"); } @Override public void sessionCreated(HttpSessionEvent se) { /* Session is created. */ System.out.println("-------------session建立"); } @Override public void sessionDestroyed(HttpSessionEvent se) { /* Session is destroyed. */ System.out.println("------------session销毁"); } @Override public void attributeAdded(HttpSessionBindingEvent sbe) { /* This method is called when an attribute is added to a session. */ } @Override public void attributeRemoved(HttpSessionBindingEvent sbe) { /* This method is called when an attribute is removed from a session. */ } @Override public void attributeReplaced(HttpSessionBindingEvent sbe) { /* This method is called when an attribute is replaced in a session. */ } }