java web 第二天笔记

来源:互联网 发布:p2p网络应用ppt 编辑:程序博客网 时间:2024/05/22 04:35

3.1URL(Uniform Resource Locator)统一资源定位器

URL通常由4部分组成:协议名称、所在主机的DNS名、可选的端口号、和资源的名称

URI(Uniform Resource Identifier)统一资源标识符

在Web应用中分三类型:1、绝对URI 2、根相对URI 3、非根相对URI

URN(Uniform Resource Name)统一资源名称

URN:它唯一标识一个资源但不指定如何访问资源

ISBN:1-930110-59-6是一个URN,因为它唯一地标识某一本书,但它不是URL,因为它没有指定如何检索该书。

4.1

什么是Servlet.

Servlet一般翻译成服务器端小程序,它是使用Servlet API以及相关的类编写的Java程序。主要用来扩展Web服务器的功能。 

Servlet技术实际上是CGI技术的一种替代。 

什么是Servlet容器。

Web服务器使用一个单独的模块装载和运行Servlet。这个专门用于Servlet管理的单独模块称为Servlet容器(container),或称Web容器。

图1.17显示了各种不同的组件构成的一个示意图。 

4.3 Servlet的开发:

开发一个Servlet一般要经过一下4个步骤:编写代码、编译、部署、运行

4.4错误处理

在执行Servlet时,由于各种原因可能会出现错误,下面是最经常出现的错误:

HTTP Status 404 -/helloapp/hello.

The requested resource(/helloapp/hello) is not available.

404错误是最常见的一种错误,它表示请求的资源不可用。有多种原因可导致该错误。你可以从这几方面检查:

查看给定的路径名是否正确(包括大小写);

查看Servlet类文件是否在WEB-INF\classes目录中;

查看web.xml文件内容是否正确;

查看Tomcat服务器是否启动。

4.4servlet的优缺点。

优点:

(1)高效性。每个请求由一个轻量级的Java线程处理 

(2)方便性。提供了大量的实用工具例程 

(3)功能强大。许多使用传统CGI程序很难完成的任务都可以轻松地完成。 

(4)可移植性好 。为一个服务器编写的Servlet无需任何实质上的改动即可移植到其他服务器上。 

(5)节省投资 。有许多廉价甚至免费的Web服务器可供个人或小规模网站使用 

缺点:

缺点是它经常既包含业务逻辑又包含表示逻辑。

表示逻辑(presentation logic)是展示给用户的信息,在Servlet中产生HTML响应就是表示逻辑。

业务逻辑(business logic)是完成某种数据处理和存储任务的功能。

Sun在推出Servlet技术后不久又推出了JSP技术。有了JSP技术就可以实现业务逻辑和表示逻辑的分离:

Servlet专门处理业务逻辑

用JSP实现表示逻辑。

4.5什么是JSP。

JSP(Java Server Pages)页面是包含Java代码和HTML标签的Web页面。 

由主动的JSP标签和被动的HTML标签混合而成的Web页面。 

4.6使用servlet还是JSP。

用Servlet可以实现JSP的功能,用JSP也可以实现Servlet的功能 。

请记住下面两点:

JSP页面主要实现可视化的表示逻辑 。

Servlet主要用来实现业务处理和控制逻辑 。

MVC称为模型-视图-控制器(Model View Control,MVC)模式。在这种设计模式中,控制器使用Servlet实现,视图使用JSP实现,而模型使用JavaBeans实现。

第二章:

1.1

Sun的Servlet规范提供了一个标准的、平台独立的框架用来实现在Servlet和Servlet容器之间的通信。该框架是由一组Java接口和类组成的,它们统称为Servlet API。 

Servlet API的组成:

javax.servlet

定义了14个接口和11个类。开发独立于协议的服务器小程序的接口和类。  

javax.servlet.http

定义了8个接口和7个类。这些接口和类定义了开发采用HTTP协议通信的Servlet。

2.1

1、Servlet接口 :

Servlet API中的核心接口,每个Servlet必须直接或间接实现该接口。 

该接口定义了如下5个方法。 

public void init(ServletConfig config) 

public void service(ServletRequest request,  

                                ServletResponse response)  

                  throws ServletException, IOException

public void destroy() 

public ServletConfig getServletConfig() 

public String getServletInfo() 

2. ServleConfig接口 

ServletConfig接口为用户提供了有关Servlet配置信息。Servlet配置包括Servlet名称、Servlet环境(context)对象、Servlet初始化参数名和参数等。 

3. GenericServlet类 

GenericServlet是一个抽象类,它实现了Servlet接口和ServletConfig接口,它又是HttpServlet类的超类,它们的层次关系如图3.1所示。 

   

4. ServleRequest接口 

ServletRequest接口是独立于任何协议的请求对象。它定义了获取客户请求信息的方法。

