javaweb会话层面

1.会话概述

用户打开浏览器,点击了很多个url,访问了多个web资源,关闭浏览器,这个过程就是会话

1.1网站怎么证明你来过

  • Cookie服务端会给客户端发一个信件 客户端下次再访问服务端携带信件即可
  • Session服务端对客户端做标记,下次客户端再访问,通过标记即可匹配
    在这里插入图片描述

1.2Cookie和session区别

  • Cookie把数据写给用户的浏览器保存(可保存多个)
  • Session把数据写给用户自己独有的SessionId
  • Server保存(保存重要的信息,减少Server资源浪费),Session由服务器创建
  • Cookie的构造器只能携带String类型参数,而Session可携带Object类型参数

2.Cookie

//1.传给客户端一个cookie
Cookie cookie = new Cookie("name", "携带参数");
//设置cookie有效期 单位/s
cookie.setMaxAge(600);
resp.addCookie(cookie);

//2.从客户端获取cookie
Cookie[] cookies = req.getCookies();

//3.获取客户端cookie里携带的参数
PrintWriter out = resp.getWriter();
if (cookies != null){
    out.write(cookie.getValue());
}else {
    out.write("cookie 不存在");
}
//需要强制停止cookie时候,只需新建一个实现了servlet的类
//再响应一个setMaxAge为0的cookie到客户端即可
//两个cookie的构造器形参要相同

3.Session

session创建

//获取一个session
HttpSession session = req.getSession();
//session可以携带Object类型
session.setAttribute("name",new JavaBean("李华",29));

//每个session都有自己唯一的sessionID
String id = session.getId();
PrintWriter writer = resp.getWriter();

//通过inNew()判断此session的新旧
if (session.isNew()){
    writer.print("create success!"+id);
}else {
    writer.print("session is already!"+id);
}

获取session

HttpSession session = req.getSession();
session.getAttribute("name");
//把获取的数据响应到前端页面
PrintWriter out = resp.getWriter();
out.print(name)

停止session

//1.手动停止(新建一个类调用invalidate方法)
HttpSession session = req.getSession();
//移除session参数
session.removeAttribute("name");
session.invalidate();
PrintWriter out = resp.getWriter();
out.print("<H1>session remove success please refresh</H1>");
//2.通过xml
<session-config>
    <!--设置session的失效时间 单位/min-->
    <session-timeout>1</session-timeout>
</session-config>

4.Filter

  • 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理。
  • 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理
  • 应用场景:自动登录,统一设置编码格式,访问权限控制,敏感字符过滤等
    在这里插入图片描述

4.1统一编码

//一个类实现了Filter且实现它的方法就成了一个过滤器
public class FilterBasic implements Filter {
    @Override
    public void init(FilterConfig filterConfig){
        //会在服务器启动的同时触发
        System.out.println("web server init");
    }

    //主要是对request和response进行一些处理
    //然后交给下一个过滤器或Servlet处理
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain fc){
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //后面可能会有其他的过滤器,保过滤器继续同行
        fc.doFilter(req,resp);
    }

    //当服务器关闭过滤器即销毁
    @Override
    public void destroy() {
        System.out.println("filter destroyed");
    }
}
//此类需要在web.xml中进行注册
//<filter>和<filter-Mapping>标签
//<url-patterns>下写需要过滤的路径

5.MVC整体结构

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值