- 浏览: 615663 次
- 性别:
- 来自: 杭州,长沙
文章分类
- 全部博客 (279)
- Java (30)
- Jsp、Servlet (18)
- Web前端 (56)
- Oracle (31)
- SqlServer (1)
- Jetty (3)
- Tomcat (6)
- Weblogic (11)
- Websphere (2)
- Struts2 (13)
- Spring (5)
- Ibatis (8)
- Hibernate (3)
- Webservice (1)
- C/C++ (2)
- Linux (13)
- Android (1)
- 正则表达式 (3)
- 网络组建 (3)
- 软件工程 (11)
- IDE使用技巧 (20)
- Windows操作技巧 (18)
- 养生之道 (1)
- 杂七杂八 (15)
- 心理保健 (1)
最新评论
-
50854319:
elements[i] = tagArr[i]; 这个需要修改 ...
document.getElementsByName在IE下的bug解决 -
mengsina:
通过楼主的介绍,能够启动client了。但是又遇到了cisco ...
(转)Cisco Systems, Inc. VPN使用过程中常见问题解决方案 -
zzz_robinson:
谢谢,关闭-启动-启动。这个循序对的,否则每次都提示服务没打开 ...
(转)Cisco Systems, Inc. VPN使用过程中常见问题解决方案 -
wuchunjiesp:
总算解决了,THANK楼主,空值问题是TYPE里面参数类型定义 ...
(原创)Ibatis2调用数据库存储过程的相关示例 -
wuchunjiesp:
存储里面是这样的
FOR I IN 1..P_GOODSDI ...
(原创)Ibatis2调用数据库存储过程的相关示例
经过网上搜索和自己的经验,JSP/Servlet页面的中文显示为乱码的问题可以细分为5类:
1. JSP页面显示乱码。
2. Servlet接收Form/Request传递的参数时显示为乱码
3. JSP接收Form/Request传递的参数时显示为乱码
4. 用<jsp:forward page="catalog2.html"></jsp:forward>时页面显示乱码
5. 数据库存取的时候产生乱码。
解决方式:
1. JSP页面显示乱码的解决方式:
第一种方式
为在页面的开头加上:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<!--这里的 GBK可以由 gb2312代替,此处以GBK为例。下同 -->
注: 有时候如果不再页面开头加上这句,则页面中无法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,这是由于默认情况下, JSP是用iso-8859-1来编码的,可以在Window->Preferences->General->Content Type选项下,在右边的窗口选择Text->Jsp,然后在下面的Default Encoding由默认的iso-8859-1改为GBK,然后点击update即可解决。
然而这 种方式会带来一些问题:由于这一句在其他文件include该文件的时候不能被继承,所以include它的文件也需要在文件开头加上这句话,此时如果用 的是pageEncoding="gbk"则会出现问题。类似于org.apache.jasper.JasperException: /top.jsp(1,1) Page directive: illegal to have multiple occurrences of contentType with different values
(old: text/html;charset=GBK, new: text/html;charset=gbk).
类似地,如果两个文件一个用的是gbk,一个用的是gb2312也会出现问题。
另一种更好的解决方式为:
在项目的web.xml中添加以下片段:
<!-- 下面的代码为解决页面乱码问题而加入 -->
<jsp-config>
<jsp-property-group>
<description>
Special property group for JSP Configuration JSP example.
</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GBK</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
</jsp-property-group>
<jsp-property-group>
<description>
Special property group for JSP Configuration JSP example.
</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.html</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GBK</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
</jsp-property-group>
</jsp-config>
2. Servlet接收Form/Request传递的参数时显示为乱码的解决方式:
第一种解决方式
为在用到request方法的前面加上这条语句:
request.setCharacterEncoding("GBK");
同样地,这也会由于页面设置中GbK或gB2312大小写不同或者采用不同的汉语字符集而发生错误。
另一种更好的解决方式
为:添加一个名为SetCharacterEncodingFilter的filter。
filter的源文件为(参见apach安装目录下\webapps\jsp-examples\WEB-INF\classes\filters中的SetCharacterEncodingFilter.java文件):
package com.filters;
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;
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. JSP接收Form/Request传递的参数时显示为乱码
当 我们按照第二种乱码的解决方式修改了web.xml并添加了filter之后,有时候并不一定就对乱码问题高枕无忧了,有时候我们会奇怪的发现 Sevlet接收Form/Request传递的参数可以正常显示了,但是jsp页面接受Form/Request传递的参数却仍然显示为乱码。这是为什 么呢?
对于我遇到的情况而言,我发现是由于我在用Form发送信息的页面采用了这样的html:
<form action="getParam.jsp" >
姓名<input type="text" name ="UserName"> <br>
选出你喜欢吃的水果:
<input type ="checkbox" name = "checkbox1" value = "苹果"> 苹果
<input type ="checkbox" name = "checkbox1" value = "西瓜"> 西瓜
<input type ="checkbox" name = "checkbox1" value = "桃子"> 桃子
<input type ="checkbox" name = "checkbox1" value = "葡萄"> 葡萄
<input type = "submit" value = "提交">
</form>
也就是说没有指定form的method属性。而问题就发生在此,Form的默认mothod属性为get.
而get是通过在发送请求的url后面加?然后加参数和值来传递数据的的,编码格式为ASCII.这就要求我们在传递的数据中有非ASCII字符或是超过了100个字符,那么你必须使用method="post",否则就会出现乱码。
所以解决方式为:第二种乱码的解决方式+在发送页面的Form中指定method为post.
4. 用<jsp:forward page="catalog2.html"></jsp:forward>时页面显示乱码的解决方式
此 时实际上乱码的原因和产生其他几种乱码的原因不同,它的原因在于我们用eclipse编辑要forward的html或者jsp文件时,采用的编码是可以 产生中文乱码的编码而不是GBK或者GB2312.所以解决方式就是把eclipse编辑器的编码方式改为GBK或者GB2312.
具体操作方式见:上文红色字体部分。
5. 数据库存取的时候产生乱码的解决方式
当然,在写数据库时,也要保正数据库的编码与其它一致:
我们可以在系统盘windows目录下的my.ini文件,在文件中插入一行default-character-set=GBK,但上面说了这么多,大家也应该明白些了吧,改动太多的默认设置不是我的风格,因此上,这一行还是不要加的好。
但不管怎么样,我们还是要创建一个基于中文编码的数据库,当然,用客户端登录的时候,某些客户用自动把字体编码转换成中文编码。在这里,我想说一下在DOS下创建中文编码数据库的方法:
在进入数据库的时候,用mysql --default-character-set=gbk -u root -p 这句话进入mysql,然后创建数据库,如:create database admin;这样创建起来的数据库就是基于中文编码的了。
用连接数据库的时候,读出的数据也可能是乱码,解决这个问题的方法非常简单,只要在你建立数据库连接的时候把URL设置成 下面这个样子就可以了:URL= jdbc:mysql://localhost:3306/my_database?useUnicode=true&characterEncoding=GBK
好了,说了这么多,总结一句话结束吧,把各种地方的编码统一起来,那么,所在的乱码问题就都解决了!
发表评论
-
Java script 看看黑客怎么写的 (转)
2013-01-19 16:54 1217在2011年的BlackHat DC 2011大会上Ryan ... -
Java防止非法和重复表单提交的分析
2009-07-01 09:47 2060预期达到目标: 1、当用户进行的是Refres ... -
web.xml 详解三
2009-06-23 13:44 924web.xml 详解三一旦建立了一个过滤器,可以在web.xm ... -
web.xml详解二
2009-06-23 13:43 770web.xml 详解二例如,程序清单5-7给出一个名为Init ... -
web.xml详解一
2009-06-23 13:40 1013web.xml 详解一1 定义头和 ... -
Web应用中并发控制的实现
2009-04-17 09:55 1369引言 B/S构架的应用越来越普及,但由于它有别于C/S构 ... -
MIME标准介绍
2009-04-16 16:52 1530词条简介 [ 编辑本段 ... -
jsp页面缓存处理
2009-04-09 15:22 22921。在Asp页面首部<head>加入 Re ... -
FCKeditor使用示例
2009-04-09 15:21 1288示例一 一、准备工作 在http://www.fcked ... -
对Jsp中的自定义标签由浅到深详细讲解
2009-03-31 19:29 829一、基本概念: 1.标 ... -
JSP开发中的对象和范围属性
2009-03-31 19:05 846在JSP页面中的对象,包括用户创建的对象(例如,JavaBea ... -
一个实用的例子:JSP抓取网页代码的程序
2009-03-31 17:38 994< %@ page contentType=&q ... -
重复提交、重复刷新、防止后退的问题以及处理方
2009-03-28 16:15 3189一。前言你在任何一个比较专业的BBS都会看到这样的问题,即使你 ... -
EL表达式详解
2009-03-05 14:23 1577EL表达式详解 在 JSP 页面中,使用标签库代 ... -
在浏览器关闭cookie情况下进行会话管理-JSP教程,Jsp/Servlet
2008-10-25 16:09 1377如果浏览器不支持 cookies,或将浏览器设置为不接受 co ... -
JFreeChat的介绍
2007-11-16 10:07 1406一、简介 JFreeChart(http://www.jfr ... -
JSP中的源代码泄漏问题
2008-08-21 11:45 1829在JSP技术得到广泛应用 ...
相关推荐
### 解决JSP+Servlet开发中的中文乱码问题 #### 概述 在基于JSP(Java Server Pages)和Servlet技术的Java Web应用开发过程中,中文乱码问题一直是困扰开发者的一大难题。由于Java Web应用程序涉及多个组件之间的...
该方案的解决方法可以解决jsp+servlet+mysql开发中常见的中文乱码问题,确保中文字符的正确显示。 jsp+servlet+mysql乱码解决方案的实现步骤如下: 首先,在jsp页面中设置编码格式为utf-8,以确保页面中的中文字符...
Filter可以在请求到达Servlet之前对请求进行处理和过滤,从而实现中文乱码和非法访问的解决。 9. 在主页中显示访问次数:使用Servlet可以实现访问次数的统计和显示。在Servlet中可以使用Session对象来记录访问次数...
jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...
解决页面乱码问题</description> <display-name>JSPConfiguration</display-name> *.jsp</url-pattern> <page-encoding>GBK</page-encoding> </jsp-property-group> </jsp-config> ``` 这样,所有以`.jsp`...
通过以上方法,基本可以解决servlet和jsp在接收和显示中文时的乱码问题。但在实际开发中,可能还需要根据具体环境和需求进行调整。了解这些知识点,对于Java Web开发者来说是非常必要的,能够提高项目的稳定性和用户...
本主题聚焦于“jsp页面显示中文乱码解决”,这是一个典型的问题,许多开发者在处理包含中文字符的JSP页面时可能会遇到。让我们深入探讨这个问题,并提供一系列解决方案。 1. **字符编码基础** - **字符集与编码**...
总结来说,解决JSP页面中文乱码问题的关键在于保持字符编码的一致性,从编辑器保存文件的编码、JSP页面的编码声明、Servlet的响应编码、POST请求的参数编码,到服务器处理GET请求的编码,都需要进行适配和统一。...
本文将深入探讨如何解决Servlet页面显示乱码的问题,这对于初学者来说是至关重要的知识点。 首先,我们需要理解乱码的根源。在Web应用中,乱码通常出现在两个阶段:输入(如POST表单数据)和输出(如HTML页面的响应...
### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...
尤其是在使用Java Server Pages(JSP)和Servlet进行中文处理时,字符编码的设置不当往往会导致页面显示出现乱码。本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的...
JSP/Servlet 中的汉字编码问题 ...’、乱码的由来 JSP/Servlet 汉字编码问题及在 WAS 中的解决办法 结束语 参考文章 1. 问题的起源每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码, 中
在 JSP 文件中,如果中文内容显示乱码,可能是由于浏览器的默认编码方式为 ISO-8859-1,而 JSP 文件的编码方式为 UTF-8所致。解决方案是,替换 ISO-8859-1,修改页面编码为 UTF-8。 调用 Servlet 显示乱码 在调用 ...
### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...
- **常见问题**:中文或其他非英文字符在Web应用中的显示问题。 - **解决方案**:通过设置正确的字符集编码(如UTF-8),并在服务器、客户端和数据库之间保持一致的编码设置。 #### 八、XML及DOM4J - **XML简介**:...
JSP 页面中的字符编码方式与乱码解决方法 在 JSP 中,字符编码方式的设置是非常重要的,因为它直接影响着页面的显示效果。如果不正确地设置字符编码方式,可能会出现乱码问题。下面我们将详细介绍 JSP 中的字符编码...
在本文中,我们将深入探讨JSP页面传参出现中文乱码的原因,并提供有效的解决方案。 1. 乱码原因: - **编码与解码不匹配**:当JSP页面、Servlet或服务器配置的字符编码不一致时,中文字符在传输过程中可能被错误地...
在 JSP 和 Servlet 操作 MySQL 过程中,中文乱码问题是一个常见的问题,而解决这个问题需要从多方面入手,包括 JSP 页面、Servlet 编程和 Filter 配置等。本文将详细介绍解决 JSP 和 Servlet 操作 MySQL 中文乱码...
6. **JSP页面交互**: JSP通常用于构建用户界面,用户可以通过表单输入邮件的收件人、主题、正文和选择附件。这些数据通过HTTP请求发送到Servlet,Servlet负责处理请求,使用JavaMail API发送邮件。 7. **Servlet...