Java中 操作Servlet域中的值以及会话技术 cookie

    XML文件
    
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>SH-web-servlet-03display-name>
  <welcome-file-list>
    <welcome-file>index.htmlwelcome-file>
    <welcome-file>index.htmwelcome-file>
    <welcome-file>index.jspwelcome-file>
    <welcome-file>default.htmlwelcome-file>
    <welcome-file>default.htmwelcome-file>
    <welcome-file>default.jspwelcome-file>
  welcome-file-list>
  <servlet>
    <servlet-name>demo01servlet-name>
    <servlet-class>com.lanou3g.Demo01servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo01servlet-name>
    <url-pattern>/demo01url-pattern>
  servlet-mapping>

  <servlet>
    <servlet-name>demo02servlet-name>
    <servlet-class>com.lanou3g.Demo02servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo02servlet-name>
    <url-pattern>/demo02url-pattern>
  servlet-mapping> 

  <servlet>
    <servlet-name>demo03servlet-name>
    <servlet-class>com.lanou3g.Demo03servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo03servlet-name>
    <url-pattern>/demo03url-pattern>
  servlet-mapping> 

  <servlet>
    <servlet-name>demo04servlet-name>
    <servlet-class>com.lanou3g.Demo04servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo04servlet-name>
    <url-pattern>/servlet/demo04url-pattern>
  servlet-mapping> 

  <servlet>
    <servlet-name>demo05servlet-name>
    <servlet-class>com.lanou3g.Demo05servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo05servlet-name>
    <url-pattern>/servlet/demo05url-pattern>
  servlet-mapping> 

  <servlet>
    <servlet-name>demo06servlet-name>
    <servlet-class>com.lanou3g.Demo06servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo06servlet-name>
    <url-pattern>/servlet/demo06url-pattern>
  servlet-mapping> 

  <servlet>
    <servlet-name>demo07servlet-name>
    <servlet-class>com.lanou3g.Demo07servlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>demo07servlet-name>
    <url-pattern>/servlet/demo07url-pattern>
  servlet-mapping> 

web-app>

将form表单上的参数传到Servlet中

    
<html>
<head>
<meta charset="UTF-8">
<title>Insert title heretitle>
head>
<body>
    <form action="/SH-web-servlet-03/demo01" method="post">
        用户名:<input type="text" name="username"/>
        <br>
        密码:<input type="text" name="password"/>
        <br><input type="radio" name="sex" value="男" checked="checked" />
        <br><input type="radio" name="sex" value="女" /> 
        <br>
        <input type="checkbox" name="hobby" value="篮球"/>篮球 
        <input type="checkbox" name="hobby" value="唱歌"/>唱歌 
        <input type="checkbox" name="hobby" value="画画"/>画画
        <br>
         <select name="city">
            <option>---请选择---option>
            <option>北京option>
            <option>天津option>
            <option>上海option>
         select>
         <br>
         <input type="submit" value="提交">

    form>
body>
html>
    public class Demo01 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // fun1(request, response);
        // fun2(request, response);

        // 设置响应编码格式
        response.setContentType("text/html;charset=UTF-8");
        // 告诉服务器 请求的内容是什么编码格式的
        request.setCharacterEncoding("UTF-8");
        // 把表单数据封装到对象中
        // 参数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) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private void fun2(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        // 设置响应编码格式
        response.setContentType("text/html;charset=UTF-8");
        // 告诉服务器 请求的内容是什么编码格式的
        request.setCharacterEncoding("UTF-8");

        // 利用getParameterNames()打印表格
        Enumeration enumeration = request.getParameterNames();
        while (enumeration.hasMoreElements()) {
            String name = enumeration.nextElement();
            // 根据name取出对应值
            String[] values = request.getParameterValues(name);
            for (String value : values) {
                System.out.println(value);
            }
        }
    }

    private void fun1(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

        // 设置响应编码格式
        response.setContentType("text/html;charset=UTF-8");
        // 告诉服务器 请求的内容是什么编码格式的
        request.setCharacterEncoding("UTF-8");

        // 获取表单中 所有提交的数据打印
        String username = request.getParameter("username");
        System.out.println(username);
        String password = request.getParameter("password");
        System.out.println(password);
        String sex = request.getParameter("sex");
        System.out.println(sex);
        // 获取复选框传递的值
        String[] hobby = request.getParameterValues("hobby");
        if (hobby != null) {
            for (String h : hobby) {
                System.out.println(h);
            }
        }
        String city = request.getParameter("city");
        System.out.println(city);
    }

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

}

