会话技术:
会话:一次会话中发生多次请求和响应
一次会话:从浏览器的打开到关闭
功能:在会话的过程中 ,可以共享数据
cookie:客户端的会话技术
session:服务端的会话技术
Cookie:小饼干
Cookie是由服务器产生,然后通过response(Set-Cookie)对象写入浏览器,然后保存在浏览器端,
在request下一次访问的时候,通过cookie的请求头 将cookie带回浏览器
cookie 默认到期时间:会话结束
cookie的相关方法:
new Cookie(name,value):创建cookie对象
response.addCookie():写回浏览器
request.getCookies():获取cookie
c.setMaxAge(60*60);
//设置路径: 路径不一样 浏览器默认cookie 不是同一个
//如果向共享cookie 那么 路径设置为/ 就可以了
c.setPath("/aaaa");
//cookie失效:将MaxAge 设置成(0);即可 但是要注意 ,路径要相同
案例:记录上一次的登录时间:
分析: 如果是第一次登录 就显示 第一次登录
如果不是第一次登录 就显示上次登录的时间
总结:
cookie能不能存储中文:
tomcat8以前 不可以存储中文和特殊字符
tomcat8及以后:可以存储中文 但是不能存储特殊字符 (空格)
cookie的特点和作用:
1、cookie存储数据在客户端浏览器
2、cookie存储的数据由大小限制:4kb 同一个域名下的的总的cookie数量(20个)
补充:el表达式对 cookie的支持 ${}
${cookie.msg.value}
注意:
cookie.msg : 通过cookie的key值 获取整个cookie对象
cookie.msg.value: 通过javabean导航的规则 获取cookie对象的值
Session:
Session是由服务器产生,保存在服务器中
一个用户 对应一个session( 一个浏览器 对应一个session)
session的原理: JessionId session是依赖于cookie的
注意:如果服务器关闭 ,那么会产生一个新的session 和 新的session id
session的常用方法:
request.getSession()
setAttribute() getAttribute()
removeAttribute()
session 的默认有效时间:30分钟
session 失效的方法:
1、配置web.xml
<session-config>
<session-timeout>1</session-timeout>
</session-config>
2、手动的干掉session
session.invalidate();
3、代码设置session的保存时间
session.setMaxInactiveInterval(); 单位秒
验证码案例:session
javaweb:三大组件
servlet、Filter、listener
Filter:掌握 过滤器
概念:
生活中:净水器、空气净化器、土匪……
web中过滤器:当我们访问服务器的资源的时候,过滤某些请求,完成一些特殊的功能
作用:
一般用于完成通用的操作。例如:登录验证、统一字符编码……
入门:
步骤:
1、定义一个类,实现Filter接口
2、复习方法
3、配置Filter
1、web.xml
<!--<filter>-->
<!--<filter-name>FilterDemo1</filter-name>-->
<!--<filter-class>com.xmcc.filter.FilterDemo1</filter-class>-->
<!--</filter>-->
<!--<filter-mapping>-->
<!--<filter-name>FilterDemo1</filter-name>-->
<!--<url-pattern>/login.jsp</url-pattern>-->
<!--</filter-mapping>-->
2、注解
@WebFilter("/login.jsp")
过滤器的执行流程:
1、执行过滤器doFilter()
2、执行放行方法
3、执行filterChain.doFilter() 后的代码
Filter的声明周期:
1、init() 在服务器启动后 创建Filter对象的时候 执行一次
2、doFilter() 每一次请求被拦截 都会执行一次
3、destroy() 在服务器关闭以后 Filter对象被销毁的时候 调用一次
过滤器的配置:
1、拦截路径的配置:
/*: 拦截全部
/login.jsp : 只拦截login.jsp
/jsp/* : 拦截 jsp路径下的所有资源
*.jsp: 拦截所有的jsp资源
2、拦截方式:资源被访问的方式
Filter四种拦截方式:
* request(默认)
* forward (拦截转发)
* include (拦截包含)
* error (只拦截错误页面)
注解配置:
dispatcherTypes={DispatcherType.FORWARD}
web.xml配置
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/login.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
过滤器链的介绍
执行顺序;
FilterDemo1---去
FilterDemo2---去
FilterDemo2----回
FilterDemo1---回
注意:如果是通过web.xml配置的filter
谁配置在前面 谁就先执行
如果是注解:
根据Filter的名字 一个一个字母的比较 小的先执行
例如:AFilter 和 BFilter 那么 AFilter 先执行
案例:登录验证
Listener:监听器(了解)
事件监听:
事件:一件事情
事件源:事件发生的地方
监听器:一个对象
注册监听:将事件、事件源、监听器绑定在一起,当事件源上发生某个事件的时候 就执行监听器的代码
web:8种监听器
步骤:
1、定义一个类
2、复写方法
3、配置监听器
1、web.xml
<listener>
<listener-class>com.xmcc.listener.MyListener</listener-class>
</listener>
2、注解
@WebListener
例如:ServletContextListener
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//监听ServletContext的创建
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
//监听ServletContext对象的销毁
}
作用:获取初始化参数
1、设置初始化的参数
web.xml中设置初始化参数
<!-- 设置初始化参数 -->
<context-param>
<param-name>name</param-name>
<param-value>coco</param-value>
</context-param>