jsp中使用cookie时报错……

举报
穆雄雄 发表于 2022/12/11 13:28:16 2022/12/11
【摘要】 今天在看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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。