会话技术的cookie客户端技术

本文介绍如何在Servlet中处理表单数据,包括封装表单数据到对象、请求转发与重定向等,并探讨了会话技术如Cookie和HttpSession的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、把表格封装到对象中
public class Demo01 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     //编码格式
     response.setContentType("text/html;charset=utf-8");
     requst.setCharacterEncoding("UTF-8");



    private void fun1(HttpServletRequest request) {
//获取form表单所有数据并打印

        String username = request.getParameter("username");
        String passworld = request.getParameter("password");
        String sex = request.getParameter("sex");
//      获得复选框的传递的值
         String[] hobbys = request.getParameterValues("hobby");
         if (hobbys !=null) {
            for (String h : hobbys) {
                System.out.println(h);
            }
        }
        String city = request.getParameter("city");

        System.out.println(username);
        System.out.println(passworld);
        System.out.println(sex);
        System.out.println(city);
}
}
}
private void fun2(HttpServletRequest request) {
        //利用getParameterNames()打印表单数据

        Enumeration<String> names = request.getParameterNames();
        if(names.hasMoreElements()) {
            String name = names.nextElement();
            //根据name取出对应的值
            String[] strings = request.getParameterValues(name);
            for (String value : strings) {
                System.out.println(value);
            }
        }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

     private void fun3(HttpServletRequest request) {
    //把表单数据封装到对象中
    //需要用到架包:commons-beanutils 和commons-logging(我们调用beanUtils工具类中的populate的方法)
//参数一:要封装的对象,该对象要符合javabean规范
//参数二:要封装的map集合
    User user = new User();
    try{
        BeanUtils.populate(user,request.getParameterMap());
        System.out.println(user);
    }catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    }
二、请求转发,重定向,包含
public class Demo02 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

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

        //给request域中 添加值
        request.setAttribute("name", "wanglong");

//      fun2(request, response);
        //请求包含--相当于把两个页面的响应合称为一个响应,返回给浏览器
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
        //包含--456123
        dispatcher.include(request, response);
        //转发--456--浏览器只能响应一次数据,
        dispatcher.forward(request, response);

        //响应一句话
        out.write("123"); 

        System.out.println("我是demo02结尾");
    }
    private void fun2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //请求重定向查看能够获取域中的值
     //重定向是两次请求,不能获取到requist域中的值
     //重定向,既可以访问本地服务器,也可以访问非本地服务器

  //请求转发,获取转发器
  //只能访问服务器内部,不管写什么路径,始终都在项目目录下,不能访问以外的
  RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
  dispatcher.forward(request,response);
  System.out.println("我是Demo02的结尾");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

public class Demo03 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        //获取request域中保存的值
        response.getWriter().write("456");
    Object name = request.getAttribute("name");
        System.out.println(name);
        System.out.println("我是Demo03");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
三、会话技术
1.定义:客户端(浏览器)和服务端进行交互,当浏览器关闭的时候,本次交互结束
2.会话中的两个技术
1)cookie(客户端技术)
因为cookie是保存在浏览器中的缓存数据,当我们发起一个请求一个servlet,servlet会进行逻辑处理,处理完成后,给客户端(浏览器)一个响应,响应中,携带者记录了的购买什么商品的cookie,让浏览器保存起来,可以是保存在内存当中(结束会话,cookie被清除),也可以保存在硬盘当中(结束会话,依然存在,是个文件);当浏览器再一次请求的时候,就会携带者之前保存的cookie去访问。
注:第一次访问服务器的时候,是不会携带着cookie去访问的,因为cookie还没有产生,只有当第一次请求后的响应中可以把cookie写回到浏览器中

这里写图片描述

2)Httpsession(服务端技术)--保存在服务器

 public class Demo04 extends HttpServlet {

    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("lasTime")) {
                    //取出cookie的值
                    String value = cookie.getValue();
//                  把字符串转换成long类型
                      long time = Long.parseLong(value);
                    //转成日期 Date--Utile
                      Date date = new Date(time);
                      //创建一个显示的日期格式
                      //参数就是你想要的日期格式
                     SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
                     //格式化时间
                     String lastTime = dateFormat.format(date);
                     //响应到浏览器
                     response.getWriter().write("上次的访问时间:" + lastTime);

                }
            }
        }
        //创建一个coolie,记录当前的时间
        //coolie名字,值
        Cookie cookie = new Cookie("lasTime", System.currentTimeMillis()+"");
        //设置一下coolie的保存路径  工程名+配置的网址路径
        //读取cookie是按请求的地址寻找cookie的
        //如果你配置请求路径没有一级目录,这样全网站所有的网址请求都能找到你这个cookie
//      cookie.setPath("/");
        cookie.setPath("/sh-web-servlet03/servlet");
        //设置cookie,存活时间
        //负值表示浏览器关闭,cookie消失
        //正值表示存活的时间
        //0表示删除cookie 
        cookie.setMaxAge(60 * 5);
        //把cookie添加进响应当中
        response.addCookie(cookie);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

四、登录后记录用户名

-

public class Demo06 extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             response.setContentType("text/html;charset=utf-8");
             request.setCharacterEncoding("utf-8");
             String username ="";
             //读取cookie
             Cookie[] cookies = request.getCookies();
             if(cookies!=null) {
                 for (Cookie cookie : cookies) {
                    if(cookie.getName().equals("username")) {
                    String value = cookie.getValue();
                    }
                }
             }

             //完成数据回显
             System.out.println(username);

             response.getWriter().write("<form action='/sh-web-servlet03/servlet/demo07' method='post'>");
             response.getWriter().write("姓名:<input type='text' name='username'><br>");
             response.getWriter().write("密码:<input type='text' name='passwore'><br>");
             response.getWriter().write("记住:<input type='checkbox' name='remember'><br>");
             response.getWriter().write("<input type='submit' value='登录'>");
             response.getWriter().write("</form>");

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}


public class Demo07 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
           request.setCharacterEncoding("utf-8");

        //获取请求的参数,
        String username = request.getParameter("username");
        String password = request.getParameter("passwore");
        String remember = request.getParameter("remember");
        //创建cookie
        Cookie cookie = new Cookie("username", username);
        //设置cookie路径
        cookie.setPath("/sh-web-servlet03/servlet");

//  处理业务逻辑
        if (username.equals("wanglong")&& password.equals("123")) {
        //判断一下是否点,记住按钮
            if (remember!=null) {
                //需要记住(设置存活时间)
                cookie.setMaxAge(Integer.MAX_VALUE);
            }else {
                //删除原来的cookie
                cookie.setMaxAge(0);

            }
            //添加到响应中
            response.addCookie(cookie);

            response.getWriter().write("登录成功");
        }
        else {
            response.getWriter().write("登录失败");
          //3秒后,返回登录界面
            response.setHeader("refresh", "3:url=/sh-web-servlet03/servlet/demo06");
        }
        //请求分发

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值