session:
概念:服务器会话端技术,在一次会话的多次请求间共享数据,将数据保存在服务器的对象中,httpsession
快速入门:
获取session对象
HttpSession session = request.getSession();
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessiondemo1")
public class Sessiondemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session来共享数据
//1获取session
HttpSession session = request.getSession();
//2存储数据
session.setAttribute("msg","hello zhangxiansheng");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package com.zhang.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessiondemo2")
public class Sessiondemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session来共享数据
//1获取session
HttpSession session = request.getSession();
//2获取数据
Object msg=session.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
session的原理:
session的实现是依赖于cookie的
session的细节:
- 当客户端关闭后,服务器不关闭,两次获取session是否是同一个?
默认情况下,不是,
如果需要相同,则可以创建cookie,键为jsession,设置最大存活时间,让cookie持久化保存,
setMaxAge(60*60)时间为一小时
response。addcookie(c);
- 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失,tomcat自动完成一下工作
session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上
session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。
- session什么时候销毁?
- 服务器关闭
- session对象调用invalidate
- session默认失效时间30分钟,这个时间可以更改,
session的特点:
- session存储数据在服务器端,cookie在客户端
- session没有数据大小限制,cookie有
- session数据安全,cookie相对于不安全
- --------------------------------------------------------------------------------------------
MVC:
今日内容,
- Filter:过滤器
- Listener:监听器(加上servlet是web的三大组件)
#Filter;过滤器
有两种方式配置:
第一种:
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦下来,完成一些特殊的工能。
过滤器的作用:一般用于完成通用的操作,如:登录验证,统一编码处理,敏感字符过滤。。。
快速入门:
定义一个类,实现接口Filter
复写方法
配置拦截路径:
web.xml和servlet
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filterdemo1被执行了");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
过滤器细节:
- web.xml配置,可以在这里配置一些要拦截的一些信息。也可以直接在注解中配置。
<filter>
<filter-name>demo1</filter-name>
<filter-class>cn.itcast.filter.Filterdemo2</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- 过滤器执行流程
执行过滤器
执行放行后的资源
回来执行过滤器放行代码下边的代码
第二种;注解配置
@WebFilter("/*")
public class Filterdemo4 implements Filter {
//每一次请求被拦截资源时,会执行
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//对request对象请求消息增强
System.out.println("dofiter...");
//放行,交给下一个过滤器,或者servlet处理
chain.doFilter(req,resp);
}
//在服务器启动后,会创建filter对象,然后调用init方法
public void init(FilterConfig config) throws ServletException {
System.out.println("init....");
}
//在服务器关闭后被销毁,如果正常关闭会执行destory方法
public void destroy() {
System.out.println("destory...");
}
----------------------------------------------
监听器:
listener监听器
监听器是servlet规范中定义的一种特殊类,用于监听ServletContext(application)、HttpSession(session)和ServletRequest(request)等域对象的创建与销毁事件,以及监听这些与对象属性发生修改的事件。可以在事件发生之前,之后做一些处理。
事件监听机制:
事件:一件事情
事件源:事情发生的地方
监听器:一个对象
祖册监听:将事件,事件源,监听器绑定到一起,当事件源上发生某个事件之后,执行监听器代码
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class firstListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("listener init.........");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("listener destory..........");
}
}
注册监听器:
<listener>
<listener-class>firstListener</listener-class>
</listener>
定义一个类,继承接口,
实现方法
配置监听器