JavaWeb(三)

JavaWeb

获取表单中所有提交的数据打印
    获取表单中所有提交的数据打印
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String sex = request.getParameter("sex");
    获得复选框传递的值
    String[] hobbys = request.getParameterValues("hobby");  
    String city = request.getParameter("city");
    System.out.println(username);
    System.out.println(password);
    System.out.println(sex);
    if(hobbys != null) {
        for (String h : hobbys) {
            System.out.println(h);
        }
    }
    System.out.println(city);
利用getParameterNames()打印表单信息
    利用getParameterNames()打印表单信息
    Enumeration names = request.getParameterNames();
    while (names.hasMoreElements()) {
        String name = names.nextElement();
        根据name取出对应的值
        String[] values = request.getParameterValues(name);
        for (String value : values) {
            System.out.println(value);
        }
    }
把表单对象封装到对象中
    把表单对象封装到对象中
    参数1 要封装的对象  注意:该对象要符合javabean规范
    参数2 Map集合
    User user = new User();
    Map map = request.getParameterMap();
    try {
        BeanUtils.populate(user, map);
        System.out.println(user);
    } catch (IllegalAccessException | InvocationTargetException e) {
        e.printStackTrace();
    }
请求转发 获取转发器
    请求转发 获取转发器  
    请求转发只是服务器内部的访问 
    不管你怎么写路径 始终都在项目路径下
    RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
    dispatcher.forward(request, response);
请求重定向 查看是否能获取域中的值
    请求重定向 查看是否能获取域中的值
    重定向是两次请求 不能获取到request域中的值
    请求转发能不能 访问本地服务器以外的服务器?
    重定向即可以访问本地服务器 又可以访问非本地服务器
    response.sendRedirect("/web-0328/demo03");
    //相当于=>
    response.setStatus(302); 
    response.setHeader("location", "/web-0328/demo03");
请求包含
    请求包含
    相当于把两个页面的响应 合成一个响应 返回给浏览器
    请求转发 浏览器只能响应一次数据
request.getRequestDispatcher("/demo03").include(request, response);
    out.write("123")//响应一句话
会话技术

会话技术:客户端(浏览器)和服务端 进行交互 当浏览器关闭时 交互(会话)结束
会话中的两个技术
1.cookie (客户端技术) cookie是保存在浏览器中的缓存数据
当我发起一个请求 请求一个servlet 进行逻辑处理(添加一个商品进购物车)
处理完后 给客户端(浏览器)一个响应 响应中携带着记录了购买的商品的cookie 让浏览器保存起来
可以是保存在内存当中(结束会话 cookie清楚) 也可以保存在硬盘中(结束会话 依然存在 就是个文件)
当用浏览器再一次请求购物车的时候 会携带这个之前保存的 cookie去访问
每个网站可以保存20个cookie 整个浏览器 可以保存300个
注意:第一次访问服务器的时候 是不会携带着cookie去访问的 因为cookie还没有产生 只有当第一次请求后的响应中可以把cookie写回到浏览器中
2.HttpSession (服务端技术) HttpSession保存在服务端 session是保存在服务器中的数据
显示上次登录的时间
思路:第一次访问的时候 利用cookie 响应到(写到)浏览器。 下次在访问的时候 从cookie中把时间取出来

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //编码格式
    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.setPath("/"); 这样全网站所有的网址请求都能找到这个cookie
    cookie.setPath("/web-0328/servlet");
    //设置cookie存活时间
    //负值 表示 浏览器关闭 cookie消失
    //正值 表示 存活的时间
    // 0  表示 删除cookie
    cookie.setMaxAge(60*5);
    //把cookie写进响应当中
    response.addCookie(cookie);
}

你可能感兴趣的:(JavaWeb)