GET方式提交在WEB中是非常常用的方式,有时候我们在使用GET方式提交请求不得不提交中文,但是TOMCAT等容器对于GET方式的编码问题总是让人折腾。

  先说说流程吧:

    我们的内容使用GET方式发送,就会在URL后面带上内容,在游览器发来的请求经过了游览器的URI编码,发送到服务器这边,如果是struts2会经过拦截器进行URI解码,并且使用"iso8859-1"进行编码,因为传输过程是二进制的。

  这时候想解决中文编码问题有三种方式

    假设:

    url:http://localhost:8080/test?name=测试

    一、在服务器进行处理

      得到的内容是"iso8859-1",使用

        String str = new String(name.getByte("iso8859-1"),"utf-8");

      得到正确的值。

      ps:这种方式有个缺点;这种方式服务器必须默认使用iso8859-1的方式编码,如果我在TOMCAT更改默认的iso8859-1为utf-8,那么这种方式就无法生效了。

    二、在TOMCAT配置文件中设置

      在TOMCAT的目录下conf/server.xml中,搜索"8080"端口,如果改了端口按端口号搜索,搜到之后在这个标签中空格输入 URIEncoding="UTF-8" ,它默认是iso8859-1。

      ps:这种方式缺点显而易见,换了服务器就要更改,有时候忘记也是很常见的事情。

    三、手动编码多一次

      游览器和服务器传输都是先编码后解码,对中文的支持不太好,那么能不能把中文事先转换成英文或数字传输呢?

      假设:

        1、name=测试,在JS标签中,使用encodeURI(param)方法先将“测试” 转成 name=%26%92(瞎编的)  游览器再自动进行URI编码 name=%2525%2592(%的URI编码为%25);

          ognl表达式中,使用<s:param name="name" value="%{@java.net.URLEncoder.encode(name,'utf-8')}"> 对值进行URI编码,同时在struts2配置文件中开启静态方法的支持 java.net.URLEncoder.encode()。

          struts.xml: name="struts.ognl.allowStaticMehtodAccess" value="true"

        2、这时候将这链接GET方式提交了

        3、服务器那边得到 name=%26%92 ,我们再使用URIDecoder.decode(name,"utf-8"); 进行解码,这样就得到了“测试”

      PS:这种方式是不是比较好,不依赖TOMCAT

    

GET方式提交中文编码问题以及三种解决方式的更多相关文章

  1. Could not find resource mybatis.xml 找不到mybatis主配置文件的三种解决方式

    第一种:先清除target目录 再重新compile编译 第二种:让idea重构项目 第三种 :手动添加到target目录下的classes包下

  2. maven jar包冲三种解决方式

    初次启动应用,一直包如下错误,起初怀疑引入pandora 版本冲突. Exception in thread "main" java.lang.NoSuchMethodError: ...

  3. spring.handlers、spring.schemas、spring.tooling被覆盖的三种解决方式

    在用到spring时,本地IDE里面跑的很正常,但是打jar包后在集群上运行时报错. 查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,每个包都有自己的spring.schemas文 ...

  4. Django框架(十)--ORM多对多关联关系三种创建方式、form组件

    多对多的三种创建方式 1.全自动(就是平常我们创建表多对多关系的方式) class Book(models.Model): title = models.CharField(max_length=32 ...

  5. for 、foreach 、iterator 三种遍历方式的比较

    习惯用法 for.foreach循环.iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组.集合等 for 惯用法: List<String> list = ...

  6. 基于Java的二叉树的三种遍历方式的递归与非递归实现

    二叉树的遍历方式包括前序遍历.中序遍历和后序遍历,其实现方式包括递归实现和非递归实现. 前序遍历:根节点 | 左子树 | 右子树 中序遍历:左子树 | 根节点 | 右子树 后序遍历:左子树 | 右子树 ...

  7. Linq to Sql : 三种事务处理方式

    原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from  MSDN: 事务 (LINQ to SQL)).M ...

  8. Hibernate的Api以及三种查询方式

    Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) ...

  9. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

随机推荐

  1. linux学习(九)set_uid、set_gid、stick_bit、软链接、硬链接

    一.set_uid set_uid其实是一种特殊权限,我们看一个文件: [root@iZ25lzba47vZ ~]# ls -l /usr/bin/passwd -rwsr-xr-x. root ro ...

  2. java项目log4j日志打印配置

    #定义输出级别和输出平台  添加DEBUG表示打印sql 语句 log4j.rootLogger=DEBUG,INFO,ERROR,stdout,R log4j.category.org.spring ...

  3. 利用VS2008发布一个简单的webservice

    一个开发好的webservice,怎样发布出去,供其他电脑访问呢? 本文将介绍如何发布一个简单的webservice,其中的内容都是在网上查看别人文章,自己仿照着做了一遍,因此,难免会发生错误,如果发 ...

  4. 【20171104中】chrome自动刷新网页

    target:刷访问量 tools:chrome / url start: s1:百度知道,https://zhidao.baidu.com/question/750134067096113532.h ...

  5. Restaurant

    Restaurant Time Limit:4000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit  ...

  6. hive中UDF、UDAF和UDTF使用

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...

  7. Chrome DevTools 开发者工具 技巧 调试

    https://developers.google.com/chrome-developer-tools/docs/tips-and-tricks   1.console面板多行输入 Shift +  ...

  8. FTP配置的一些笔记

    1.必须关闭防火墙 iptables -F iptables -X iptables -Z vi /etc/selinux/config          SELINUX=disabled seten ...

  9. centos6.7系统安装流程

    虚拟机创建centos的过程,如下: 1.首先创建一个空白文件 2.打开虚拟机,打开文件,或者页面的<创建虚拟机>,如下: 3.打开之后如下所示,选择自定义,Linux崇尚自由 4.第四步 ...

  10. SQLServer2008R2 发布订阅及相关问题解决办法

    前言: 前两天接到领导的任务,将一个系统A的客户数据同步到另一个系统B中,以后客户录入入口只有A系统,B系统不提供录入入口,因为各种原因不能使用接口方式A系统和B系统直接交互同步,只能通过数据库重A库 ...