5. ServleResponse接口 

ServletResponse接口是独立于任何协议的响应对象。它定义了向客户发送适当响应的方法。

3.1、servlet接口以及类的层次关系图

1、 HttpServlet类 

增加了一个新的service()方法,格式如下:

protected void service (HttpServletRequest,

                  HttpServletResponse)

      throws ServletException, IOException;

该方法是Servlet向客户请求提供服务的一个方法。

编写Servlet可以覆盖该方法。

2. HttpServletRequest接口    

该接口扩展了ServletRequest接口;

提供了关于HTTP请求对象的视图;

定义了从请求对象中获取如HTTP请求头、cookies信息的方法。

3. HttpServletResponse接口 

该接口扩展了ServletResponse接口;

提供了针对HTTP的发送响应的方式;

定义了为响应设置如HTTP响应头、设置cookies信息的方法;

该方法是Servlet向客户请求提供服务的一个方法。

4.1、servlet的生命周期

1、读取web.xml文件 

Servlet 容器启动时,它将查找一组部署文件,这些配置文件描述了所有的 Web 应用程序 

每个Web应用程序都有它自己的名为web.xml的部署描述文件,其中包括应用程序所使用的每个Servlet的入口。 

一个入口指定了Servlet名称和对应的Java类名称。 

2、创建实例

对每个Servlet类,Servlet容器使用

Class.forName(className).newInstance()

方法加载并创建一个实例。

3.1、初始化

一旦容器创建了servlet实例,它将在新创建的实例上调用init(ServletConfig)方法。 

ServletConfig对象包含了所有的在web应用程序的DD文件中指定的初始化参数。 

init()方法返回后,servlet就被初始化了。 

  3.2、预初始化

servlet第一次被请求时才对它初始化,这叫做延迟加载。 

优点 :大大提高servlet容器的启动时间 

缺点 :如果在初始化时servlet要完成很多任务,如从数据库中缓存静态数据,则发送第一个请求的客户的响应时间会很长。 

servlet规范定义了<load-on-startup>元素,它可以在部署描述文件中指定当servlet容器启动时装载并初始化servlet

在任何请求达到之前装载servlet的过程称为预装载或预初始化。

 4、为客户请求服务

servlet实例正常初始化后,它就准备为客户提供服务。

当容器接收到请求时,都会创建一个新的线程,然后调用

  service(ServletRequest,ServletResponse)方法。

service()方法将检查HTTP请求的类型(GETPOST等)并调用相应的doGet()doPost()等方法。

5、销毁和卸载Servlet 

Servlet容器决定不再需要Servlet实例,它将在Servlet实例上调用destroy()方法,在该方法中,Servlet应该释放资源,如它在init()方法中获得的数据库连接。 

在调用destroy()方法之前,容器会等待其他执行Servletservice()方法的线程结束。 

如果Servlet容器关闭,它也将销毁Servlet

5.1HTTP请求结构

 一个HTTP消息是客户向服务器的请求或服务器向客户的响应。 

1. HTTP消息组成:

初始行:指定请求或响应消息的目的  

头部区 :指定元信息,如关于消息内容的大小、类型、编码方式。 

空行 

可选的消息体 :请求或响应消息的主要内容。

5.2、客户向服务器发出的 HTTP 消息叫做HTTP请求(HTTP request)。

下面是一个典型的POST请求:、