请求转发 请求重定向 请求包含 获取Servlet域中的值


    /*
 * 请求转发
 * 请求重定向
 * 请求包含
 * 
 * Request 也是一个域对象
 * 域对象内部就是维护了一个map集合(有添加删除获取的方法)
 * request域的作用范围: 一次请求当中 可以获取到域中保存的数据
 */
public class Demo02 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 乱码两句
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        // 给request域中 添加值
        request.setAttribute("name", "xiaoming");

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

        // 请求包含
        // 相当于把两个页面的响应合成为一个响应 返回给浏览器
        // 请求转发 浏览器只能响应一次数据
        request.getRequestDispatcher("/demo03").include(request, response);
        // 响应一句话
        out.write("123");

        System.out.println("demo02结尾");
        //fun1(request, response);
        //fun2(response);
    }

    private void fun2(HttpServletResponse response) throws IOException {
        // 请求重定向 查看是否能获取域中的值
        // 重定向是两次请求 不能获取到request域中的值
        // 重定向即可以访问 本地服务器 也可以访问 非本地服务器
//      response.setHeader("location", "/SH-web-servlet-03/demo03");
//      response.setStatus(302);
        // 这句和上面两句是一样的 只不过是另一种方法
        response.sendRedirect("/SH-web-servlet-03/demo03");

    }

    private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 请求转发 获取转发器
        // 请求转发是一次请求 可以获取到request域中的值
        // 请求转发 只是服务器内部的访问
        //              不管你怎么写路径 始终都在项目路径下
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
        dispatcher.forward(request, response);
    }

    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 {

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

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

}

会话技术

    /*
 * 会话技术
 * 客户端(浏览器)和服务端进行交互(会话)
 * 当浏览器关闭的时候 这次交互(会话)结束
 * 例如打电话
 * 会话中有两个技术
 * 1.小饼干 cookie(客户端技术)
 * cookie是保存在浏览器中的缓存数据
 * 当我发起一个请求 请求一个Servlet 进行逻辑处理(添加一个商品进购物车)
 * 处理完成后 给客户端(浏览器)一个响应
 * 响应中携带者记录了购买的什么商品的cookie
 * 让浏览器保存起来 可以是保存在内存当中(结束会话 cookie被清除) 也可以保存在硬盘中(结束会话 依然存在 相当于一个文件)
 * 当用浏览器再一次请求购物车的时候
 * 会携带着之前保存的 cookie 去访问
 * 每个网站可以保存20个cookie 整个浏览器 可以保存300个cookie
 * 
 * 注意:第一次访问浏览器是不会携带cookie去访问的 因为cookie还没有产生
 * 只有当第一次请求之后的响应中可以把cookie写回到浏览器中
 * 
 * 2.HttpSession(服务端技术)
 * HttpSession是保存在服务端中的
 * 
 * 显示上次登录的时间
 * 思路:
 * 第一次访问的时候 利用cookie 响应到(写到)浏览器中
 * 下次再访问的时候 从cookie中把时间取出来
 */
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("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-03/servlet");
        // 设置cookie存活时间 以秒为单位
        // 负值 表示 浏览器关闭 cookie消失
        // 正值 表示存活的时间
        // 0 表示 删除cookie
        cookie.setMaxAge(5 * 60);
        // 把cookie添加进响应当中
        response.addCookie(cookie);


    }

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

}
    public class Demo05 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("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);
                }
            }
        }

    }

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

}

你可能感兴趣的:(Java中 操作Servlet域中的值以及会话技术 cookie)