对于servlet大家应该都很熟悉了,今天再复习一下,如果有哪里写的不好或不对的地点希望广大的网友批评指正。今天只讨论get和post两w种方式,他们之间有很多的不同点,所以解决编码的方式也会不一样,post的乱码问题好解决一点,下面先简单说下http协议,以便我能更好的记忆原理性的东西和他们之间的不同点。

get方式和post方式都是基于http协议的,它的目的是为了提供一种发布和接收html页面的方法,由客户端发起请求,服务器端进行响应。

  一个完整的请求消息包括:一个请求行,若干消息头和请求实体内容

    请求行包括请求方式(get或post), 资源路径(要访问的地址),http版本号(http1.1)

    若干消息头(比如包涵了浏览器的内核信息(user-agent),打开它的父页面是谁(refer)等

    在请求实体内容和消息头中有一行空行,将消息头和请求实体内容分开,实体内容有用户提交的

  一个完整的响应消息包括:状态行,一个或多个应答头,一个空行,响应实体

    状态行:包括http协议版本号,状态码和原因叙述

    常见状态码:200 正常

          404:请求资源不存在

          500:服务器内部错误    

    粗略说完http后可以介绍get和post方式的不同之处了

get方式:

  get方式是将提交的内容放到url的后面,长度有所限制,post和get都是基于http协议的,get方式是放到了请求行里,因为它的参数是在url中的,而post方式是放到请求实体内容里的,post方式相对安全,浏览器不保留缓存信息,而get方式会wk保留缓存,可以从浏览器的历史记录里查看提交的内容,并且get方式长度有限制,而post没有。

  正是因为get方式和post方式提交数据时在http协议的位置不同,解决他们的编码方式也会不同

  post方式乱码问题解决:

    在servlet的service方法(doGet或doPost方法也可以)中,将request的编码设置为UTF-8

  

req.setCharacterEncoding("UTF-8");

  这样,request的编码就没有问题了,然后将response的编码也设置为UTF-8;

resp.setCharacterEncoding("UTF-8");

  这样,response的编码也没有问题了,但是这样写了以后到浏览器还是可能会出问题的,因为浏览器不知道你的编码格式是什么,所以就按着浏览器的默认格式来显示,所以要把浏览器进行显示时的编码方式也要设置为UTF-8,语句如下:

resp.setContextType("text/html;charset=utf-8");

  同时还要保证你的开发工具编码和项目的编码一致,不然可能会出现乱码问题,这里都是以UTF-8为例

  get方式乱码问题解决:

    get方式除了上面的操作外还要在tomcat的conf目录下的server.xml配置文件里面加上一句话,找到下面这句话,

   

 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

  修改后为

 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" userBodyEncodingForURI="true" />

  这种改法比较灵活,让URL的编码格式跟着页面的编码格式一样,也可以设置为固定的某一种格式,如

 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" EncodingForURI="UTF-8" />

  这样就基本上没有什么问题了,如果还有问题,就得用String里的方法,将页面的乱码改为你想要的格式了,不过,如果上面的方式都对了,这种方式就不怎么会用到了。

  除了上面的操作外,也要把数据库的编码格式设为与项目的一样才行,这里就是改为UTF-8了,因为时间有限,所以写的比较粗糙,还有很多东西也都给省略了,不过解决servlet的编码方式应该是够了的。

  调用时可以用js,如:

function ceshi() {
window.location.href = "UserServlet?uname=zhangsan&realname=" + encodeURIComponent("大家好");
}

  这样就将大家好就不会再显示汉字到地址栏了(把这句话绑定到提交按扭上),就可以提交到相应的servlet了。这种解决乱码的方式同样也适用于jsp

  对了,还得再说点跟servlet有关系的,那就是forward和redirect,forward只能是在当前项目进行跳转,redirect可以跳转到外面去,当然,他们还有别的区别,这里我只说一点我觉得重要的东西,那就是无论使用哪一种,写完了forward和redirect后,一定要加上return,如果不加,后面的语句还是会被执行的,加上return后,后面的语句就会报错,这样就阻止了同一个页面进行了多次跳转。不喜欢的网友误喷,谢谢合作,感谢帮我挑错的网友,因为这样我才会不断进步,真心感谢你们

servlet 解决乱码问题的更多相关文章

  1. JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

    前言 前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一.request请求参数出现乱码问题 1.1.get请求 1)乱码示例 get请求的参数是在u ...

  2. Servlet 中文乱码问题解析及详细解决方法

    使用 servlet 向客户端浏览器回送中文时,经常出现中文乱码的问题,这里给大家完完全全地搞明白: 一.基本常识 中文系统默认是 GBK 编码(GBK是对GB2312的补充,包含它) 需要处理编码问 ...

  3. Servlet中文乱码原因 解决 Get 和 Post 和客户端

    一.Get方式的中文乱码 1) 使用如下页面表单内容: <form action="http://127.0.0.1:8080/day07/params" method=&q ...

  4. [转]Servlet 中文乱码问题及解决方案剖析

    原文地址:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过G ...

  5. Servlet 中文乱码问题及解决方案剖析

    转自:http://blog.csdn.net/xiazdong/article/details/7217022/ 一.常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK ...

  6. jsp中文乱码 Servlet中文乱码 utf-8

    JSP+Servlet项目中,项目统一使用utf-8编码.配置过滤器过滤所以请求并设置utf-8编码,jsp页面也都设置utf-8,但是还有一点很容易忽视的就是tomcat也要设置utf-8,默认情况 ...

  7. 使用Filter过滤器+重写Request完美解决乱码问题

    一:原理 1.对于Post方式提交的数据,我们可以通过直接设置request和response的编码方式来解决乱码问题:但是Get方式提交的数据,那么就需要编码再解码的方式解决乱码问题. 2.我们一般 ...

  8. 解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集

    character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. characte ...

  9. 2018.12.1 web项目中解决乱码问题的一个工具类

    <!-- 配置一个过滤器 编码格式的过滤器 --> <filter> <filter-name>encodeFilter</filter-name> & ...

