中文乱码 和 验证码验证错误 问题
来源:3-4 引入kaptcha实现验证码
hsbzzhz
2019-08-02 21:17:02
老师您好,
1. 换到路由路径访问html页面以后,中文就都变成了乱码:
2. 验证码验证错误
// 获取表单里输入的验证码 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; }
6回答
芝芝兰兰
2019-08-04
同学你好。
1、首先是字符集的问题,鉴于同学说,index页面是显示正常的,但shopoperation页面是乱码。并且,shopoperation页面中,从后台获取的值的中文是没有乱码的。
1)可以猜想两个页面的编码并不一样。同学可以看看自己的shopoperation页面的编码是什么。将其更改为index页面的编码试试:
2)如果不能修改,打开设置,将编码全部改为utf-8,然后重新编译
使用 maven 的 clean install 来重新生成target文件:
2、有关验证码问题:
1)看到同学获取的参数截图,在想同学是否是js中有错误,同学可以检查一下isEdit是否正确:
2)然后使用断点来查看,提交时验证码是否包含其中:
使用F12开发者工具,找到source窗口,找到js文件,点击行号打断点,然后填写好表单,点击提交,即可触发断点,页面会暗下来,会出现悬浮窗,此时将鼠标悬停在存储验证码的位置,可以看到验证码值是否顺利获取,如果没有获取,那么是html或者js有问题,可以检查下id为j_captcha的标签。
祝学习愉快~
hsbzzhz
提问者
2019-08-03
回复柯南老师,
老师你好,
1. 字符集改在这里了
2. 参数跟老师的debug出来的好像不太一样
好帮手慕柯南
2019-08-03
同学你好!
乱码问题:
1)建议同学将字符过滤器放在xml的最上面
2)同学查看一下自己所使用的浏览器是什么编码集。更改为utf-8。
验证码问题:
获取到的验证码为NUll:
1)同学先检查前台是否有传值,在Controller中打一个断点,看一下request中验证码是否为NUll:
2)如果不为null,可能是 HttpServletRequestUtil.getString()方法中有问题:
3)如果为null,说明同学的值前台没有传过来。同时同学检查一下前后台的verifyCodeActual是否有拼写错误。确保前台取值、保存值正确。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
hsbzzhz
提问者
2019-08-03
在这里更新我的问题,js里是可以取到验证码的
但是在Controller里验证的时候就取不到验证码了,是null
时间隔太久了 前面怎么写的都忘了,有哪位知道这个问题怎么解决 请告知谢谢
hsbzzhz
提问者
2019-08-03
请老师帮忙看一下,谢谢 手动@老师,
回复柯南老师,
尝试了在xml里添加过滤器,html页面里也指定了字符集,还是乱码;打印出来了验证码和图片里的一致
好帮手慕柯南
2019-08-03
同学你好!
同学的html页面是否指定了编码集
如果制定了,可以在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.看同学的代码验证码这里没有问题。这里的验证码区分大大小写。同学是否大小写有误呢。如果还是有问题,建议同学将传到后台以及后台获取到生成的验证码的值。打印输出对比一下。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
相似问题