今天在看jsp中的cookie时,遇到一个比较麻烦的问题。
关键代码如下:
登录页面:login.jsp
<form action="doLogin.jsp" method="post">用户名:<input type="text" name="sname" /><br/>密码:<input type="text" name="spass"/><br/><input type="submit" value="登录"/>
</form>
处理登录业务的doLogin.jsp
<%@page import="java.net.URLEncoder"%>
<%@page import="org.dao.impl.StudentDaoImpl"%>
<%@page import="org.dao.IStudentDao"%>
<%@page import="org.entity.Student"%>
<%@page import="org.service.impl.StudentServiceImpl"%>
<%@page import="org.service.IStudentService"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%//创建Service的对象IStudentService studentService = new StudentServiceImpl();//解决乱码的问题request.setCharacterEncoding("utf-8");//获取表单的值String sname = request.getParameter("sname");String spass = request.getParameter("spass");//调用service的方法进行登陆Student stu = studentService.login(sname, spass);if(stu.getSid()!=0){//登陆成功//将用户名放入到Cookie里面Cookie scook = new Cookie("sname",sname);response.addCookie(scook); //将登陆信息放在Session中//session.setAttribute("sname",sname);request.getRequestDispatcher("index.jsp").forward(request,response);}%>
登录成功跳转到的页面:index.jsp
<body><h1>欢迎进入学生管理系统</h1><%Cookie cookie[] = request.getCookies();for(int i=0;i<cookie.length;i++){Cookie cook = cookie[i];if(cook.getName().equals("sname")){%> 你好:<%=cook.getValue()%><%}}%> <%-- <%String sname =(String)session.getAttribute("sname");if(sname==null){response.sendRedirect("login.jsp");}%><%=sname %> --%></body>
代码都写的没问题,就是报错:
ava.lang.IllegalArgumentException: Control character in cookie value or attribute.
后来用英文的昵称登录,正常显示:
看来就是中文编码的问题了,在网上查了查,确实是编码的问题,只需要在放置cookie的时候,设置编码格式为UTF-8,并且在显示时,设置编码格式也为UTF-8,问题完美解决,修改过后的代码如下:
登录业务处理:doLogin.jsp
Cookie scook = new Cookie("sname",URLEncoder.encode(sname,"UTF-8"));
登录成功:index.jsp
<%Cookie cookie[] = request.getCookies();for(int i=0;i<cookie.length;i++){Cookie cook = cookie[i];if(cook.getName().equals("sname")){%> 你好:<%=URLDecoder.decode(cook.getValue(),"UTF-8")%><%}}%>
切记切记,在讲中文字符往Cookie中放的时候,一定要设置编码格式。
往期精彩
Java中的TreeSet集合会自动将元素升序排序
2020-11-16
“老师,请您多关注一下我吧!!!”
2020-11-15
晨读,难道只是为了完成任务而读的吗?
2020-11-14
Vector是线程安全的?
2020-11-13
为什么要有周考?周考是用来干什么的?
2020-11-12
刚刚,改造了下BaseDao……
2020-11-11
点分享
点点赞
点在看