一 简述
Servlet是java平台的一项服务器技术,它封装了HTTP协议,并制定了Servlet API规范,可以使用Web开发人员在基于java平台
方便的编写服务器端程序。
二 HTTP 1.1协议
如果要深入了解Servlet必须要了解HTTP协议,在这里主要介绍一下,我们最常用的Reqeust和Response。
Request(HTTP请求)规范:
Request = Request-Line ; 请求行
*(( general-header ; 通用报头
| request-header ; 请求报头
| entity-header ) CRLF) ;
CRLF ;空行
[ message-body ] ; 消息体
请求行规范:
Request-Line =Method SP Request-URL SP HTTP-Version CRLF
Method:最主要用到的是GET 和 POST方法
Request-URL:URL地址
SP:空格
HTTP-Version:HTTP版本
CRLF:空行
通用头规范:
general-header = Cache-Control ; 缓存控制,如:public,private,no-cache,no-store
| Connection ; 持续性支持
| Date ;
| Pragma ;
| Trailer ;
| Transfer-Encoding ;
| Upgrade ;
| Via ;
| Warning ;
请求头规范:
请求头域允许客户端传递请求的附加信息和客户端自己的附加信息给服务器。这些头域作为请求的修饰符,
这和程序语言方法调用的参数语义是一样的。
request-header = Accept ;指定服务器返回给客户端可接受的响应媒体类型,如我们最常见的text/html类型
| Accept-Charset ;请求客户端能接受什么样的字符集响应,默认是ISO-8859-1
|Accept-Encoding ;服务器返回给客户端可以接受的内容编码,如,compress, gzip
|Accept-Language ;
|Authorization ;
|Expect ;
|From ;
|Host ;
| If-Match ;
| If-Modified-Since ;判断请求变量(variant)自从此头域里指定的时间之后没有改变,
;修改了,那么服务器应该返回一个GET请求
| If-None-Match ;
| If-Range ;
| If-Unmodified-Since ;
| Max-Forwards ;
| Proxy-Authorization ;
| Range ;
| Referer ;自动刷新的URI和时间
| TE ;
| User-Agent ;用户代理的信息,通常是兼容的浏览器版本,以及浏览器必须要的平台
实体头规范:
entity-header = Allow ; 缓存控制,public,private,no-cache,no-store,must-revalidate,
;proxy-revlidate,max-age,s(hare)-max-age
| Content-Encoding ; 压缩方式
| Content-Language ;
| Content-Length ; 按十进制或八位字节数指明了发给给接收者的实体主体的大小
| Content-Location ; 消息里的实体提供对应资源的位置(跳转地址报头)
| Content-MD5 ;
| Content-Range ;
| Content-Type ;发给接收者的实体主体的媒体类型
| Expires ;
| Last-Modified ;最后修改时间。(If-Modified-Since)
| extension-header
extension-header = message-header
Reseponse(HTTP响应)规范
response =Status-Line ;状态行
*(( general-header) ;
| response-header ;响应头
| entity-header) CRLF);
CRLF
[ message-body ] ;
状态行规范:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Status-Code:状态代码
状态码的第一位数字定义响应类型。后两位数字没有任何分类角色。第一位数字有五种值:
-1xx: 报告的 - 接收到请求,继续进程.
-2xx 成功 - 步骤成功接收,被理解,并被接受
-3xx 重发 - 为了完成请求,必须采取进一步措施.
-4xx 客户端出错 - 请求包括错的顺序或不能完成.
-5xx 服务器出错 - 服务器无法完成显然有效的请求.
eason-Phrase:原因短语
响应头规范:
response-header = Accept-Ranges
|Age
|Etag
|Location
|Proxy-Autenticate
|Retry-After
|Server
|Vary
|WWW-Authenticate
详细规则,请参考RFC2612.
三 HTML
HTML语言是Web页面最终展现的形态,若要深入了解其它高级技术必须先知其根。
表单:
<FORM>
属性:action,method,enctype,traget,onsubmit,onreset,accept,accept-charset
文本控件:
(1)文本字段:<input type="TEXT">无结束标签
name,value,size,maxlenght,onChange,onSelect,onFocus,OnBlur,OnKeyDown,OnKeyPress,OnKeyUp
(2)密码域:<input type="password">无结束标签
(3)文本区域:
<TEXTAREA NAME="..." ROW=XXX COLS=YYY>
</TEXTAREA>
按钮
(1)提交按钮
<1><input type="submit" ...>没有结束标签
name,value,onclick,onDBclick,onFocus,onBlur
<2><button type="submit"...>
html标记
</button>
(2)重置按钮
<1><input type="reset"...>没有结束标签
<2><button type="reset">
</button>
(3)JavaScript按钮
(1)<input type="button" ...>没有结束标签
(2)<button type="button"></button>
复选框和单选按钮
(1)<input type="CheckBox" name="..." ...>没有结束标签
属性:NAME,VALUE,CHECKED,ONCLIKE,ONFOUCUS,ONBLURE
只有在复选框选定的情况下,它的名/值对彩绘被表单提交的服务器上去。
(2)<input type="radio" name="..." value="...">没有标签name,value,checked,onclike,onfocus,onblur
组合框和列表框
(1)<select name="..."...> </select>
属性:name,size,multiple,onclick,onfocus,onblur,onchange
(2)<option ...>结束标签可选
selected,value
<optgroup lable="..." ...>...</optgroup>
文件上传控件
<input type="file" ...>没有结束标签
name,value,size,maxlength,accept,onchange,onselect,onfocus,onblur
<form enctype="multipart/form-data" mothod="post">
<input type="file" name="..." ...>
</form>
服务器端图像映射
<input type="image" name="myMap1"..>没有结束标签
属性:name,src,align
传递参数myMap1.x=xx myMap1.y=yy(相对于图像左上角的坐标)
ISMAP属性(<IMG>)(相对于图像左上角的像素)
<A HREF="http://localhost:8088/somepage"
<img src="..." width=ww height=hh alt="xx" border=0 ISMAP>
</A>
<IMG SRC="solarsys.gif" WIDTH=504 HEIGHT=126 BORDER=0 ALT="太阳系" USEMAP="#SystemMap">
<MAP NAME="SystemMap">
<AREA SHAPE="rect" COORDS="0,0,82,126" HREF="/workshop/graphics/sun.gif">
<AREA SHAPE="circle" COORDS="90,58,3" HREF="/workshop/graphics/merglobe.gif">
<AREA SHAPE="poly" COORDS="221,34,238,37,257,32,278,44,284,60,
281,75,288,91,267,87,253,89,237,81,229,64,228,54" HREF="/workshop/graphics/jupglobe.gif">
</MAP>
如果只是用服务器端图像映射选取一系列静态的制定URL中的某个URL,
那么客户端MAP元素是更优的选择,因为采用客户端MAP元素时,在确定
使用那个URL时不需要服务器。
如果计划将其他输入元素与图像映射一同使用,那么IMAGE输入类型更
为适合。
但是对于独立的图像映射,如果与URL相关连的区域不断变化或需要计算得出
那么使用ISMAP的图像更合理。
隐藏域
<input type="hidden" name="..." value="..."> 没有结束标签
控件组
<FIELDSET>
<LEGEND ALIGN="RIGHT">
Group Two
</LEGEND>
Field 2A: <INPUT TYPE="TEXT" NAME="field2A" VALUE="Field A"><BR>
</FIELDSET>