java.lang. IllegalArgumentException 非法数据异常
Cookie接受中文
思想:借助于java.net.URLEncoder相对中文字符串惊醒编码,将编码后的结果设置Cookie值。
当程序要读取Cookie时,则应该先读取,然后使用java.netURLDecoder对其进行解码
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
//若可以获取到请求参数 name, 则打印出欢迎信息。把登录信息存储到 Cookie 中,并设置 Cookie 的最大时效为 30S
String name = request.getParameter("name");
if(name != null&& !name.trim().equals("") ){
//String enname = URLEncoder.encode(name, "utf-8");
Cookie cookie = new Cookie("name", URLEncoder.encode(name, "utf-8"));
cookie.setMaxAge(30);
response.addCookie(cookie);
}else{
//从 Cookie 中读取用户信息,若存在则打印欢迎信息
Cookie [] cookies = request.getCookies();
if(cookies !=null&& cookies.length>0){
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
if("name".equals(cookieName)){
String val = URLDecoder.decode(cookie.getValue(), "UTF-8");
name = val;
}
}
}
}
if (name != null&& !name.trim().equals("")) {
request.setAttribute("name", name);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else {
//若既没有请求参数,也没有 Cookie,则重定向到 login.jsp
response.sendRedirect("login.jsp");
}
}
}