今天,想简单地总结一下,提交表单后出现乱码的问题.
下面分两种情况来陈述:
第一种情况:没有上传功能的表单提交后出现乱码(即没有在页面使用上传功能的标签,如下):
<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"%>
完成这三步,就配置完成了.
分享到:
相关推荐
然而,对于复杂的应用场景,还需要注意其他潜在的编码问题,例如文件上传、邮件发送等涉及编码转换的环节。总的来说,一致性是解决乱码问题的关键,无论是数据库、网页、文件还是用户输入,都应保持一致的字符编码。
在这个名为“项目小结.doc”的文档中,作者记录了他开发一个电子相册项目的过程,主要涉及以下几个IT知识点: 1. **项目启动与需求分析**: - 开始时,作者面对新项目感到迷茫,不清楚要实现哪些功能。这表明在...
当用户提交表单时,浏览器会将文件以二进制形式封装在HTTP请求体中,并使用特定的分隔符(即第一行的随机字符串)进行区分。在服务器端,我们需要使用`ServletInputStream`来读取请求的正文,然后解析出文件内容。...
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...
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...
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...
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...
8. `multipart/form-data`:用于上传文件时的表单数据编码。 9. `text/css`:CSS样式表文件。 10. `text/javascript`或`application/x-javascript`:JavaScript代码,现代浏览器通常使用`application/javascript`。 ...
**12.5 SpringMVC小结** - **优势**:清晰的架构、易于理解和使用。 - **自由度和扩展性**:通过各种配置和自定义实现高度的灵活性。 #### 补充 **13.1 前台传method的方法名,后台通过反射调用方法** 通过动态...
- **3.9 本章小结** #### 第4章 配置Struts组件 - **4.1 Web应用部署描述符** - 讨论了`web.xml`文件在Struts应用中的作用。 - **4.2 STRUTS配置文件** - 介绍了`struts-config.xml`文件的配置细节。 - **4.3 ...