Javaweb(三)

Cookie、Session、Filter过滤器

01 Cookie

/*
概念:客户端(前端)记录的服务器(后端)发来的数据,在请求头中
特点:Cookie通过在客户端记录信息确定用户身份,而Session通过在服务器端记录信息确定用户身份
优点:客户端可以保存一些运行信息
*/
​
//使用步骤
//1. 创建cookie对象
    new Cookie(String name, String value)
//2. 发送cookie对象
    response.addCookie(Cookie cookie)
//3. 获取cookie对象,拿到数据
    Cookie[] cookies = request.getCookies()
//4. 设置Cookie时效
    cookie.setMaxAge(60 * 60);//(一小时)
/*  设置Cookie时效中的数字,单位为毫秒
正数:cookie数据写入磁盘中,持久化存储 cookie.setMaxAge(60)。
负数:默认,当浏览器关闭的时候,cookie被销毁。
0:删除cookie信息。
*/

02 Session

/*
概念:Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器中
器上
特点:每一台浏览器都是独立的客户端,即使是同一电脑
优点:更安全,客户端信息泄露风险高
Session是依赖于Cookie的,当服务端创建session时,服务端在响应的时候会通知客户端把seesion id存储在cookie,后续的请求会在请求头里面会携带上cookie中的数据,服务端获取cookie携带的session id之后从session映射区里面获取对应的数据进行其他的操作
*/
//使用步骤
//1. 获取session对象
    HttpSession session = request.getSession();
//设置数据
    session.setAttribute(键, 值);
//3. 手动设置JSESSIONID,可以设置cookie时效性
    Cookie cookie = new Cookie("JSESSIONID", session.getId());
    cookie.setMaxAge(60 * 60);
    response.addCookie(cookie);
/*注意:
1. Session是依赖于Cookie
2. 当客户端关闭后,服务器不关闭,两次获取的sessionid默认是不一样的,如果需要相同,可以创建cookie,键为JSESSIONID。
3. 客户端没关闭,服务器关闭后,两次获取的sessionid默认不一样
*/

cookie和session的区别:

/*
1. session用于存储一次会话的多次请求的数据,存在服务端。
2. session可以存储任意类型,任意大小的数据。
3. session数据存在服务端,cookie存在客户端。
4. session没有数据大小限制,cookie有。
5. session数据安全,cookie相对不安全。
*/
​
/*场景:使用不同账号登录系统,返回的个人信息数据应该是不一样的。
打开两个不同的浏览器
*/
​
// 登录接口
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    HttpSession session = req.getSession();
    session.setAttribute("username", username);
    resp.setContentType("text/plain;charset=utf8");
    // 这里假设账号密码没有问题,直接返回登录成功
    resp.getWriter().write("登录成功");
 }
}
// 获取用户信息
@WebServlet("/userinfo")
public class UserInfoServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
    HttpSession session = req.getSession();
    String username = (String)session.getAttribute("username");
    resp.setContentType("text/plain;charset=utf8");
    resp.getWriter().write(username);
 }
}

03 Filter过滤器

/*使用步骤
1. 定义一个类,实现接口javax.servlet.Filter。
2. 重写方法。
3. doFilter方法实现通用操作。
4. 配置拦截路径。
*/
//第一种:web.xml配置
<filter>
  <filter-name>demo</filter-name>
  <filter-class>com.test.web</filter-class>
</filter>
<filter-mapping>
<filter-name>demo</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>   
//第二种:使用注解
@WebFilter("路径")
​
/*统一处理请求编码格式代码如下:*/
      @WebFilter("/*")
public class MyFilter implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {//初始化化文件过滤器
}
  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException, ServletException {
    // 统一设置请求编码格式
    servletRequest.setCharacterEncoding("utf8");
    // 放行,不然就卡在这里了
    filterChain.doFilter(servletRequest, servletResponse);
 }
  @Override
  public void destroy() 
{//销毁文件过滤器
}
}

04 Listener

/*
概念:监听器用于监听web应用中某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后作出响应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法
特点:一定被标记的事件出现程序自动执行
优点:减少重复代码,自动检索
*/
​
/*ServletContext对象监听器
监听web上下文的初始化(服务器已经准备好接收请求)与销毁,通常用来加载框架的配置文件。
*/
​
//1.注解
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub,待办事项自动生成的方法存根,系统自动生成,无特殊意义的注解
// 用来加载框架xml配置文件
System.out.println("Servlet初始化");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
}
//2.web.xml配置
<listener>
<listener-class>com.test.web.MyListener</listener-class>
</listener>
/*其他监听器
1. HttpSession对象监听器:监听session建立于销毁
2. HttpSessionAttributeListener:监听session属性的增加、移除、以及属性值得改变
3. ServletRequest对象监听器:监听request的创建于销毁
*/监听器仅做介绍,后续深入学习
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宣布无人罪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值