24@Servlet_day02
1、http协议的相关知识(了解)
1)http协议是什么?
超文本传输协议,定义了浏览器(或者是其它客户端程序)与web服务器之间通讯的过程与数据的格式。
2)通讯的过程
a, 浏览器建立与web服务器之间的连接
b,浏览器将请求数据打包,发送。
c,服务器处理请求数据,将处理结果打包,发送。
d,服务器关闭连接。
如果浏览器再次要向服务器发请求,需要重新建立连接。
3)数据格式
a,请求数据包
请求行
请求方式(get/post) 请求资源路径 协议的类型及版本
若干消息头
什么是消息头?
消息头由w3c定义(也可以自己定义),浏览器与服务器都会遵守的一些通讯的约定,比如,服务器可以通过设置content-type消息头,告诉浏览器,服务器返回的数据类型及编码。反过来,浏览器也可以通过设置user-agent消息头,告诉服务器浏览器的类型及版本。
当浏览器与服务器之间进行通讯时,浏览器和服务器会自动生成一些消息头,我们也可以通过编程的方式生成一些消息头。
实体内容
只有当请求方式是post方式时,请求参数及参数值才会放在这儿,如果请求方式是get方式,则请求参数及参数值会放在请求资源路径后面。
b,响应数据包
状态行
协议的类型与版本 状态码 状态码的描述
常见的状态码:
404: 请求资源不存在
500: 系统出错
200: 正常
若干消息头
服务器也可以发送一些消息头给浏览器。
实体内容
服务器返回给浏览器的处理结果。
2、get/post请求方式
1)哪一些是get请求方式
a, 直接在浏览器地址栏输入某个地址。
b,点击链接地址
c, 表单默认的提交方式
2)get请求方式的特点
a,请求参数会添加到请求资源路径后面。请求资源路径后面添加的参数数据量大小是有限制的,
b,会将请求参数直接显示在浏览器地址栏,不安全。
c, get方式只适合于向服务器请求资源或者是向服务器提交少量的数据。
3)哪一些是post请求方式?
a,设置表单的method="post"
4)post方式的特点
a, post方式会将请求参数及值添加到实体内容里面,可以放置大量的数据
b,因为不会将参数直接显示在浏览器地址栏,所以相对安全。
3、表单的处理
1) 如何获得表单中的参数值
String request.getParameter(String paraName);
注意:
a, 如果paraName对应的值不存在,返回null。
b,如果表单中的参数值没有输入,会返回""。
//如果有多个paraName都相同时使用,比如
// ?city=bj&city=wh&city=cs
String[] request.getParameterValues(String paraName);
2)如果表单参数值为中文,如何处理
乱码问题产生的原因:
浏览器会对表单中的中文参数进行编码,具体采用何种编码要看打开该表单所在的页面时的编码是什么。比如,使用utf-8打开该页面,则会使用utf-8来对中文参数进行编码。服务器端默认情况下,会使用iso8859-1来解码。
解决方式:
step1 使用<meta http-equiv="content-type" content="text/html;charset=支持中文的编码格式">
这样做的目的,是保证表单中的中文参数会按照确定的编码格式来编码的。另外,表单要使用post方式提交。
step2 使用 request.setCharacterEncoding(String code);
让服务器使用code指定的编码格式去解码。
4、使用mysql
1)mysql的简单使用
a,登录(以root用户的身份来登录)
mysql -uroot;
b,查看数据库
show databases;
c,创建一个数据库(并且设置默认的编码格式是utf8)
create database jd1203db character set utf8;
d,建表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 create table t_emp( 2 id int primary key auto_increment, 3 name varchar(50), 4 age int, 5 salary double 6 );
auto_increment: 自增长列,指的是在插入数据时,由数据库自动为主健赋值。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 create table t_user( 2 id int primary key auto_increment, 3 username varchar(50) unique, 4 pwd varchar(20), 5 gender char(1), 6 birthday date, 7 registTime datetime, 8 info text, 9 photo blob 10 );
unique:唯一性约束
text: 相当于clob类型,用于保存比较大的文本。
blob: 保存比较大的二进制数据,比如图像。
e,使用某个数据库:
use jd1203db;
f, 查看当前数据库有哪些表?
show tables;
g,查看某张表的结构
desc tableName;
h, 对表中的数据的操作
insert into t_emp(name,age,salary) values('zs',22,10000);
select * from t_emp;
2)在servlet类当中如何使用jdbc访问数据库
step1 将数据库的jdbc驱动程序 拷贝到 WEB-INF\lib下。
step2 使用jdbc代码访问数据库,需要注意异常的处理。
如果是系统异常:
a, 将异常抛出
throw new ServletException(e);
b, 配置一个错误处理页面
首先写一个html文件(err.html),该文件只需要提示用户稍后重试。
在web.xml文件中,使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <error-page> 2 <error-code>500</error-code> 3 <location>/err.html</location> 4 </error-page>
练习:
写一个ListEmpServlet,以表格的方式显示所有员工的信息。
http://localhost:8080/web02/list