您的位置:首页 > 编程语言 > Java开发

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 ee