• 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 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

    点分享

    点点赞

    点在看

  • 相关阅读:
    EBS中的采购单据状态及其控制
    详解EBS接口开发之采购接收&退货处理之关键API--(补充)
    数据挖掘系列
    如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧
    机器学习中的数学
    一个机器学习博客 ,包括 Standford公开课machine learning
    机器学习流行算法一览
    java se 另一博客
    java 正则
    java map
  • 原文地址:https://www.cnblogs.com/a1111/p/14877362.html
Copyright © 2020-2023  润新知