想歪的直觉面壁去,不想见到你。大师说了:心中无码,自然高清。
言归正传。
环境:
- tomcat7,jdk6
- spring+springmvc+mybatis
- maven
问题:有CharacterEncodingFilter,controller处理get请求乱码。
controller:
@Controller
public class SearchController {
@RequestMapping(value = "/s/{k}.html", method = RequestMethod.GET)
public String search(@ModelAttribute("k") @PathVariable String k) {
System.out.println("k=" + k);
return "search/search";
}
}
页面获取:
<div class="form-group">
<input type="text" class="form-control" style="width: 450px;" name="k" id="k"
placeholder="客官想搜点什么?番号~哈希码~" value="${k }"/>
</div>
网上查了下,比较靠谱的解决方案是修改tomcat中的server.xml配置,在connector节点里增加配置:useBodyEncodingForURI="true" URIEncoding="UTF-8"
;
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"
useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
URIEncoding和useBodyEncodingForURI区别是:
- URIEncoding是对所有GET方式的请求的数据进行统一的重新编码,
- 而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码,不同的页面可以有不同的重新编码的编码
按照这个方法修改之后:
OK,没有问题!于是我找jsp空间商修改配置,这货是这么说的:
身为一个有钱的技术人员,怎能被钱财这种铜臭味困扰!
于是我自己搜集资料,重新改了下代码,在controller里边重编码:
controller:
@Controller
public class SearchController {
@RequestMapping(value = "/s/{k}.html", method = RequestMethod.GET)
public String search( @PathVariable String k, HttpServletRequest request) {
String key = EncodingUtil.encodeStr(k);
request.setAttribute("key", key);
return "search/search";
}
}
EncodingUtil:
public class EncodingUtil {
public static String encodeStr(String str) {
try {
return new String(str.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
}
好了问题解决了。
可是这明显不是那货说的无敌运行的方法,哪个大神有更好的方法呢?欢迎赐教!!!
时间: 2024-11-08 00:02:20