javaee之Servlet的理解
2016-07-17 22:19
423 查看
关于HTTP协议内容
IE:使用httpwatch插件;Chrome:使用审查元素即可;FireFox:使用firebug插件;关于Http的格式
请求:GET/day08_01_web/hello.html HTTP/1.1
Accept:text/html, application/xhtml+xml, */*
Accept-Language: zh-HK,en-US;q=0.8,en-GB;q=0.5,zh-CN;q=0.3
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1;WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: localhost:8080
If-Modified-Since: Sun, 17 Jul 2016 01:32:21 GMT
If-None-Match: W/"471-1468719141490"
DNT: 1
Connection: Keep-Alive
响应:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"471-1468719141490"
Last-Modified: Sun, 17 Jul 2016 01:32:21 GMT
Content-Type: text/html
Content-Length: 471
Date: Sun, 17 Jul 2016 01:48:48 GMT
请求的格式
请求行(一行)
请求头信息(多行)
空行(一行)
请求正文(多行)
1、 请求行
1GET 2/day08_01_web/hello.html 3HTTP/1.1
1请求的方式:GET、POST、PUT…..
GET方式:
1) 提交的数据会暴露在地址栏
2) 提交的数据限制在1kb之内
POST方式:
1) 提交的数据不会暴露,能显示在请求正文内
2) 提交的数据不会限制
2请求的路径
URI:统一资源标记符(可以标记任何资源,本地,网络 http:// file:///)
URL: 统一资源定位符(只能标记网络资源)
3http协议版本
HTTP/1.0:浏览器每次只能和服务器发送一次请求,然后就断开连接(效率低)
HTTP/1.1:浏览器每次可以发送多次请求而不断开连接(效率高)
2、 请求头信息
Accept: text/html,image/*
Accept-Charset: ISO-8859-1
Accept-Encoding: gzip,compress
Accept-Language: en-us,zh-cn
Host: www.it315.org:80
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT
Referer: http://www.it315.org/index.jsp
Content-Type:application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie: name=eric
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
Accept:用于告诉服务器,客户支持的数据类型
Text/html:Mime格式
网络传输的文件格式:
操作系统文件格式 MIME格式(大类型/小类型)
Eg:
Text/html text/plain text/css text/javascript image/jpg
Accept-Charset:用于告诉服务器,客户采用的编码
Accept-Encoding:用于告诉服务器,客户支持的数据压缩格式 gzip压缩
Host:客户机通过这个头告诉服务器,想访问的主机名
If-Modeified-Since:用于告诉服务器,浏览器资源缓存的时间
Referer:用于告诉服务器,它是从哪个资源来访问服务器的,主要用于防盗链
Content-Type:告诉服务器,请求正文的MIME类型
默认类型:application/x-www-form-urlencoded(表单enctype属性的默认值)
其他类型:multipart/form-data(文件上传时用的)
User-Agent:用于告诉服务器,客户机使用的软件环境。浏览器的类型
Cookie:客户带过来的cookie信息,用于会话管理
Connection:表示是否持续连接。如果想本次请求后关闭连接,使用close,如果想持续连接,一般显示是Keep-Alive
Date:发送的请求时间
3、 请求的正文
post提交的内容就是请求正文
响应的格式
总体的格式:响应行(一行)
响应头信息(多行)
空行(一行)
响应正文(一行或者多行)
1、 响应行
1HTTP/1.1 2 200 OK
1. http的版本
2. 状态码
服务器处理请求的状态
状态码 | 含义 |
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
200~299 | 表示成功接收请求并已完成整个处理过程,常用200 |
300~399 | 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304 |
400~499 | 客户端的请求有错误,常用404 |
500~599 | 服务器端出现错误,常用 500 |
通过开发最常见的状态码:
200 :成功的状态码
30x :通过转发的状态码
404 :服务器没有找到路径,即客户端的请求有错
500 :代码写错了,服务器端出现错误
2、 响应头信息
Location: http://www.it315.org/index.jsp
Server:apache tomcat
Content-Encoding: gzip
Content-Length: 80
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
Refresh: 1;url=http://www.it315.org
Content-Disposition: attachment; filename=aaa.zip
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
Location:这个头配合302状态码使用,用于重定向的请求
Server:服务器通过这个头。告诉浏览器服务器的类型
Content-Encoding:服务器通知浏览器发送数据压缩格式(gzip压缩)
Content-Length:告诉浏览器回送数据的长度。主要是正文的长度
Content-Type:告诉浏览器客户端,响应正文的MIME类型。默认为text/html
Last-Modified:告诉浏览器当前资源缓存的时间
Refresh:告诉浏览器多长时间刷新一次
Content-Disposition:告诉浏览器以下载方式打开数据(用于下载文件)
Expires:告诉浏览器把回送的资源缓存多长时间。-1或0表示不缓存
Cache-Control:通过这个头也是告诉浏览器不要缓存数据
Pragma:通过这个头也是告诉浏览器不要缓存数据
Servlet的概念和作用
第一种:Servlet实现一个javax.servlet.Servlet接口
作用:servlet是一个java小程序,主要用于接收浏览器发过来的请求和响应请求,基于HTTP协议
重写接口的service(ServletRequest request,ServletResponse response);
第二种:
继承javax.servlet.GenericServlet类,因为这个类实现了Servlet接口
然后编译成class文件
javac -classpathE:\apache-tomcat-7.0.22\lib\servlet-api.jar -d . HelloServlet.java
注意:
-classpathE:\apache-tomcat-7.0.22\lib\servlet-api.jar 导入jar包
-d. : 在当前目录生成包结构
把生成class文件(带包结构的)拷贝到tomcat的某个项目里面
注意:一定要放在WEB-INF/classes目录中
在项目的web.xml配置一个servlet,让其对外可以访问
Web.xml的配置中:
<?xml version="1.0"encoding="utf-8"?>
<web-appxmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<!--配置servlet,让servlet对外访问到-->
<servlet>
<!--名称,可以自定义,但建议使用servlet的类名称-->
<servlet-name>HelloServlet</servlet-name>
<!--类的路径-->
<servlet-class>gz.itcast.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--和上面的名称保持一致-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet对外访问的名称 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
然后就可以访问了,路径为:http://localhost:8080/项目名/hello(主要是在web.xml的url-pattern定义的路径)
Servlet的生命周期和过程
Servlet程序运行在web服务器中1) tomcat服务器在启动的时候,加载项目的web.xml,把web.xml读入内存
2) 当浏览器向服务器发出请求时
3) Tomcat服务器接收到资源文件路径,映射的Servlet首先会到web.xml文件中搜索匹配的<url-pattern>
4) tomcat服务器搜索到匹配的url-pattern,得到<servlet-name>跟web.xml的其他<servlet-name>匹配,找到相同名称的servlet
5) tomcat服务器搜到同名的Servlet,则取出对应的<Servlet-class>
6) tomcat服务器创建Servlet对象,调用了某些方法(其中包括service方法),然后执行
Servlet继承GenericServlet类,优点:可以减少实现Servlet接口的方法,可以按需实现,额外增加了一些功能方法,让开发者开发Servlet的时候更加方便
Servlet继承HttpServlet类,能多出许多doXXX的方法,比较方便,对于客户提交表单的时候,能够获取GET和POST的方式
对于Servlet的路径:
1) 写路径的时候不能没有/(斜杠),写了通用符.后缀名(*.do)前面不能有其他的路径
2) 多个url-pattern可以匹配的时候,精确的路径优先,后缀名的优先级最低
Servlet的生命周期
Servlet的整个周期都是由web服务器控制的
1)创建:
创建的时候,会调用init方法 (第一次访问servlet的时候创建)
2)运行:
每次请求的时候,会调用service方法 (每次请求的时候)
3)销毁:
销毁的时候,会调用destroy方法(停止服务器的时候/重新部署web应用)
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树