请求行    POST /bookstore/selectBook HTTP/1.1

      Accept = */*

         Accept-Language = zh-cn

         Accept-Encoding = gzip, deflate

请求头   User-Agent = Mozilla/4.0 (compatible; MSIE 6.0;

           Windows NT 5.1; 

         Host = localhost:8080

         Connection = Keep-Alive

空行

数据         name=Java+EE

1.请求行

HTTP 请求行由三部分组成,且由空格分隔: 

方法名 

请求的资源的局部路径 (URI) 

使用的 HTTP 的版本   

示例:

POST  /bookstore/selectBook  HTTP 1.1

这里,POST 是方法名, /bookstore/selectBook是资源的 URIHTTP/1.1 是请求的 HTTP 的版本。

2.请求头

请求行之后的头行称为请求头

它可以指定

请求使用的浏览器信息

字符编码信息

客户能处理的页面类型等。 

示例:

User-Agent: = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 

Content-Type:application/x-www-form-urlencoded

Content-Length:11

3.常用的请求方法

HTTP 1.1版本共定义了8个方法 

GET:请求读取一个Web页面 

POST:请求向服务器发送数据 

PUT :请求存储一个Web页面 

HEAD :请求读取一个Web页面的头部 

DELETE :移除Web页面

TRACE :返回收到的请求 

OPTIONS :查询特定选项 

CONNECT :保留作将来使用

4.GET方法和POST方法

GET方法用来检索资源。它的含义是“获得(get)由该URI标识的资源”。 

资源通常是被动资源。 

GET也可以用来请求主动资源。 

传递一个名为userid参数的请求行。 

HTTP方法                              查询串          HTTP版本

GET /servlet/helloServlet ? userid=john  HTTP/1.1

 

                     URL

查询串(query string),它是由&符号分开的参数名和参数值对组成的,如下所示:

 name1=value1&name2=value2&&nameM=valueM 

POST方法 

POST请求用来向服务器发送需要处理的数据

POST含义是“将数据发送到由该URI标识的主动资源”。

数据块在消息体中发送。

常常在请求头中还要给出额外的行,如Content-TypeContent-Length。 

HTML页面使用POST提交HTML FORM数据。

表单提交所产生的HTTP POST请求 

GET方法

资源类型 :主动的或被动的 

数据类型 :文本 

数据量 :最多255个字符。尽管HTTP协议并没有限制查询串的长度,某些浏览器和web服务器可能不能处理超过255个字符的数据。 

可见性 :数据是URL的一部分,在浏览器的URL地址栏中用户可见。 

缓存 :数据可以在浏览器的URL历史中缓存。

POST方法

目标资源类型 :主动的

数据类型 :文本或二进制数据  

数据量 :没有限制 。 

可见性 :数据不是URL的一部分而是作为请求的消息体发送,因此在浏览器的URL地址栏中对用户不可见。 。 

缓存 :数据不能在浏览器的URL历史中缓存。

两种方法的使用场合:

使用GET方法 

检索HTML文件或图像文件,因为只需要发送文件名。 

使用POST方法 

发送大量数据。例如,POST方法非常适合于在线调查,因为查询字符串可能超过255个字符。  

上传文件。因为文件的大小可能超过255个字符,而且,文件也可能是二进制的文件。 

捕获用户名和口令。因为我们需要防止用户从URL中看到口令。

6、发送请求

发送请求的事件:

用户在浏览器的地址栏中输入URL并按回车键;

用户在HTML页面中点击了超链接;

用户在HTML页面中添写一个表单并提交;

其他 :用JavaScript函数在当前文档上调用reload()方法。 

     在上面的所有事件中,缺省情况下浏览器使用的是HTTP GET方法。

指定POST方法:

下面的HTML表单通过method的属性值使用HTTPPOST方法:

<form name=loginForm’ method=POST’ 

                    action='/loginServlet'>

<input type='text' name='userid'>

<input type='password' name='passwd'>

<input type='submit' name='loginButton' value='Login'>

</form> 

注意:在<form>标签中如果没有指定method属性,浏览器缺省使用GET方法 

5.2、处理HTTP请求:

HttpServlet类中,对每个HTTP方法,都有一个相应的doXXX()方法,它具有下面一般格式:

protected void doXXX(HttpServletRequest, 

      HttpServletResponse)

 throws ServletException, IOException;

所有的doXXX()方法都有两个参数:

HttpServletRequest对象

HttpServletResponse对象。

HTTP方法和doXxx()方法

HTTP方法        doXxx()方法  

GET 方法        doGet()方法

POST方法        doPost()方法

HEAD方法        doHead()方法

PUT方法        doPut()方法

DELETE方法          doDelete()方法

OPTIONS方法         doOptions()方法

TRACE方法           doTrace()方法

HttpServlet类中为每个doXxx()方法提供的是空实现。为实现业务逻辑,应该覆盖这些doXxx()方法。

5.3、分析请求

1. 检索请求参数 

请求参数是随请求一起发送到服务器的数据,它是以名/值对的形式发送的。可以使用ServletRequest接口中定义的方法检索由客户发送的参数 

public String getParameter(String name) 

返回由name指定的请求参数值,如果指定的参数不存在,则返回null值。使用该方法必须确信指定的参数只有一个值。

public String[] getParameterValues(String name) 

返回指定的参数name所包含的所有值,返回一个String数组对象,如果指定的参数不存在,则返回null值。该方法适用于参数有多个值的情况。如果参数只有一个值,则返回的数组的长度为1

public Enumeration getParameterNames() 

5.4、请求参数传递的方法

(1)通过表单提供请求参数。

2)将参数名和值附加在请求的URL后面,这种方法只适用于GET请求。

访问LoginServlet使用的URL

http://localhost:8080/helloapp/login?username=admin&password=admin

问号后面内容为请求参数名和请求参数值对,称为查询串(query string

若有多个参数,中间用&符号分隔,参数名和参数值之间用等号(=)分隔。

(3)在超链接中也可以传递请求参数

例如:

<a href=/helloapp/login?username=admin&password=admin>用户登录</a>

jsp为前缀的请求参数名都是保留的 

下面的用法会产生意想不到的结果,因此不推荐使用。

      http://localhost:8080/helloapp/login?jspTest=myTest

原创粉丝点击