第七次学习任务
HTTP协议特点
- 支持客服端(浏览器)/服务器模式。
- 简单快速:客户端只向服务器发送请求方法和路径,服务器即可响应数据,因而通信速度很快。请求方法常用的有GET,POST等。
- 灵活:HTTP允许传输任意类型的数据,传输的数据类型由Content-type标识。
- 无连接:无连接指的是每次TCP连接只处理一个或多个请求,服务处理完客户的请求后,即断开连接,采用这种方式可以节约传输时间。
HTTP1.0版本是一个请求响应之后,直接断开,称为短连接
HTTP1.1版本不是响应后直接就断开了,而是等几秒钟,这几秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,就会断开连接,称之为长连接。- 无状态:HTTP协议是无状态协议。
无状态是指协议对于事务处理没有记忆能力。
HTTP协议通信流程
- 客户与服务器建立连接(三次握手)。
- 客户向服务器发送请求。
- 服务器接受请求,并根据请求返回相应的文件作为应答。
- 客户与服务器关闭连接(四次挥手)。
Servlet
在Servlet体系结构中,除了实现Servlet接口,还可以通过继承GenericServlet 或 HttpServlet类,完成编写。
Servlet接口
在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。
该接口包括以下五个方法:
public void init(ServletConfig servletConfig);
public ServletConfig getServletConfig();
public void service(ServletRequest servletRequest, ServletResponse servletResponse);
public String getServletInfo();
public void destroy();
HttpServlet抽象类
HttpServlet层继承GenericServlet的基础上进一步的扩展。
提供将要被子类化以创建适用于Web站点的HTTP Servlet的抽象类,HttpServlet的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
doGet,如果Servlet支持HTTP GET 请求
doPost,用于HTTP POST 请求
doPut,用于HTTP PUT 请求
doDelete,用于HTTP DELETE 请求
@WebServlet注解常用属性
- name:Servlet 名字(可选)
- value配置url路径,可以配置多个
- urlPatterns:配置url路径,和value作用一样,不能同时使用
- loadOnStartup:配置Servlet的创建的时机,如果是0或者正数启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高。
Servlet应用
request对象
在Servlet中用来处理客户请求需要用doGet或doPost方法的request对象。
get和post区别
get请求
- get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&连接
- get方法明文传递,数据量小,不安全
- 效率高,浏览器默认请求方式为GET请求
- 对应的Servlet的方法是doGet
post请求- post方法是把提交的数据放在HTTP包的Body中
- 密文传递数据,数据量大,安全
- 效率相对没有GET高
- 对应的Servlet的方法是doPost
request主要方法
方法名 | 说明 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
void SetCharacterEncoding(String charset) | 指定每个请求的编码 |
response主要方法
方法名称 | 作用 |
---|---|
setHeader(name,value) | 设置响应信息头 |
setContentType(String) | 设置响应文件类型,响应式的编码格式 |
setCharacterEncoding(String) | 设置服务端响应内容编码格式 |
getWriter() | 获取字符输出流 |
request实现转发跳跃
转发
转发的作用在于服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理。
页面跳转
在调用业务逻辑的Servlet中,编写以下代码:
- request。getRequestDispatcher("/目标url.pattern").forward(requst,response);
数据传递
forward表示一次请求,是在服务器内部跳转,可以共享同一次request作用域中的数据
- request作用域:拥有存储数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发)
可以将数据存入request后,在一次请求过程中的任何位置进行获取
可传递任何数据(基本数据类型,对象,数组,集合等)- 存数据:request.setAttribute(key.value);
以键值对形式存储在request作用域中。key为String类型,value为Object类型- 取数据:request.getAttribute(key);
通过String类型的key访问Object类型的value。
转发特点
- 转发是服务器行为
- 转发是浏览器只做一次访问请求
- 转发浏览器地址不变
- 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递
- 转发只能将请求转发给同一个web应用中的组件