java web编程学习4

书接上文,学完了filter以后,对java web已经有了一定的了解。但是,还有一些web编程必须接触的东西,如cookie、session。现在就聊聊cookie。

cookie是存储在本地浏览器的键值对。众所周知,http是无状态的通信协议,所以连续的http请求响应是独立的,那么如何让http请求记住一些信息,比如登陆啊,购物车的商品啊,cookie就是其中的一个解决方案。它存在于浏览器中,我们可以写代码的时候通过request获取存在本地的cookie。

cookie的方法如下:

java web编程学习4_第1张图片  

(get/set)MaxAge:cookie是有生命周期的,我们可以设置它的生命周期,默认为关闭浏览器则删除。通过这个方法我们就可以让用户一个月免登陆。

(is/set)HttpOnly:我们可以让cookie对js透明,如果将cookie的hhtponly设置为true,则浏览器的脚本语言无法获取。

getName、getValue:得到键值对的键和值。

package demo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/cookie.view")
public class CookieServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html; charset=UTF-8");
		PrintWriter out = resp.getWriter();
		out.println("---- Cookie tests ----<br />");
		Cookie[] cookies = req.getCookies(); //从reqesut里得到cookies
		
		if(cookies != null) {
			for(Cookie c : cookies) {
				out.print(c.getName() + ":" + c.getValue() + ", max age is " + c.getMaxAge() + "<br />");
				out.println();
				
			}
		}
		else
		 {
			Cookie cookie = new Cookie("tmac", "basketball");
			cookie.setMaxAge(24 * 60 *60);
			resp.addCookie(cookie);
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		
	}
	
	
}

如代码所示,httprequest提供getcookies方法,这个方法返回的是cookie数组,这样我们就能读取已经在浏览器存在的键值对了,httpresponse提供addcookie方法,我们可以通过这个方法,将需要存的数据存在浏览器。

已经了解cookie的基本知识了,现在做个自动登陆的demo。

IndexServlet,可以把这个servlet看成主页,如果没登陆,跳转到登陆页面,登陆则显示用户信息。

package demo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/index.do")
public class IndexServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		Cookie [] cookies = req.getCookies();
		if(cookies != null) {
			for(Cookie c : cookies) {
				String name = c.getName();
				String value = c.getValue();
				if(name.equals("user") && value.equals("123")) {
					req.getRequestDispatcher("/user.do").forward(req, resp);
					return ;
				}
			}
		}
		resp.sendRedirect("login.html");
		
	}
	

}

登陆页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> login </title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 </head>

 <body>
  <form action="/login.do" method="get">
	<input type="text" name="name"/> <br />
	<input type="text" name="value"/> <br />
	<input type="submit" />

  </form>
 </body>
</html>

LoginServlet ,用来处理登陆表单

package demo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		String name = req.getParameter("name");
		String value = req.getParameter("value");
		if(name.equals("user") && value.equals("123")) {
			Cookie c = new Cookie("user", "123");
			resp.addCookie(c);
			req.getRequestDispatcher("/user.do").forward(req, resp);
			return ;
		}
		else {
			resp.sendRedirect("login.html");
		}
	}
	

}

UserServlet,用来显示信息

package demo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/user.do")
public class UserServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		Cookie [] cookies = req.getCookies();
		if(cookies != null) {
			for(Cookie c : cookies) {
				String name = c.getName();
				String value = c.getValue();
				if(name.equals("user") && value.equals("123")) {
					resp.setContentType("text/html;charset=utf-8");
					PrintWriter out = resp.getWriter();
					out.print("hello, " + name + ", your value is " + value);
					return ;
				}
			}
		}
		resp.sendRedirect("login.html");
	}
	
}

你可能感兴趣的:(java web编程学习4)