一、jsp变成之道---中文乱码

jsp在转换为Servlet的过程经过三次编码转化:

转自  http://www.cnblogs.com/chenssy/p/4235191.html

二、java Web项目中解决中文乱码问题总结:

转自 http://www.cnblogs.com/chenssy/p/4235191.html

三、编写过滤器处理乱码:

表单提交数据、ajax请求的乱码问题总结:转自 http://www.cnblogs.com/liuling/archive/2013/03/31/encoding.html

编写过滤器处理乱码问题总结:转自 http://www.cnblogs.com/liuling/archive/2012/12/17/asdfsdfa.html

四、自我理解总结:

1、javaWeb中有哪些地方有转码?
1)浏览器:   
 -->发送一个Http请求,经过编码的地方有url、cookie、parameter
2)服务器:    
 -->接受HTTP请求,解析HTTP请求,对url、cookie、parameter进行解码
 -->服务器进行业务逻辑处理过程中可能需要读取数据库、本地文件或者网络中的其他文件等,这些过程都需要进行编码解码
 -->处理完后,服务器将数据进行编码后发送给客户端
3)浏览器 
 -->浏览器经过解码后显示给用户,这个整个过程中涉及的编码解码的地方较多.且服务器与客户端进行交互的过程最容易出现乱码
备注:
简单理解为:页面编码数据传递给服务器,服务器对获得的数据进行解码操作,经过一番业务逻辑处理后将最终结果编码处理后传递给客户端,
客户端解码展示给用户。

2、客户端向服务器发送请求无非就通过四中情况:
1)URL方式直接访问
http://localhost:8080/jsp-02/updateStudent.jsp?sid=5&sname=张六&sadress=北京门头沟&slikes=看书-上网-旅游
http     协议
localhost  主机
8080    端口
jsp-02    context Path
updateStudent.jsp servlet Path
sid=5&sname=张六&sadress=北京门头沟&slikes=看书-上网-旅游   为参数
备注:由于各大浏览器、各个操作系统对URL的URI、QueryString编码都可能存在不同,这样对服务器的解码势必会造成很大的困扰,tomcat是如何对URL进行解码操作的:对URI的解码操作是首先获取Connector的解码集,该配置在server.xml中<Connector URIEncoding="utf-8"  />如果没有定义则会采用默认编码ISO-8859-1来解析

2)页面链接
3)表单get提交
 通过URL方式提交数据是很容易产生乱码问题的,所以通常采用表单形式提交数据。当用户点击submit提交表单时,浏览器会根据设定的编码来编码数据传递给服务器。通过GET方式提交的数据都是拼接在URL后面(可以当做query String??)来提交的,所以tomcat服务器在进行解码过程中URIEncoding就起到作用了。tomcat服务器会根据设置的URIEncoding来进行解码,如果没有设置则会使用默认的ISO-8859-1来解码。假如我们在页面将编码设置为UTF-8,而URIEncoding设置的不是或者没有设置,那么服务器进行解码时就会产生乱码。这个时候我们一般可以通过new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8") 的形式来获取正确数据。

备注:如果是post提交,则与tomcat的编码是没有关系的,此时修改tomcat的server.xml的编码方式是不可行的。只有get提交,才可与tomcat的编码有关

4)表单post提交
  对于POST方式,它采用的编码也是由页面来决定的即contentType。当我通过点击页面的submit按钮来提交表单时,浏览器首先会根据contentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器,在服务器端同样也是用contentType中设置的字符集来进行解码(这里与get方式就不同了),这就是通过POST表单提交的参数一般而言都不会出现乱码问题。当然这个字符集编码我们是可以自己设定的:request.setCharacterEncoding(charset) 。

3.1jsp页面的声明
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
 <!-- pageEncoding是jsp文件本身的编码,
 浏览器首先会根据contentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器
 在服务器端同样也是用contentType中设置的字符集来进行解码
 以tomcat为列服务器对对URL进行解码操作的是在server.xml中<Connector URIEncoding="utf-8"/>进行配置的。
 如果没有定义则会采用默认编码ISO-8859-1来解析
 -->

3.2Java中处理

reqVO.setCaoi(new String (reqVO.getCaoi().getBytes("iso8859-1"),"UTF-8"));

4.1页面中的href路径

