jsp中使用cookie时报错……
【摘要】 今天在看jsp中的cookie时,遇到一个比较麻烦的问题。关键代码如下:登录页面:login.jsp<form action="doLogin.jsp" method="post"> 用户名:<input type="text" name="sname" /><br/> 密码:<input type="text" name="spass"/><br/> <input ...
今天在看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中放的时候,一定要设置编码格式。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)