首页 > 代码库 > 从有码到无码

从有码到无码

 

2014-08-31_080721

想歪的直觉面壁去,不想见到你。大师说了:心中无码,自然高清。

言归正传。

环境:

  1. tomcat7,jdk6
  2. spring+springmvc+mybatis
  3. maven

问题:有CharacterEncodingFilter,controller处理get请求乱码。

controller:

@Controllerpublic class SearchController {    @RequestMapping(value = "http://www.mamicode.com/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="http://www.mamicode.com/${k }"/></div>

2014-08-31_083501 2014-08-31_084438 2014-08-31_083605

网上查了下,比较靠谱的解决方案是修改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参数对数据进行的重新编码,不同的页面可以有不同的重新编码的编码

按照这个方法修改之后:

2014-08-31_084800 2014-08-31_084924

OK,没有问题!于是我找jsp空间商修改配置,这货是这么说的:

2014-08-31_085423

2014-08-31_085456

身为一个有钱的技术人员,怎能被钱财这种铜臭味困扰!

于是我自己搜集资料,重新改了下代码,在controller里边重编码:

controller:

@Controllerpublic class SearchController {    @RequestMapping(value = "http://www.mamicode.com/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;        }    }}

好了问题解决了。

2014-08-31_090840

可是这明显不是那货说的无敌运行的方法,哪个大神有更好的方法呢?欢迎赐教!!!

从有码到无码