链接()中的href标签属性;

以POST方式提交的表单(

)中的action标签属性。

例如,网页上不应该产生这样的链接:

[xhtml] view plain copy

使用者身份验证"

正确的写法是:

[xhtml] view plain copy

使用者身份验证

为此,方案之一可以在JSP网页上使用脚本化语言进行URLEncoding处理。如:

[xhtml] view plain copy

">使用者身份验证

request-body的编码处理

request-body只有在POST提交的方式下才会产生。request-body的编码方式由表单的enctype标签属性指定,同request-line一样,编码request-body时使用的字符集也是当前网页在浏览器上显示时所使用的字符集。request-body的编码过程由客户端浏览器自动完成,不需要额外的编程处理。

服务器的处理

相对于用户端,服务器端在接收到HTTP请求时提供了两种处理请求数据的方式:自动处理与不处理。

服务器一般会自动处理application/x-www-form-urlencoded类型的数据(包括request-line及request-body中的数据),就servlet(Servlet类或JSP网页)而言,可以通过request对象的getParameter()或getParameterValues()取得这些数据。对于除此以外的其它MIME类型的数据,HTTP服务器则是将处理的过程直接交到了与HTTP请求相对应的servlet(Servlet类或JSP网页)身上。

例如用户端有以下表单被提交:

[xhtml] view plain copy

表单提交时经服务器端自动处理后与checkUser.html相对应的servlet(Servlet类或JSP网页)可以通过下面的方式取得数据:

[java] view plain copy

String opt = request.getParameter("opt");

String[] users = request.getParameterValues("username");

默认情况下,服务器对于接收到的application/x-www-form-urlencoded类型数据进行字符集为ISO-8859-1的URLDecoding处理,经过处理之后的字符串内码为ISO-8859-1。对于没有附加任何设置的HTTP服务器而言,我们的servlet在取得数据之后必须进行相应的解码处理,生成内码为UTF-16(unicode)的字符串。

例如对于用户端请求数据中以UTF-8字符集进行URLEncoding的数据,servlet需要进行如下方式的解码:

[java] view plain copy

String opt = request.getParameter("opt");

if (opt!=null && !"".equals(opt)) {

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

}

为了避免这种额外的编码/解码处理,也就是说让服务器了解到用户端在URLEncoding时所使用的字符集,从而直接进行相应字符集的URLDecoding处理,不同的HTTP服务器提供了不同的解决方案。

以Tomcat为例,Tomcat自动解码request-line的处理方式由Tomcat的配置文件server.xml指定。在server.xml中的Connector标签中提供了URIEncoding标签属性,只要为其指定解码用的字符集,Tomcat就会自动解码request-line中经过application/x-www-form-urlencoded编码处理的数据。例如:

URIEncoding="UTF-8" redirectPort="8443"/>

Tomcat自动解码request-body的处理方式是设置request的characterEncoding值。如:

request.setCharacterEncoding("UTF-8");

但是这一操作必须提前在filter中完成,在servlet中使用此方法已经不起作用了。filter的例子如下:

[java] view plain copy

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 CharacterEncodingFilter implements Filter {

private String encoding;

public CharacterEncodingFilter() {

encoding = null;

}

public void destroy() {

encoding = null;

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

request.setCharacterEncoding(encoding);

chain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

encoding = filterConfig.getInitParameter("encoding");

if (encoding == null || "".equals(encoding)) {

encoding = "UTF-8";

}

}

}

我们可以在web.xml使用这个filter。web.xml的相应配置如下:

[xhtml] view plain copy

Character Encoding Filter

CharacterEncodingFilter

encoding

UTF-8

Character Encoding Filter

