zoukankan      html  css  js  c++  java
  • 使用Struts,前台提交给后台的汉字为乱码

    首先产生乱码的根本原因为前台JSP页面和后台Action的编码方式不同!

    • Struts的默认编码方式为UTF-8
    • JSP的默认编码方式为GB18030

    解决方案:

    • 前后台编码方式一致;
    • 结合拦截器的使用;
    • 表单传输方式的指定;

    只用三种方式结合使用才能根本上解决乱码问题。

    1:首先指定前后台编码方式:

    前台:

    <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    后台Struts.xml配置文件:

    <constant name="struts.i18n.encoding" value="UTF-8"/>

    2:指定拦截器

    可以自己编写拦截器也可以使用Spring提供的拦截器(用于SSH整合)。

    使用Spring提供的拦截器需要在web.xml中添加如下配置:

    <!--配置编码过滤器 -->

    <filter>

    <filter-name>encodingFilter</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>

    <init-param>

    <param-name>forceEncoding</param-name>

    <param-value>true</param-value>

    </init-param>

    </filter>

    <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

    </filter-mapping>

    encoding:用来指定一个具体的字符集。

    forceEncoding:Spring的早期版本这个参数作用很单一,当request中已经被指定了一个字符集的时候是否再将用endcoding对应的字符集设置到request中去。举个例子来说明,假如说过滤器该字段被配置为false,当请求被提交之后,过滤器会判断request.getCharacterEncoding()是否为null,如果是null那么就会进行request.setCharacterEncoding("UTF-8")的操作,如果不是null那么过滤器什么也不会做。如果被配置成了true,则每次都会进行request.setCharacterEncoding("UTF-8")的操作。

    3:表单指定传输方式:

    使用表单提交参数的时候一定要显示的指定传输的方式,将其指定为post方式。如果不显示指定传输方式默认为get方式,get方式会将参数拼接在URL中,而编码方式为ISO-8859-1。这种情况下(使用get方式)即使你做到了步骤1和步骤2(即统一了前后台编码方式和设置了拦截器)也仍然会出现汉字乱码的问题。除非你在后台使用如下方式对存储汉字的参数做一下处理:

    String str = new String(name.getBytes("ISO-8859-1"),"UTF-8");

    但是如果存储汉字的参数特别多的话,手工进行转换就很麻烦和得不偿失了。

    所以一定要指定表单传输方式为POST!

     

    综上,乱码的问题就会得以解决。

  • 相关阅读:
    坑爹的微信支付v3,其实没有那么坑
    Mysql探究之null与not null
    Mysql的空值与NULL的区别
    Java编程思想(第4版) 中文清晰PDF完整版
    URI和URL的区别
    html 文本输入框效果大汇集
    HTTP状态码大全
    Silverlight ModelView中调用UI进程
    appium部分api
    appium元素定位
  • 原文地址:https://www.cnblogs.com/wanggangblog/p/3477525.html
Copyright © 2011-2022 走看看