随机推荐

  1. go语言使用go-sciter创建桌面应用(一) 简单的通过html,css写ui

    我们使用go-sciter,就不得不提Sciter,Sciter 是一个嵌入式的 HTML/CSS/脚本引擎,旨在为桌面应用创建一个 UI 框架层. 说简单点就是我们通过它可以像写html,css那样 ...

  2. Oracle 表空间和数据文件之间的关系

    首先,你需要明白的一点是:数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理存储. 每 ...

  3. Thread中join()方法进行介绍

    http://www.cnblogs.com/skywang12345/p/3479275.html https://blog.csdn.net/dabing69221/article/details ...

  4. 2019年Java未来的发展方向

    2018即将结束,迎来2019年,Java作为世界上 最流行的计算机编程语言,在当今信息时代中发挥了重要的作用.Java语言本身具有着自己独特的优势:面向对象.分布式应用并且安全.多线程.跨平台等.这 ...

  5. tableView中cell的复用机制

    TableView的重用机制,为了做到显示和数据分离,IOS tableView的实现并且不是为每个数据项创建一个tableCell.而是只创建屏幕可显示最大个数的cell,然后重复使用这些cell, ...

  6. SQL Server 2008数据库连接错误

    以Windows身份连接SQL Server 2008数据库时,连接不上,出现如下报错画面: 解决办法:打开services窗口,找到名字类似于SQL Server (xxx)的服务,启动服务. 注: ...

  7. How to reconfigure installed dpkg package (tzdata, locales)

    1 List the installed dpkg package $ sudo dpkg --list 2 Reconfigure the package $ sudo dpkg-reconfigu ...

  8. Https如何确保传输安全的

    1.对称加密算法 加密和解密算法是公开的,那个密钥是保密的, 只有双方才知道, 这样生成的加密消息(密文) 别人就无法得知了. 2.非对称加密算法 RSA算法非常有意思,是有一对儿钥匙, 一个是保密的 ...

  9. c++11 多线程依次打印ABC

    并发 练习代码 #include <thread> #include <vector> #include <mutex> #include <iostream ...

  10. IOS 小新兵

    2017-07-02 lipo -info BaiduOAuthSDK.a  查看a文件支持的架构 第一个坎: 报错:  未找到模块baiduLogin对应的类BaiduLoginModule.若是自 ...