servlet相关介绍及乱码问题的解决方案

来源:互联网 发布:gitlab for mac客户端 编辑:程序博客网 时间:2024/05/16 14:53

1、什么是servlet?

servlet(Java服务小程序)是用java编写的服务端程序,是由服务器端调用和执行的,按照servlet自身规范编写的java类。

2、servlet的生命周期:

1.装载:在tomcat启动web应用程序时进行装载,读取xml文件,但是这里只会读取不会做实例化操作

2.创建:在第一次访问servlet对应的url的时候,servlet被实例化

3.初始化:创建对象后,马上进行初始化 e,可以通过servletConfig对象读取相应的配置信息。

4.执行代码操作:收到请求之后,执行service()操作,(这里要说明一下,service是servlet的一个总入口,所有请求(HttpRequest)都会首先被service()方法获取,service()方法会根据请求的类型部分post,get,将请求派发到不同的方法)

5.销毁:destory() ,web应用程序重启时或者关闭的时候被销毁。

2、get/post请求方式的区别:

1.用途不同:get方法用于查询服务器数据,而post方法用于更改服务器数据

2.原理不同:get方法把数据当成url参数发送到服务器,它只能传输文本,而post方法将数据存放在方法体中,发送到服务器,post方法可以传递二进制数据。

3.接收方式不同:get请求对应servlet中的DoGet方法,而post请求对应servlet中的DoPost方法

4.安全性:post方式将数据保存在请求体中,get将数据保存在url参数中。相对而言,post方式安全些。

3.乱码问题的解决方案:

(1) 在客户端提交数据后,利用String 对象转换编码

例如:uname = new String( uname.getBytes("ISO-8859-1") , "UTF-8");
需要注意的是:

( 在JSP或者HTML中,必须存在<meta http-equiv="content-type" content="text/html; charset=UTF-8">)
从客户端向服务器端提交代码的时候执行过程如下:


1. 客户端编码的UTF-8 ,但在Http传输过程过程中会被转为ISO-8859-1进行传输
2. 在request接收数据后,利用new String将ISO-8859-1再转回UTF-8
缺点:每次只能对一个参数进行转换,遇到多参数的情况则十分麻烦

(2) 对POST提交的请示进行批量转换
对于post请求则可以在方法第一句增加setCharacterEncoding(),进行批量转换request.setCharacterEncoding("UTF-8"); (注意:这句话只对post方法有效,对于get无效)

(3) 对于get的处理方案是,修改tomcat的server.xml文件增加URIEncoding="utf-8"
在8080端口配置的地方增加URIEncoding来完成Get请求的转换
   <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 

URIEncoding="utf-8" />
   
总结: 对于javaweb来说解决中文乱码的注意有以下几点:
1. 客户端与服务器端转换的时候要采用相同的编码
2. 对于较少字段的程序可以考虑使用方案1
3. 对于字段较多或者大型项目来说,可以将(2)与(3)方案结合使用。

0 0