`
birch
  • 浏览: 14209 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

上传文件同时提交表单出现乱码(小结)

阅读更多
今天,想简单地总结一下,提交表单后出现乱码的问题.

下面分两种情况来陈述:

第一种情况:没有上传功能的表单提交后出现乱码(即没有在页面使用上传功能的标签,如下):
<input type="file"name="upload"contentEditable="false"/>

一般情况下,在每一个JSP页面的最上方加上下面一句:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>,然后把这个页面的表单提交到后台时,获取到的中文一般不会出现乱码的,如果出现乱码,我们可以在后台处理的JSP上或者servlet对应的方法里加入这一句(注意:这一句一定要放在你取出表单数据之前,也就是说先添加这一句,然后再取出表单的值.)request.setCharacterEncoding("gbk");这样就可以解决当前提交过来的表单乱码.


第二种情况:上传文件同时提交表单后出现乱码(不管你是用STRUTS框架,还是纯JSP,以下的解决办法都管用,它更方便的来解决乱码问题,因为可以动态设置字符集编码,而且对于上面第一种情况同样适用.)

步骤如下:
  1.添加一个类,通过这个类来进行字符集编码的转换来解决乱码问题,如下:
package com.flybaba.web;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class CharacterEncodingFileter implements Filter{
   
    private String charset;

    public void destroy(){

    }

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException{
        /*设置request的字符编码,
         **这一句的作用和上面说的,直接在处理页面加,是一样的效果,
         **只不过现在不用在每个处理表单的后台页面加上这一句.
          */
        req.setCharacterEncoding(charset);
        /*设置完成后,把请求转回到表单处理的后台页面*/
        chain.doFilter(req, res);
    }

    public void init(FilterConfig config) throws ServletException{

        /*获取web.xml文件中的
           *<param-name>charset</param-name>标签的名字charset对应的值
         */ 
        charset = config.getInitParameter("charset");
    }
}

2.找到你所在项目的web.xml文件,然后在web.xml文件中的</web-app>标签前加上以下配置内容:

<filter>
      <filter-name>filter</filter-name>
      <filter-class>com.flybaba.web.CharacterEncodingFileter </filter-       class>
      <init-param>
          <param-name>charset</param-name>
          <param-value>gbk</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>filter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 
下面简单的解释一下这个配置的原理,每定义一个过滤器都要在这个<filter></filter>标签内定义, <filter-name>filter</filter-name>标签是定义过滤器名字,是自定义的,与下面过滤器映射标签<filter-mapping></filter-mapping>内的过滤器名字对应,否则过滤器会不起作用.而初始化参数标签<init-param></init-param>内可以定义多个参数,我们可以在对应的过滤器类中获取得到.如我们上面定义的过滤器类中,在初始化方法init()中的,通过这一句config.getInitParameter("charset");就可以获取到web.xml文件中,初始化参数标签"charset"对应的值"gbk".
      <init-param>
         <param-name>charset</param-name>
         <param-value>gbk</param-value>
      </init-param>
而在映射标签 <filter-mapping></filter-mapping>中的子标签<url-pattern>/*</url-pattern>的值为"/*",意思是这个过滤器会拦截所有的用户请求,如果你不想拦截所有的请求页面,你可以修改它的值,假设我只拦截test.jsp,那么可以设成<url-pattern>/test.jsp</url-pattern>,不过还是建议拦截所有的用户请求.

3.在每一个JSP页面的最上方加上下面一句(注意pageEncoding的值最好是gbk或者gb2312,否则有可能过滤器失效,大家不妨试试:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

完成这三步,就配置完成了.

2
0
分享到:
评论

相关推荐

    PHP+MySQL存储数据常见中文乱码问题小结

    然而,对于复杂的应用场景,还需要注意其他潜在的编码问题,例如文件上传、邮件发送等涉及编码转换的环节。总的来说,一致性是解决乱码问题的关键,无论是数据库、网页、文件还是用户输入,都应保持一致的字符编码。

    项目小结.doc

    在这个名为“项目小结.doc”的文档中,作者记录了他开发一个电子相册项目的过程,主要涉及以下几个IT知识点: 1. **项目启动与需求分析**: - 开始时,作者面对新项目感到迷茫,不清楚要实现哪些功能。这表明在...

    JavaWeb文件上传与下载功能解析

    当用户提交表单时,浏览器会将文件以二进制形式封装在HTTP请求体中,并使用特定的分隔符(即第一行的随机字符串)进行区分。在服务器端,我们需要使用`ServletInputStream`来读取请求的正文,然后解析出文件内容。...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中的运用 42 2.3 名称空间和dtd...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中的运用 42 2.3 名称空间和dtd...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中的运用 42 2.3 名称空间和dtd...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中的运用 42 2.3 名称空间和dtd...

    php header Content-Type类型小结

    8. `multipart/form-data`:用于上传文件时的表单数据编码。 9. `text/css`:CSS样式表文件。 10. `text/javascript`或`application/x-javascript`:JavaScript代码,现代浏览器通常使用`application/javascript`。 ...

    SSM集成应用

    **12.5 SpringMVC小结** - **优势**:清晰的架构、易于理解和使用。 - **自由度和扩展性**:通过各种配置和自定义实现高度的灵活性。 #### 补充 **13.1 前台传method的方法名,后台通过反射调用方法** 通过动态...

    struts从入门到精通.doc

    - **3.9 本章小结** #### 第4章 配置Struts组件 - **4.1 Web应用部署描述符** - 讨论了`web.xml`文件在Struts应用中的作用。 - **4.2 STRUTS配置文件** - 介绍了`struts-config.xml`文件的配置细节。 - **4.3 ...

Global site tag (gtag.js) - Google Analytics