本帖最后由 htb52110 于 2017-12-9 22:46 编辑
Servlet
1、HTTP
1.1、【HTTP协议】
1.1.1、协议:
概念:规定双方需要遵守的一个规则
1.1.2、HTTP协议:(超文本传输协议)
用来规定浏览器与服务器之间需要遵守的规则。
1.1.3、HTTP协议的作用:
规范浏览器和服务器只ian的数据传递
1.1.4、HTTP协议的特点:
基于请求和响应的模型
必须先有请求后又响应
请求和响应必须成对出现
默认端口:80
1.1.5、HTTP协议的版本:
1.0:每次响应后立即关闭了连接
1.1:现在使用。不是每次响应后挂断,,等待长时间以后没有请求会挂断.
1.2、【HTTP协议的详解】
1.2.1、请求部分
请求行
请求方式:
提交的方式有很多,常用的有GET和POST
GET和POST的区别:
GET的提交的参数会显示在地址栏上。而POST不显示
GET往往有大小限制,POST没有
GET没有请求体,POST有请求体
请求路径:
协议版本:
请求头:
都是键值对的形式存在的,一般一个key对应一个value,也有个别的是一个key对应多个value
User-Agent :代表浏览器的类型 ---文件下载:下载中文文件:IE使用URLEncodor 进行编码,而Firefox使用Base64编码.
Referer :代表网页的来源 ---防盗链
If-Modeified-Since :通常与响应中的头 Last-Modified一起使用查找本地缓存
请求体:
POST提交方式的提交的参数
1.2.2、响应部分
响应行:
协议版本
状态码:
200 :成功
302 :重定向
304 :查找本地缓存
404 :资源不存在(检查路径是否正确)
500 :服务器内部异常(java代码异常)
状态描述
响应头:键值对,一般一个key对应一个value,也有个别的是一个key对应
Last-Modified :与请求中的If-Modified-Since一起使用查找本地缓存。
Content-Dispostion:文件下载的时候使用的一个头信息
Location :重定向的跳转路径
Refresh :定时刷新/定时跳转
响应体:显示到浏览器的内容
2、Servlet
2.1、Servlet的概述
2.1.1、概念
就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议
Servlet就是SUN公司提供的一个动态网页开发技术
2.1.2、作用:
用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
2.1.3、使用Servlet:
编写一个类实现Servlet的接口
将编写的这个类配置到服务器中
2.1.4、Servlet的配置
<!-- 配置Servlet -->
<servlet>
<!-- Servlet的名称 -->
<servlet-name>test1</servlet-name>
<!-- SErvlet的全路径 -->
<servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class>
</servlet>
<!-- Servlet的映射 -->
<servlet-mapping>
<!-- Servlet的名称 -->
<servlet-name>test1</servlet-name>
<!-- Servlet的访问路径 -->
<url-pattern>/ServletDemo1</url-pattern>
</servlet-mapping>
* 访问:s
http://localhost:8080/day09/ServletDemo1
2.1.5、【使用ServletRequest接收参数】
String getParameter(String name) : 通过表单中的name获取对应的一个value
String[] getParameterValues(String name): 通过表单中的name获取对应的多个value。多选框使用
Map getParameterMap();: 获取表单中所有的name和value
注意:
post请求数据,在接收数据时有中文的情况下,在获取参数之前一定要先声明 req.setCharacterEncoding("UTF-8");可以解决中文乱码的问题。
get请求时出现中文后,使用“new String(username.getBytes("ISO-8859-1"),"UTF-8")”来处理中文乱码问题
res响应是解决中文乱码的问题:使用“res.setContentType("text/html;charset-utf-8")”
2.2、Servlet的生命周期
2.2.1、生命周期
就是一个对象从创建到销毁的过程
2.2.2、Servlet的生命周期
2.2.2.1、创建:用户在第一次访问Servlet的时候创建
2.2.2.2、销毁:当项目从服务器中移出的时候,或服务器关闭的时候
2.2.3、
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.
2.3、Servlet的相关配置
2.3.1、启动的时候创建Servlet:
在web.xml中在<servlet></servlet>标签中配置:
<load-on-startup>2</load-on-startup>----传入正整数,整数越小执行的优先级越大,最小从2开始。1已被占用!
2.3.2、url-patern的配置
完全路径配置:以 / 开始,
例如1./ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
目录匹配:以 / 开始 需要以 * 结束.
例如: /* ,/aaa/* ,/aaa/bbb/*
扩展名匹配:不能以 / 开始 以 * 开始的.
例如: *.do , *.action
注意 错误的写法: /*.do
优先级:完全路径匹配>目录匹配>扩展名匹配
2.4、开发中的路径的编写
2.4.1、 相对路径:都是需要找位置相对关系.不能以 / 开始的.
./ 当前路径 ../上一级目录
使用相对路径访问:
http://localhost:8080/day09/demo4-url/demo1.html
http://localhost:8080/day09/ServletDemo6
2.4.2、 绝对路径:不需要找位置相对关系. 以 / 开始的.
绝对路径中分为客户端路径和服务器端路径:
客户端路径一定要加工程名. /day09/ServletDemo6 (浏览器端就是客户端)
服务器端路径不需要加工程名. /ServletDemo6 (java后台代码就是服务器端)
2.5、response中设置响应头
addHeader(String name,String value); --- 针对一个key对应多个value的响应头.
addDateHeader(String name,long date);
addIntHeader(String name,int value);
setHeader(String name,String value); --- 针对一个key对应一个value的响应头.
setDateHeader(String name,long date);
setIntHeader(String name,int value);
举例:
头信息: xxx:aaa
* addHeader(“xxx”,”bbb”); -->xxx:aaa,bbb
* setHeader(“xxx”,”bbb”); -->xxx:bbb
2.6、ServletContext对象
ServletContext对象存取数据,存的数据都是有一定的范围的,这种对象称为域对象
2.6.1、用来存取数据:
向ServletContext存入数据
从ServletContext读取数据
从ServletContext移出数据
2.6.2、ServletContext作用:
a、用来获得全局的初始化参数
b、用来获得文件的MIME的类型
c、作为域对象存取数据
ServletContex对象是一个域对象
作用范围:整个web工程
创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独的ServletContex对象
销毁:服务器关闭的时候,或者项目从服务器中移出的时候
d、读取web项目下的文件
使用getResourceAsStream读取(返回流)
使用getRealPath读取文件(返回路径名)
补充:使用类的加载器进行读取文件(注意只能读取src路径下的文件)
InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流.
String getRealPath(String path); --- 返回一个路径的磁盘绝对路径.
2.7、ServlerConfig(了解即可)获得Servlet的配置信息
String getServletName(); ---获得Servlet在web.xml中配置的name的值.
String getInitParameter(String name); ---获得Servlet的初始化参数的.
Enumeration getInitParameterNames(); ---获得所有Servlet的初始化参数的名称.
2.8、补充(将读取到页面的数据封装的方式)
方式1:传统方式
//获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//封装参数
User user = new User();
user.setUsername(username);
user.setPassword(password);
方法2: 使用BeanUtils
// BeanUtils --- 基础班,反射那天学习的类. 这个类可以把一个Map集合
封装成一个JavaBean对象
// 以Map集合的方式,获取参数
Map<String, String[]> map = request.getParameterMap();
// 封装数据
User user = new User();
BeanUtils.populate(user, map); |
|