中文乱码 和 验证码验证错误 问题

中文乱码 和 验证码验证错误 问题

老师您好,

1. 换到路由路径访问html页面以后,中文就都变成了乱码:http://img1.sycdn.imooc.com//climg/5d4436a2000161d113690866.jpg

2. 验证码验证错误

http://img1.sycdn.imooc.com//climg/5d4436e90001886416580840.jpg

// 获取表单里输入的验证码
var verifyCodeActual = $('#j_captcha').val();
if (!verifyCodeActual) {
    $.toast('请输入验证码!');
    return;
}
formData.append('verifyCodeActual', verifyCodeActual);
package com.imooc.o2o.util;

import javax.servlet.http.HttpServletRequest;

public class CodeUtil {
    /**
     * 检查验证码是否和预期相符
     *
     * @param request
     * @return
     */
    public static boolean checkVerifyCode(HttpServletRequest request) {
        String verifyCodeExpected = (String) request.getSession()
                .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
        String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
        if (verifyCodeActual == null || !verifyCodeActual.equals(verifyCodeExpected)) {
            return false;
        }
        return true;
    }
}
@RequestMapping(value = "/registershop",method = RequestMethod.POST)
    @ResponseBody
    private Map<String, Object> registerShop(HttpServletRequest request) {
        Map<String, Object> modelMap = new HashMap<String, Object>();
        if (!CodeUtil.checkVerifyCode(request)) {
            modelMap.put("success", false);
            modelMap.put("errMsg", "输入了错误的验证码");
            return modelMap;
        }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

6回答
芝芝兰兰 2019-08-04 19:30:38

同学你好。

1、首先是字符集的问题,鉴于同学说,index页面是显示正常的,但shopoperation页面是乱码。并且,shopoperation页面中,从后台获取的值的中文是没有乱码的。

1)可以猜想两个页面的编码并不一样。同学可以看看自己的shopoperation页面的编码是什么。将其更改为index页面的编码试试:

http://img1.sycdn.imooc.com//climg/5d46b5b80001d17b19201045.jpg

2)如果不能修改,打开设置,将编码全部改为utf-8,然后重新编译

http://img1.sycdn.imooc.com//climg/5d46b7080001a03f12790880.jpg

使用 maven 的 clean install 来重新生成target文件:

http://img1.sycdn.imooc.com//climg/5d46b7be000123f419201045.jpg

2、有关验证码问题:

1)看到同学获取的参数截图,在想同学是否是js中有错误,同学可以检查一下isEdit是否正确:

http://img1.sycdn.imooc.com//climg/5d46baa100010f6804710046.jpg

2)然后使用断点来查看,提交时验证码是否包含其中:

使用F12开发者工具,找到source窗口,找到js文件,点击行号打断点,然后填写好表单,点击提交,即可触发断点,页面会暗下来,会出现悬浮窗,此时将鼠标悬停在存储验证码的位置,可以看到验证码值是否顺利获取,如果没有获取,那么是html或者js有问题,可以检查下id为j_captcha的标签。

http://img1.sycdn.imooc.com//climg/5d46ba7a0001da5419200927.jpg

祝学习愉快~

提问者 hsbzzhz 2019-08-03 20:27:50

回复柯南老师,

老师你好,

1. 字符集改在这里了

http://img1.sycdn.imooc.com//climg/5d457d55000101e214880535.jpg

2. 参数跟老师的debug出来的好像不太一样

 http://img1.sycdn.imooc.com//climg/5d457d940001f20f14870712.jpg

好帮手慕柯南 2019-08-03 16:31:05

同学你好!

  1. 乱码问题:

    1)建议同学将字符过滤器放在xml的最上面

    2)同学查看一下自己所使用的浏览器是什么编码集。更改为utf-8。

  2. 验证码问题:

    获取到的验证码为NUll:

    1)同学先检查前台是否有传值,在Controller中打一个断点,看一下request中验证码是否为NUll:

    http://img1.sycdn.imooc.com//climg/5d4545d00001c36e14520624.jpg


    2)如果不为null,可能是 HttpServletRequestUtil.getString()方法中有问题:

    http://img1.sycdn.imooc.com//climg/5d45426b000116da08670220.jpg

    3)如果为null,说明同学的值前台没有传过来。同时同学检查一下前后台的verifyCodeActual是否有拼写错误。确保前台取值、保存值正确。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 hsbzzhz #1
    谢谢老师回复,问题依旧没能解决。 我尝试将过滤器放在xml顶部了,还是不能显示中文,而且访问index.html的时候可以正常显示所有;字符集肯定是有在html里设定的,把课程代码复制粘贴了一遍还是一样的结果。 验证码的问题 安装老师说了调试了一下,找不到verifycodeacutal这个参数,但是我尝试在controller里打印了一下,结果是null,所以应该是前台js没能传到后台来,于是我复制课程代码里到shopoperation里的代码,但还是一样的结果。 截图见下一个回复,谢谢老师了?
    2019-08-03 20:24:59
  • 提问者 hsbzzhz #2
    通过调试现在在controller里能取到验证码了,但是提交后会报POST http://localhost:8080/o2o/shopadmin/registershop?_=1564840389207 500 请问老师这大概是什么原因呢
    2019-08-03 21:57:56
提问者 hsbzzhz 2019-08-03 14:58:26

在这里更新我的问题,js里是可以取到验证码的

但是在Controller里验证的时候就取不到验证码了,是null

http://img1.sycdn.imooc.com//climg/5d45305c000180f611630315.jpg

时间隔太久了 前面怎么写的都忘了,有哪位知道这个问题怎么解决 请告知谢谢

提问者 hsbzzhz 2019-08-03 12:07:55

请老师帮忙看一下,谢谢  手动@老师,

http://img1.sycdn.imooc.com//climg/5d4508010001fb1812880452.jpg

http://img1.sycdn.imooc.com//climg/5d45080300012a3517620261.jpg

http://img1.sycdn.imooc.com//climg/5d45080800019afd15450791.jpg

http://img1.sycdn.imooc.com//climg/5d45082e0001321912560604.jpg

回复柯南老师,

尝试了在xml里添加过滤器,html页面里也指定了字符集,还是乱码;打印出来了验证码和图片里的一致

好帮手慕柯南 2019-08-03 10:56:03

同学你好!

  1. 同学的html页面是否指定了编码集

    http://img1.sycdn.imooc.com//climg/5d44f5040001106303480093.jpg

  2. 如果制定了,可以在xml文件中添加一下字符过滤器测试一下:

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

2.看同学的代码验证码这里没有问题。这里的验证码区分大大小写。同学是否大小写有误呢。如果还是有问题,建议同学将传到后台以及后台获取到生成的验证码的值。打印输出对比一下。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 hsbzzhz #1
    尝试了在xml里添加过滤器,html页面里也指定了字符集,还是乱码;打印出来了验证码和图片里的一致, 回复里有截图
    2019-08-03 13:19:06
  • 提问者 hsbzzhz #2
    老师,关于验证码的问题,我照您的指导去操作了一下,发现js里是可以取到验证码的,但是在Controller里验证的时候就取不到验证码了
    2019-08-03 14:59:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师