HTTP

一:HTTP也叫超文本传输协议,HTTP是一个属于应用层的面向对象的协议。当然在开发环境张,也有开发人员称之为短链接。
目前最新WWW使用的HTTP协议。http1.1版本。
HTTP协议主要特点:
1、支持客户端/服务器模式
2、简单快速。客户端向服务器请求服务时,只需要传送方法和路径。
请求方法包括:
    1、get(常用)
    2、post(常用)
    3、head
    4、put
    5、delete
3、灵活。HTTP允许传输任意类型的数据对象。当时要在Content-Type加以标记
4、无连接。无连接的意思是限制每次连接请求,也就是只处理一次请求。服务器处理完客户端的请求,并受到客户端的应答后,即马上断开连接。因为采取这种方式,可以很大程度上节约时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力的。缺少意味着如果你想知道服务器最新消息,那么需要重新请求一次。

HTTP的URL:
http是一个基于请求与相应模式的,无状态的,应用层的协议。
http URL包含了用于查找某个资源的足够的信息

HTTP的协议,请求:
1、请求信息以一个方法符号开头,以空格分开,后面跟踪请求的URL和协议的版本。格式如下:MEthod Request-URL HTTP-Version CRLF
GET http://www.baidu.com http1.1

请求方法:
1、Get 请求Get方法
2、Post 请求Post方法

Get和Post基本区别:
1、Get URL显示在浏览器的地址栏里,Post没有显示
2、Get URL有长度限制,Post没有
3、Get相对不安全,Post相对安全

HTTP的协议,相应:
1、在接收和解析请求消息后,服务器返回一个HTTP响应消息。

浏览器->网关->DNS->服务器(WebServer)->业务->数据库

HTTP响应也是三个部分组成:
1、状态行
2、消息报头
3、响应正文

状态行格式:状态行一般由3个数字组成,第一个数字定义响应类别;
1、1xx 指示信息,表示请求已接受,继续处理
2、2xx 成功,表示请求已经被成功接收,理解并接受了。
3、3xx 重定向 表示请求已要求必须进行下一步跳转操作
4、4xx 客户端错误 请求有语法错误或者请求无法实现
5、5xx 服务器错误 请求发生后服务端未能实现合理的请求

200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误
401 Unauthorized 客户端未经授权
403 Forbidden 服务器收到请求,但是拒绝访问
404 Not Found 请求资源不存在
500 Server Error 服务端发生不可预知的错误
503 Server Unavailable 服务器当前不能处理客户端请求,可能一段时间恢复正常

HTTP协议 报头:
HTTP消息是由客户端到服务端的请求和服务器端的响应组成。
请求消息和响应消息都是由开始行、消息报头、空行、消息正文组成。

Cache-Control用于指定缓存指令。缓存指定是单向的,且独立的。(一个消息的缓存指定不会影响另一个消息处理的缓存机制)

响应缓存指令包括:public、private\no-cache....

Connection 普通报头域允许发送指定连接选项。如:这个指定连接是连续或者是close的选项。

Accpet 请求报头域用于指定客户端接收哪些类型的消息。

User-Agent 一般包括浏览器信息,操作信息或版本

Content-Type 实体报头域用于指明发送给接收者的实体类型
例如:Content-Type:text/html;charset=gb2312
Last-Mosified 实体报头域用于指示资源的最后的修改日期。



二:JSP 其实就是Servlet,只不过Servlet如果大量写入表现层语言会
很难维护,因此会引入JSP。JSP其实两个部分:
1、HTML
2、JAVA

JSP原理:Web服务器接收.jsp文件请求时,会把JSP文件语法交给
JSP引擎处理。Tomcat中的JSP引擎其实就是一个Servlet小程序。
每一个JSP页面在第一次访问的时候,JSP引擎会把JSP页面翻译成一
段小Servlet的源程序。接着再把这个Servlet源程序编程成相对应
的class程序。

JSP中,一般以下语法放入Java代码:
1、<%  %> 放入Java代码
2、<%! %> 变量与函数的声明
3、<%= %> 表达式写法
4、<%-- --%> JSP注释

JSP 编译指令:
JSP的编译指令是通知JSP引擎的消息的。它本身不直接生成输出。编译指令都会有
默认值。并且不需要再开发过程中,每个都设置。

JSP 三大指令:
1、page: 该指令是针对当前页面的指令
2、include: 用于指定包含另一个页面
3、taglib: 用于定义和访问自定义标签

JSP编译指令语法:
<%@ 属性=属性值  %>

