Java 之 会话技术

// 设置服务器的编码格式和浏览器查看要使用的编码格式
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 获取表单中所有提交的数据打印
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 string : hobbys) {
        System.out.println(string);
    }
}
if (!city.equals("---请选择---")) {
    System.out.println(city);
}
// 利用 getParameterName() 打印表单
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
    String name = names.nextElement();
    // 根据 name 取出对应的值
    String[] values = request.getParameterValues(name);
    for (String string : values) {
        System.out.println(string);
    }
}
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 把表单数据封装到对象中
// 参数一:要封装的对象,注意:该对象要符合 JavaBean 规范
User user = new User();
// 参数二: map 集合
Map<String, String[]> map = request.getParameterMap();
try {
    BeanUtils.populate(user, map);
    System.out.println(user);
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}

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

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

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        // 获取字符流
        PrintWriter out = response.getWriter();

        request.setAttribute("name", "six");
        // 请求包含
        // 相当于把两个页面的响应合成为一个响应返回给浏览器
        // 请求转发,浏览器只能响应一次数据
        request.getRequestDispatcher("/demo02").include(request, response);
        // 响应一句话
        out.write("123");
        System.out.println("demo01 结尾");
    }
    public void fun1(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 给 request 域中添加值
        // 请求重定向,查看是否能获取域中的值
        // 重定向是两次请求,不能获取到 request 域中的值
        // 重定向既可以访问本地服务器,也可以访问非本地服务器
        response.sendRedirect("/Demo/demo01");
    }

    /**
     * 
     */
    public void fun(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 请求转发,获取转发器
        // 请求转发只是服务器内部的访问,不管怎么写路径,始终都在项目路径下
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo01");
        dispatcher.forward(request, response);
    }

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

}

@SuppressWarnings("serial")
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("Demo02" + 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 写回到浏览器中
 *   
 * 2.HttpSession(服务端技术)
 *   HttpSession 是保存在服务端的
 * 
 * 
 * 显示上次登录时间
 * 思路:第一次访问的时候,利用 cookie 响应到(写到)浏览器中
 * 下次再访问的时候,从 cookie 中把时间取出来展示
 */
@SuppressWarnings("serial")
public class Demo 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 = 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("/Demo/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 Demo01 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 = 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);
    }
}
/*
 * 登录后记录用户名
 */
public class Demo 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 = null;
        // 读取 cookie
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("username")) {
                    username = cookie.getValue();
                }
            }
        }
        response.getWriter().write("<form action=\"/Demo/demo01\" method=\"post\">");
        if (username != null) {
            response.getWriter().write("用户名:<input type=\"text\" name=\"username\" value=username>");
        } else {
            response.getWriter().write("用户名:<input type=\"text\" name=\"username\">");
        }
        response.getWriter().write("<br>");
        response.getWriter().write("密码:<input type=\"password\" name=\"password\">");
        response.getWriter().write("<br>");
        response.getWriter().write("记住我:<input type=\"checkbox\" name=\"remember\">");
        response.getWriter().write("<br>");
        response.getWriter().write("<input type=\"submit\" name=\"submit\" value=\"提交\">");
        response.getWriter().write("</form>");
    }

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

}

public class Demo01 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("password");
        String remember = request.getParameter("remember");
        // 创建 cookie
        Cookie cookie = new Cookie("username", username);
        // 设置 cookie 路径
        cookie.setPath("/");
        // 处理业务逻辑
        if (username.equals("test") && password.equals("123")) {
            // 判断是否点记住按钮
            if (remember != null) {
                System.out.println("设置存活时间");
                // 需要记住(设置存活时间)
                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=/Demo/demo");
        }
        // 请求分发
    }

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

}

http://blog.csdn.net/huzongnan/article/list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值