servlet 解决乱码问题

 更新时间:2015年04月08日 22:48:39   投稿:mdxy-dxy  
这篇文章主要介绍了servlet 解决乱码问题 ,需要的朋友可以参考下

  对于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后,后面的语句就会报错,这样就阻止了同一个页面进行了多次跳转。不喜欢的网友误喷,谢谢合作,感谢帮我挑错的网友,因为这样我才会不断进步,真心感谢你们

相关文章

  • MyEclipse设置Console输出到文件的实现方法

    MyEclipse设置Console输出到文件的实现方法

    下面小编就为大家带来一篇MyEclipse设置Console输出到文件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • JPA中@ElementCollection使用示例详解

    JPA中@ElementCollection使用示例详解

    在JPA中,@ElementCollection注解主要用于映射集合属性,例如List、Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射,这篇文章主要介绍了JPA中@ElementCollection使用,需要的朋友可以参考下
    2023-11-11
  • java中的interface接口实例详解

    java中的interface接口实例详解

    这篇文章主要介绍了 java中的interface接口实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Hystrix Dashboard断路监控仪表盘的实现详细介绍

    Hystrix Dashboard断路监控仪表盘的实现详细介绍

    这篇文章主要介绍了Hystrix Dashboard断路监控仪表盘的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • Java使用设计模式中的工厂方法模式实例解析

    Java使用设计模式中的工厂方法模式实例解析

    当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统.工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,下面我们会具体介绍Java使用设计模式中的工厂方法模式实例解析.
    2016-05-05
  • java开发之内部类的用法

    java开发之内部类的用法

    本篇文章介绍了,java开发之内部类的用法。需要的朋友参考下
    2013-05-05
  • java实现即时通信的完整步骤分享

    java实现即时通信的完整步骤分享

    这篇文章主要给大家介绍了关于java实现即时通信的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Spring session redis 修改默认的序列化方法(案例)

    Spring session redis 修改默认的序列化方法(案例)

    这篇文章主要介绍了Spring session redis 修改默认的序列化方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • SpringBoot Druid配置过程图解

    SpringBoot Druid配置过程图解

    这篇文章主要介绍了SpringBoot Druid配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 通过Java查看程序资源占用情况

    通过Java查看程序资源占用情况

    这篇文章主要介绍了通过Java查看程序资源占用情况,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论