Page指令:
page指令通常位于JSP的头部,注意一个JSP页面可以包含一个或者多个page指令
<%@ page
   [language="Java"]
   [extend="package.class"]
   [import="package.class|package.*|..."]
   [session="true|false"]
   [buffer="none|8KB|..."]
   [autoFlush="true|false"]
   [isThreadSafe="true|false"]
   [info="text"]
   [contentType="mineType;charset="UTF-8"]
   [pageEncoding="ISO-8859-1"]
   [isErrorPage="true|false"]
   [errorPage="error.jsp"]
%>

language: 声明当前JSP页面使用的脚本语言种类,通常是java。默认值也是java。
extends: 指定JSP页面编译所产生Java类所去继承的类。
import: 通常用来导入包。有几个包是默认自动导入的:
java.lang.*,java.servlet.*,java.jsp.*  ...;
session: 设置当前页面是否需要HTTP Session。
buffer: 设置当前的缓存大小。默认值为8KB。可以设置none。
autoFlush: 当前输入缓冲区即将溢出的时候,是否需要抛出一个溢出异常。
info: 设置该JSP页面的信息。
errorPage: 指定错误处理的页面。
isErrorPage: 设置本JSP页面是否需要错误页面。通常情况下是无序指定。
contentType: 用于生成网页的文件格式以及编码。
pageEncoding: 指定生成网页的编码字符集。

include 指令:

使用incluce,可以将一个外部文件包含到JSP文件中,同时解析必要Java语法。注意编译指令
最好引入静态的JSP文件。什么静态引入?一旦使用编译include的静态引入本把引入的JSP融合
成一个页面。因此被包含页面设置不需要是完整的页面。
<%@include file="relativeURLFile" %>

注意:需要指出的是,静态包含还会包含页面中的编译指令,如果
两个页面的编译指令相冲突,程序报错。

JSP 动作指令:
动作指令与编译指令不同,编译指令是通知Servlet引擎去处理消息。
而动作指令只是运行时的动作。编译指令在将JSP编译成Servlet时起作用。
而动作指令通常可替换成JSP脚本。(注意:它只是JSP脚本的标准化写法)

JSP 7个动作指令如下:
1、jsp:forward 执行页面专项,将请求处理转发到下一个页面。
2、jsp:param 用于传递参数,注意:必须和其他支持参数的标签一起使用。
3、jsp:include 用于动态引入一个JSP页面。
4、jsp:plugin 用于下载JavaBean 或者  Applet 到客户端执行。
5、jsp:useBean 创建一个JavaBean的实例。
6、jsp:setProperty: 设置JavaBean 实例的属性值。
7、jsp:getProperty: 输出JavaBean 实例的属性值。

forward指令:
forward指令用于将页面响应转发到另一个页面。注意:forward 既可以转发到静态HTML页面。
页面转发到JSP页面,或者转发给容器中的Servlet。

forward 格式如下:
JSP 1.0之前:
<jsp:forward page="{relativeURL|<%expression%>}"/>
JSP 1.1以上规范语法:
<jsp:forward page="{relativeURL|<%expression>}">
<jsp:param.../>
</jsp:forward>

注意:第二种也就是1.1以上的规范在转发时增加额外的请求参数。
所以请求参数的值,可以通过HttpServletRequest类中的getParameter()方法获取。

注意:1、执行forward请求时,用户请求的地址并没有发生改变。但是页面内容全部改成目标
页面内容。
    2、执行forward指令请求的时候,客户端的请求参数不会丢失。

总结:从表面上看,<jsp:forward .../> 指令给人感觉,它是将用户请求“转发”给另一个页面
。但是实际上,<jsp:forward .../> 并且没有重新向另一个页面发送请求。它是完全采用了
新页面来对用户生成响应。请求依然就只是一次请求。

JSP练习01:请完成一个表单比如信息录入过程中所应该有的控件,例如:
一个问卷调查,从前端的页面 到  另一个页面的传值接收并显示。
如:下拉菜单,checkbox,radio,textarea

include指令:
include指令一个动态include指令,也用于包含某个页面。它不会导入被include页面编译指令。
仅仅将被导入页面的body内容插入本页面。

include格式如下:
1、<jsp:include page="relativeURL|<%expression%>" flush="true"/>
2、<jsp:include page="relativeURL|<%expression%>" flush="true">
<jsp:param name="名称" value="值"/>
   </jsp:include>
  
flush属性用于指定输出缓存是否转移到被导入的文件。如果指定为true,则包含在被
导入的文件中,如果指定为false,那么就不包含。

注意,对于第二种写法,需要额外添加参数。

静态导入和动态导入的3点区别:
1、静态导入是将被导入的页面代码的完全融入,两个页面内容完全的在一起形成一个整体,编译。
而动态的其实在Servlet源码只是一句引入的话仅此而已。
2、静态导入时被导入的页面的编译命令会起作用,动态导入则不会有该种问题。
3、动态还可以增加额外的参数。

jsp:forward 和  jsp:include
实际上,jsp:forward和jsp:include动作指令十分相似,这是它们的语法
都是采用特殊的方法去引入目标的页面。通过查看JSP页面所生成Servlet代码可以发现区别。
区别在于:执行forward时,被forward的页面将完全代替原有的页面。
而执行include时,被include的页面只是插入原有的页面。

jsp:useBean指令,jsp:setProperty指令,jsp:getProperty指令:
这三个指令都是与JavaBean相关的指令。其中useBean指令用于JSP页面
初始化Java实例。setProperty指令用于JavaBean实例设置相关属性。
getProperty指令用于JavaBean实例获取相关属性。

使用前提:如果多个JSP页面中需要重复使用某段代码。则可以把
这段代码定义成Java类的方法。然后让多个JSP页面调用该方法。

useBean的语法格式如下:
<jsp:useBean id="name" class="classname" scope="page|request|
session|application"/>
page: 该JavaBean实例仅在该页面有效。
request: 该JavaBean实例仅在请求的时候有效。
session: 该JavaBean实例仅在本次session会话内有效。
application: 该JavaBean实例会一直有效(本应用)。

setProperty指令语法如下:
<jsp:setProperty name="BeanName" property="属性名" value="值"、>
其中name属性需要设置JavaBean实例名。

getProperty指令语法如下:
<jsp:getProperty name="BeanName"  property="属性名" value="值"/>

JSP 隐式对象:
所谓对象,就是在JSP中内置好的对象,就叫隐式对象。
JSP 九大内置对象:
1、application  -- javax.servlet.ServletContext。
该实例代表JSP所属的Web应用本身。
2、config  -- javax.servlet.ServletConfig
该实例代表JSP所属的配置信息。
3、exception -- java.lang.Throwable
该实例代表JSP所属其他页面的异常和错误。
4、page --  代表页面本身。也就是Servlet的this
5、out -- javax.servlet.jsp.JspWriter
该实例代表JSP的输出流
6、pageContext -- javax.servlet.jsp.PageContext
该实例代表页面的上下文
7、request -- javax.servlet.HttpServletRequest
该实例封装一个请求
8、response -- javax.servlet.HttpServletResponse
该实例代表客户端的响应
9、session -- javax.servlet.HttpSession
该实例代表一次会话

application 通过setAttribute方法设置application的某个属性,
该属性值可以作用于整个Web。因此在Web内可以使用getAttribute获取该属性。

需要指出的是:虽然使用application(即Servlet实例)可以方便多个Servlet,多个JSP
共享数据,但不要仅仅为了JSP、Servlet共享数据就将数据放入Application中!由于Application
代表了整个的Web因此,因为只有关于整个Web项目的配置信息,数据才会放入Application

application 还有一个重要的用处:可用于获取Web应用的配置参数。web.xml

注意:通过Web获取配置参数的方式,可以将一些配置信息放在web.xml文件中配置。
避免使用硬编码方式写在代码中,该种方式可以更好的程序的移植性。

config 对象:
config对象代表当前JSP页面的配置信息。但JSP页面通常无须配置。因此也就不存在配置信息。
所以JSP页面比较少用该对象。但是Servlet中则用处相对较大,因为Servelt需要在web.xml
文件中进行配置。

exception 对象:
exception对象是Throwable的实例,代表JSP脚本中产生的错误和异常。是JSP页面异常机制的
一部分。
在JSP脚本中无须处理异常。事实上,JSP脚本包含的所有的可能出现的异常都交给错误页面处理。

注意:exception 对象仅在异常处理页面中有效,通过异常处理结构可以看出。
注意:由于只有JSP脚本,输出表达式才会对应于_jspService()方法里的代码。所以这两个
部分的代码无须关心异常。但是在JSP的声明部分依然需要处理异常。
JSP异常处理机制对JSP的声明不起作用。

注意:在异常处理的页面中,应该在page指令中isErrorPage添加上并且设置为true,
只有该属性设置为true时,才可以访问exception内置对象。

你可能感兴趣的:(http,jsp)