/*

通过上述两种方式的预处理,在servlet中取出的数据可以不必进行ISO-8859-1解码而直接使用。

字符集的选择

在处理application/x-www-form-urlencoded类型的数据过程中,需要注意的另一个问题是字符集的选择问题。如上所述,不论是request-line还是request-body,其URLEncoding所使用的字符集都是当前网页在浏览器上显示时所使用的字符集。而这个信息又是HTTP服务器端生成HTML网页时,在HTTP响应中提供的。

当HTTP服务器接收到一个HTTP请求时,服务器总是需要向用户端发送一个HTTP响应。HTTP响应数据与HTTP请求数据格式相同,同样由以下几个部分组成:

[]

下面描述的是请求一个HTML网页数据时服务器的响应信息:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/html;charset=UTF-8

Content-Length: 265

Date: Thu, 17 Dec 2009 05:20:36 GMT

test

Hello World

[End]

其中headers的Content-Type指定了数据流的数据格式以及显示用的字符集。这一指标可以通过以下几种方式指定:

1. HTML网页

在HTML网页的

中存在多个标签,其中可以设置Content-Type。例如:

2. JSP网页

JSP网页中,除了标签之外,还需要在JSP网页头部设置如下代码:

3. Servlet类

如果要在Servlet类中通过response向用户端传送HTML数据,需要在传送前指定Content-Type。代码如下:

response.setContentType("text/html;charset=UTF-8");

通过上述三种方式,可以确保响应数据传送到用户端浏览器时,浏览器使用正确解码方式和字符集显示其内容。

结束语

总之,Content-Type是联系用户端与服务器端的纽带,通过这一指标,双方得以对相关的数据进行正确的编码与解码。只要了解了Content-Type的作用以及使用方法,乱码问题就会迎刃而解。

java web乱码问题_如何解决JavaWeb乱码问题相关推荐

  1. java web 是什么_什么是javaweb开发

    Java:简单来说,Java是一门语言,是一门和计算机交流的语言. Web:web(World Wide Web)即全球广域网,它是一种分布式图形信息系统.简单来说就是 浏览器上的一个个网站. Jav ...

  2. java web工程搭建_手把手搭建javaweb项目_手把手javaweb

    对于传统的 Java Web项目,我们一般还需要指定配置 web.xml位置.如上图 Gif演示,这个一般在 Facts 中进行配置.Facts 可以理解为用于配置项目的框架区,在这里管理项目使 CS ...

  3. java web的运行方式_在运行 Javaweb项目时报错,不知道什么原因,百度了好多方法跟着人家的方法做了还是报错...

    在运行 Javaweb项目时报错,不知道什么原因,百度了好多方法跟着人家的方法做了还是报错 报错信息如下 org.apache.catalina.core.StandardContext loadOn ...

  4. java web系统毕业论文_毕业论文--基于JavaWeb的网络购物中心系统的实现.doc

    毕业论文(设计) 题 目: 基于JavaWeb的购物网络中心系统 完 成 人: 班 级: 学 制: 专 业: 指导教师: 完成日期: 目 录 26014 摘 要( 1) 0 TOC \o " ...

  5. java web 自定义标签_如何在JavaWeb程序中使用自定义标签

    展开全部 tld定义格式32313133353236313431303231363533e78988e69d8331333361323566 [java] view plain copy print? ...

  6. java web.xml 监听器_十:JavaWeb中的监听器(一)

    2.1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域 ...

  7. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

  8. 图解Myeclipse 导入Java Web项目报错的解决办法听语音

    图解Myeclipse 导入Java Web项目报错的解决办法听语音 https://jingyan.baidu.com/article/046a7b3e953ef3f9c27fa93d.html

  9. Java web小项目_个人主页(2)—— 边缘加速原理与实现

    摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...

最新文章

  1. 一步步揭开 原型链的面纱 面试再也不慌 原型链
  2. linux c语言文件属性,Linux C获取文件属性
  3. 4.50Nginx负载均衡
  4. 自定义AlertDialog 问自己的单选item
  5. 百度地图同时显示多个路书
  6. 腾讯携手2020全球C++及系统软件技术大会
  7. bzoj1116: [POI2008]CLO
  8. sql server 2008表中计算机,电脑删除SQLsever2008表格数据出现“不能删除”怎么办
  9. 吉林大学java期末试卷_吉大18年9月《JAVA程序设计》作业考核试题-0001
  10. RFC792翻译(ICMP主要内容)
  11. python实现梳排序
  12. linux 启动 pycharm程序的命令(pycharm已安装好)
  13. 生鲜水果小程序微信源码完整可用精品
  14. 炼油化工常用英文缩写
  15. 微信小程序生成海报图片导出相册
  16. java url解码_URL的编码和解码
  17. java计算机毕业设计BS景区票务管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
  18. Flash制作大雪纷飞效果动画
  19. echarts 柱状图圆柱_手把手教你用ECharts画柱状图
  20. life's a struggle - 宋岳庭

热门文章

  1. LeetCode简单题之删除排序链表中的重复元素
  2. TVM开发三个示例分析
  3. 什么是L1/L2/L3 Cache?
  4. 通往安全自动驾驶汽车的艰难道路
  5. 详解PHP实现定时任务的五种方法
  6. mysql+3.11.1_【MySql】1.3 使用正则表达式搜索
  7. Java 遍历map
  8. java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment
  9. Java 的 API、JDK 和 IDE 是什么
  10. 项目新的需求,网页的自适应交付/响应式交付 Responsive/Adaptive Delivery