window.location.href="genQueryAction.do?action=outputExclInfo&pattern="+encodeURI(encodeURI(pattern))+"&name="+encodeURI(encodeURI(name))”;

4.2java中处理
String pattern = java.net.URLDecoder.decode(request.getParameter("pattern")==null?"":request.getParameter("pattern"), "utf-8");
String name = java.net.URLDecoder.decode(request.getParameter("name")==null?"":request.getParameter("name"), "utf-8");

十五、web中处理乱码问题总结的更多相关文章

  1. Java Web中解决乱码的方式

    Java Web中解决乱码的方式 方式一:添加编码过滤器 package com.itmacy.dev.filter; import javax.servlet.*; import javax.ser ...

  2. web中的乱码处理

    1 .web中的中文乱码处理 1.页面设置pageEncoding="UTF-8" <%@ page contentType="text/html;charset= ...

  3. Expo大作战(十五)--expo中splash启动页的详细机制

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. java web学习总结(二十五) -------------------JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  5. 十五 web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata的形式 urllib库中使用xpath表 ...

  6. python 学习笔记十五 web框架

    python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...

  7. 解决web中的乱码

    统一使用utf-8进行编码数据库的编码格式也是utf-8 对于页面post传过来的不会出现乱码 对于页面get 传过来值解决乱码 方法一:在业务层:userName = new String(user ...

  8. React Native(十五)——RN中的分享功能

    终于,终于,可以总结自己使用RN时的分享功能了-- 为什么呢?且听我慢慢道来吧: 从刚开始接触React Native(2017年9月中旬)就着手于分享功能,直到自己参与公司的rn项目开发中,再到现在 ...

  9. Java进阶(十五)Java中设置session的详细解释

    Java中设置session的详细解释 简单通俗的讲session就是象一个临时的容器,用来存放临时的东西.从你登陆开始就保存在session里,当然你可以自己设置它的有效时间和页面,举个简单的例子: ...

随机推荐

  1. 慕课网:剑指Java面试-Offer直通车视频课程

    慕课网:剑指Java面试-Offer直通车视频课程,一共有10个章节. 目录结构如下: 目录:/2020036-慕课网:剑指Java面试-Offer直通车 [6G] ┣━━第10章 Java常用类库与 ...

  2. Python - __getattr__和__getattribute__的区别

    传送门 https://docs.python.org/3/reference/datamodel.html#object.__getattr__ https://docs.python.org/3/ ...

  3. 创业学习---《预判项目的长期壁垒》--B-3.预判模块---HHR计划---以太一堂

    一,<开始学习> 1,投资人经常会问CEO:你的项目的长期壁垒是什么?你是怎么思考的? 2,三个预热思考题: (1)突然有一天,大公司要抄你,你会怎么办?  答:用增长技术来和他竞争. ( ...

  4. eclipse 查看项目svn路径

    1. window -- show view -- other -- svn -- svn资源库 2. 右键 -- properties 3.复制路径,打开TortoiseSvn -- Repo br ...

  5. C++11特性中基于范围的for循环

    本文摘录柳神笔记:   除了像C语⾔的for语句 for (i = 0; i < arr.size(); i++) 这样,C++11标准还为C++添加了⼀种新的 for 循环⽅ 式,叫做基于范围 ...

  6. java面试(一)

    一.java基础 1.JDK和JRE的区别? JDK是java的开发环境,JRE是java的运行环境,即编写java程序就一定需要JDK,只是运行java程序只要JRE就足够了. 2.java中==和 ...

  7. 「USACO5.5」矩形周长Picture

    题目描述 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 编写一个程序计算周长. 如图1所示7个矩形. 如图2所 ...

  8. django-实现登录短信验证

    功能演示 核心任务 前端功能: 点击按钮Ajax调用发送验证码功能 输完验证码后Ajax调用验证功能 后端功能: 功能1:发送验证码功能 功能2:验证码检查 后台核心逻辑(不需要手写) 功能3:发短信 ...

  9. Flask - 性能分析(Profiling,profiler,profile)

    1. 疑问 @app.cli.command() @click.option('--length', default=25, help='Number of functions to include ...

  10. js学习:函数

    概述 函数的声明 JavaScript 有三种声明函数的方法 function 命令 function命令声明的代码区块,就是一个函数.function命令后面是函数名,函数名后面是一对圆括号,里面是 ...