HttpServletRequest用户请求与cookie详解

HttpServletRequest 用户请求对象

1.用户请求对象包含:
 请求行
 请求头
 请求体
     // 获取请求的网址
    System.out.println(request.getRequestURL());
    // http://localhost:8080/sh-web-servlet02/demo08
    System.out.println(request.getRequestURI());
    // /sh-web-servlet02/demo08
    // 获取请求的类型(用浏览器直接请求都是get请求)
    System.out.println(request.getMethod());// GET
    // 获取请求路径 (相对路径)
    System.out.println(request.getContextPath());// /sh-web-servlet02

    // 获取请求中携带的参数
    // 参数是 提交表单时 表单的name属性
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println(username + "..." + password);

    // 判断浏览器
    // 可以通过请求头中的信息获取用户使用的浏览器
    String header = request.getHeader("User-Agent");
    System.out.println(header);
    if (header.toLowerCase().contains("firefox")) {
        System.out.println("用的是火狐");
    }else if (header.toLowerCase().contains("chrome")) {
        System.out.println("用的是谷歌");
    }else {
        System.out.println("其他浏览器");
    }
}

请求转发 请求重定向 请求包含

2. request 也是一个域对象
 域对象内部就是维护一个map集合(添加删除获取的方法)
 request域的作用范围: 一次请求当中 可以获取到域中保存的数据
 public class Demo02 extends HttpServlet {
     public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
    // 编码格式2句
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");

    // 获取字符流
    PrintWriter out = response.getWriter();

    // 给request域添加值
    request.setAttribute("name", "zhangsan");
    // 请求包含
    // 相当于把两个页面的响应合成一个响应 返回给浏览器
    // 请求转发 浏览器只能响应一次数据
    request.getRequestDispatcher("/demo02").include(request, response);

    //响应一句话
    out.write("123");
    System.out.println("这是demo01 的结尾");
    }

    private void fun2(HttpServletResponse response) throws IOException {
        // 请求重定向 查看是否能获取域中的值
        // 重定向是两次请求 不能获取到request域中的值
        // 重定向既可以访问本地服务器 也可以访问非本地服务器
        response.sendRedirect("/sh-web-servlet/demo02");
    }

    private void fun1(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
        // 请求转发 只是服务器内部的访问 不管你怎么写路径 始终都在项目路径下
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo02");
        dispatcher.forward(request, response);
    }
}
public class Demo02 extends HttpServlet {   
    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        response.getWriter().write("456");
        // 获取request域中保存的值
        String name = (String)request.getAttribute("name");
        System.out.println(name);
        System.out.println("这是demo02"); 
    }
}
3.cookie(客户端技术)
  cookie是保存在浏览器中的缓存数据
  当发起一个请求 请求一个servlet
  进行逻辑处理(添加一个商品进购物车)
  处理完成后 给客户端(浏览器)一个响应
  响应中携带着记录了购买的什么商品的 cookie
  让浏览器保存起来 可以是保存在内存当中(结束会话 cookie被清除) 
  也可以保存在硬盘当中(结束会话 依然存在 就是个文件)
  当浏览器再一次请求购物车的时候
  会携带着之前保存的 cookie 去访问

  每个网站可以保存20个cookie 整个浏览器可以保存300个
  注意:第一次访问服务器的时候 是不会携带着cookie去访问的
  因为cookie还没有产生 只有当第一次请求后的响应中可以把cookie写回到浏览器中 

利用cookie 显示上次登录的时间
public class Test extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    // 编码格式2句
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");

    // 读取cookie
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        // 遍历数组
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("lastTime")) {
                // 取出cookie的值
                String value = cookie.getValue();
                // 字符串转long
                long time = Long.parseLong(value);
                // 转成日期 Date
                Date date = new Date(time);
                // 创建一个显示的日期格式
                // 参数就是你想要显示的日期格式
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
                // 格式化时间
                String lastTime = dateFormat.format(date);
                // 响应回浏览器显示
                response.getWriter().write("上次访问时间" + lastTime);
            }
        }
    }
    // 创建cookie 记录当前时间
    Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
    // 设置一下cookie的保存路径 工程名+配置网址路径
    // 读取cookie是按 请求的地址寻找 cookie的
    // 如果你配置请求 没有一级目录 这样全网站所有的网址请求都能找到你这个cookie
    // cookie.setPath("/");
    cookie.setPath("/sh-web-servlet/servlet");
    // 设置cookie存活时间
    // 负值表示 浏览器关闭 cookie消失
    // 正值表示 存活的时间
    // 0 表示 删除cookie
    cookie.setMaxAge(60*5);
    // 把cookie添加进响应当中
    response.addCookie(cookie);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值