http协议、servlet中文乱码问题、servlet访问数据库

博客介绍了http协议,包括其定义、数据包结构和两种请求方式。重点阐述了Servlet输出中文和表单含中文参数值时的乱码处理方法,还说明了不同Tomcat版本对get请求中文解码的情况。最后介绍了Servlet使用jdbc访问数据库的步骤,如建库建表、导包等。

1.http协议(了解)

(1)什么是http协议?

是一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据包的结构。

在这里插入图片描述

(2)数据包的结构

1)请求数据包

a.请求行 (请求方式 请求资源路径 协议和版本)
b.若干消息头
消息头是一些键值对,使用": "隔开,用来传递一些特定的信息。比如,浏览器可以通过发送"user-agent"消息头,告诉服务器,浏览器的类型和版本。
c.消息正文(实体内容)
get请求消息正文为空,只有当请求方式为post时,消息正文才会有数据(请求参数)。

2)响应数据包

a.状态行 (协议和版本 状态码 状态描述)
b.若干消息头
服务器也可以发送一些消息头给浏览器。比如,服务器可以发送"content-type"消息头,告诉浏览器,服务器返回的数据类型。
c.消息正文(实体内容)
程序处理的结果,浏览器会解析出来,生成相应的页面。

(3)两种请求方式

1)get请求

a.哪一些情况下,浏览器会发送get请求?
a1.在浏览器地址栏,直接输入某个地址。
a2.点击链接。
a3.表单默认的提交方式。
b.特点
b1.请求参数添加到了请求资源路径的后面,只能提交少量的数据。
注:
请求行只能存放约2k左右的数据。
b2.请求参数会显示在浏览器地址栏,不安全。
注:
有一些网络设备,比如路由器,会记录请求地址。

2)post请求

a.哪一些情况下,浏览器会发送post请求?
a1.设置method=“post”。
b.特点
b1.请求参数添加到了消息正文里面,所以可以提交大量的数据。
b2.请求参数不会显示在浏览器地址栏,相对安全。
注:
不管哪种请求方式,都不会对数据加密,所以,对于敏感数据,要加密处理(使用https协议)。

2.Servlet输出中文,如何处理乱码问题?

a.为什么会有乱码?

因为out.println方法,默认情况下,会使用iso-8859-1来编码。

b.如何解决?

response.setContentType(“text/html;charset=utf-8”);

3.表单包含有中文参数值,如何处理?

(1)为什么会有乱码?

提交表单时,浏览器会按照打开该表单所在的页面时的字符集对中文进行编码,比如用utf-8来编码;而服务器端默认会使用iso-8859-1来解码,所以会产生乱码。

(2)如何解决?

1)情形一: post请求

	/*
	 * 这行代码要添加到所有的getParameter方法的
	 * 最前面。
	 * 作用是告诉服务器,针对post请求,使用
	 * 哪种字符集来进行解码。
	 */
	request.setCharacterEncoding("utf-8");

2)情形二: get请求

如果是tomcat8以下的版本,需要修改server.xml,

作用是,告诉服务器,针对get请求,使用utf-8来解码。
如果是tomcat8及以上的版本,对于get请求,默认就是使用utf-8来解码的。

4. Servlet访问数据库(使用jdbc)

step1.建库、建表

create table t_user(
	id int primary key auto_increment,
	username varchar(50) unique,
	password varchar(30),
	email varchar(30)
);

step2.导包。

<dependencies>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.6</version>
	</dependency>
	<dependency>
		<groupId>commons-dbcp</groupId>
		<artifactId>commons-dbcp</artifactId>
		<version>1.4</version>
	</dependency> 
</dependencies>

step3.添加DBUtils类和jdbc.properties文件。

step4.在Servlet类里面,使用jdbc api访问数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值