1,http(超文本传输协议)[hypertext transfer protocol]
由w3c制订的一种网络应用层协议,它规定了浏览器与web服务器之间如何通信以及通信所使用的数据格式。
(1)如何通信
step1,建立连接
step2,浏览器将请求数据打包,然后发送给web服务器
step3,web服务器将响应数据打包,然后发送给浏览器
step4,web服务器关闭连接
特点:一次请求,一次连接。
优点:web服务器可以利用有限的连接资源为尽可能多的客户端服务。
缺点:无状态。
(2)数据格式
1)请求数据包
a,请求行:请求方式 请求资源路径 协议类型和版本
b,若干消息头:一般是由w3c定义的一些健值对,浏览器与web服务器之间可以通过发送这些消息头来传递一些特定的信息。比如,浏览器可以发送"user-agent"消息头,告诉web服务器浏览器的类型和版本。
c,实体内容:只有当发送post请求时,才会有数据(请求参数)。
2)响应数据包
a,状态行: 协议类型和版本 状态码 状态描述
注: 状态码是一个三位数字,由w3c定义,表示web服务器处理请求的一种状态。
200: 正确
500: 系统错误
404: 依据请求地址找不到对应的资源
b,若干消息头:服务器也可以发送一些消息头给浏览器,比如,"content-type"消息头,告诉浏览器服务器返回的数据类型。
c,实体内容程序处理的结果
2,两种请求方式
(1)get方式
1)哪一些情况下,会发送get请求
a,直接输入某个地址
b,点击链接
c,表单默认提交方式
2)get请求的特点
a,会将请求参数添加到请求资源路径的后面,只能提交少量的数据(因为请求行最多只能存放大约2k左右的数据)
b,会将请求参数显示在浏览器地址栏,不安全,比如,路由器会记录请求地址。
(2)post方式
1)哪一些情况下,会发送post请求设置表单的method="post"。
2)post请求的特点
a,会将请求参数添加到实体内容里面,可以提交大量的数据。
b,不会将请求参数显示在浏览器地址栏,相对安全(要注意,不管是什么请求,都不会对请求数据加密,一般使用https协议)。
3,servlet如何输出中文?
(1)为什么会有乱码
out.println输出中文时,默认会使用"iso-8859-1"去编码。
(2)如何解决
response.setContentType("text/html;charset=utf-8");
4,常见的错误及处理方式
(1)404
1)错误原因:
a,应用没有部署。
b,请求地址写错。按照http://ip:port/appname/url-pattern
c,<servlet-name>不一致。
(2)500
1)错误原因
a,程序运行时出错。
b,<servlet-class>写错。
(3)405
错误原因:服务器找不到处理方法。
5,表单包含了中文参数值,如何处理?
(1)为什么会有乱码?
当表单提交时,浏览器会检查请求参数值,如果是中文,会按照打开该表单所在的页面时的字符集来编码(比如,按照"utf-8"来编码)。服务器默认情况下,会使用"iso-8859-1"来解码。
(2)如何解决?
step1,保证浏览器使用指定的字符集来打开页面。
<meta http-equiv="content-type" content="text/html;charset=utf-8">
step2,服务器端使用对应的字符集去解码。
方式一:
request.setCharacterEncoding("utf-8");
注意:只针对post请求有效。
方式二:
new String(str.getBytes("iso-8859-1"),"utf-8");
6,如何获得请求参数值?
(1)String request.getParameter(String paramName);
注意:
a,paramName必须与实际传递的参数名一致,否则会获得null。
b,有可能获得空字符串。
(2)String[] request.getParameterValues(String paramName);
对于多选框和单选框,如果不选择任何选项,会获得null值。
7,servlet如何使用jdbc来访问数据库
step1,将jdbc驱动拷贝到WEB-INF\lib下。
注:
服务器一般都提供了自己的类加载器(比如tomcat就提供了自己的类加载器),这些类加载器会从WEB-INF\lib下查找字节码文件。
step2,在servlet类里面,使用jdbc 提供的方法来访问数据库,要注意异常的处理。
8,mysql数据库的简单使用
(1)登录mysql
mysql -uroot; root用户登录mysql数据库管理系统
(2)查看当前有哪些数据库
show databases;
(3)创建一个新的数据库(同时设置字符集为utf-8)
create database jsd1407
default character set utf8;
(4)使用指定的数据库
use jsd1407;
(5)查看当前数据库有哪些表
show tables;
(6)建表
create table emp(
id int primary key auto_increment,
name varchar(50),
salary double,
age int
);
insert into emp(name,salary,age) values('Sally',20000,32);
auto_increment: 自增长列,当插入记录时,数据库自动为该列赋一个自动增长的值。