HTTP简介

·WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵守一定的规则,这个规则就是HTTP协议。

·HTTP是hypertext transfer protocol(超文本传输协议)的简写,他是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。

·HTTP协议的版本HTTP/1.0、HTTP/1.1、HTTP-NG

HTTP的会话方式

·四个步骤:

浏览器与WEB服务器的链接过程是短暂,每次连接只处理 一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一个单独的连接。

浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

HTTP请求消息

请求信息的结构:

  一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

·举例:

HTTP响应消息

  一个状态行、若干消息头、以及实体内容,其中的一些消息和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

·举例:

HTTP消息--其他细节

·响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。

·一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。

使用GET和POST方式传递参数

·在URL地址后面可以附加一些参数

·GET方式

举例:http://www.it315.org/servlet/ParamsServlet?param1=abc&param2=xyz

特点:传送的数据量是有限的,一般限制在1KB以下。

·POST方式

举例:

POST /servlet/ParamsServlet HTTP/1.1

Host:

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

Content-Length: 28

param1=abc&param2=xyz

特点:传送的数据量要比GET方式传送的数据量大得多。

使用GET方式传递参数

·在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET

·如果网页中的<form>表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。

·使用GET请求方式给WEB服务器传递参数的格式:

http://URL地址?name=lc&password=123

·使用GET方式传送的数据量一般限制在1kb以下。

 使用POST方式传递参数

·POST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据。

·POST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。

POST请求消息的格式:

POST /counter.jsp HTTP/1.1

referer: http://localhost:8080/Register.html

content-type: application/x-www-form-urlencoded

host: localhost:8080

content-length: 43

name=zhangsan&password=123

HttpServletRequest简介

·Servlet API中定义的ServletRequest接口类用于封装请求信息。

·HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息。

·在service()方法内部调用HttpServletRequest对象的各种方法来获取请求消息。

获取请求行的相关信息

·HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:

例:

GET /lampbrother/servlet/RequestURI?param1=a&param2=b HTTP/1.1

·getMethod:返回HTTP请求消息中的请求方式。

·getRequestURL:返回请求行中的资源名部分。

·getQueryString:返回请求行中的参数部分。

·getProtocol:返回请求行中的协议名和版本。

·getContextPath:返回请求资源所属于的WEB应用程序的路径。

·getPathInfo:返回请求URL中的额外路径信息所对应的资源的真是路径。

·getPathTranslated:返回URL中的额外路径信息所对应的资源的真是路径。

·getServlet:Servlet的名称或Servlet所映射的路径。

获取网络连接信息

·getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为

“192.168.0.3”这种形式的字符文本。

·getRemoteHost方法返回发出请求的客户机的完整主机名,即

“pc1.atguigu.com”这种格式。

·getRemotePort方法返回发出请求的客户端所使用的网络接口的端口号。

·getLocalAddr方法返回WEB服务器上接受当前请求的网络接口的IP地址。

·getLocalName方法返回WEB服务器上接受当前请求的网络接口的IP地址所对应的主机名。

·getLocalPort方法返回WEB服务器上接受当前请求的网络接口的端口号。

·getServerName方法返回当前请求所指向的主机名。

·getServerPort方法返回当前请求所连接的服务器端口号。

·getScheme方法返回请求的协议名。例如http、https或ftp。

·getRequestURL方法返回客户端发出请求时的完整URL。

获取请求头信息

•getHeader方法
•getHeaders方法
•getHeaderNames方法
•getIntHeader方法
•getDateHeader方法
•getContentType方法
•getContentLength方法
•getCharacterEncoding方法
 
获取请求参数
 
•getParameter方法
•getParameterValues方法
•getParameterNames方法
•getParameterMap方法
 
获取请求参数的编程实例
 

Enumeration paramNames = request.getParameterNames();

while(paramNames.hasMoreElements())

{

String paramName = (String)paramNames.nextElement();

out.print(paramName + " : " + request.getParameter(paramName) + "<br>");

/*如果要考虑同一个请求头名可能出现多次,那么应该用下面的代码段代替上面一行程序代码*/

/*String [] paramValues = request.getParameterValues(paramName);

//良好的编程习惯,在使用对象和数组之前先判断其是否为null

if(paramValues != null)

{

for(int i=0;i<paramValues.length;i++)

{

out.print(paramName + " : " + (String)paramValues[i] + "<br>");

}

}*/

}

请求域属性

·存储在ServletRequest对象中的对象称之为请求域属性,属于同一个请求的多个处理模块之间可以通过请求域属性来传递对象数据。

·与请求域属性相关的方法:

setAttribute方法
getAttribute方法 
removeAttribute方法
getAttributeNames方法

HttpServletResponse简介

·Servlet API 中定义的ServletResponse接口类用于创建响应消息。

·HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息。

请求重定向与请求转发

RequestDispathcher接口

·RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如,Servlet、HTML文件、JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源。

·RequestDispatcher接口中定义了两个方法:forward方法和include方法。

·forward和include方法接受的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象,或者是对他们进行了包装的ServletRequestWrapper或ServletRequestWrapper对象。

·获取RequestDispatcher对象的方法:

ServletContext.getRequestDispatcher (参数只能是以“/”开头的路径)
ServletContext.getNamedDispatcher
ServletRequest.getRequestDispatcher (参数可以是不以“/”开头的路径)
 
用sendRedirect方法实现请求重定向
  sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
如果传递给sendRedirect方法的相对URL以“/”开头,则是相对于整个WEB站点的根目录,而不是相对于当前WEB应用程序的根目录。
 
请求重定向与请求转发的比较
 
·RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
·如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
•调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
•HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
•RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
 
application域范围的属性
 
•application 对象(ServletContext对象)内部有一个哈希表集合对象,存储进application对象内的哈希表集合对象中的每对关键字/值被称为application对象的属性。
•存储在application对象中的属性也被称之为application域范围的属性,application域范围的属性可以被当作该WEB应用程序范围内的全局变量使用。
•ServletContext接口中定义了4个分别用于增加、删除、访问application域范围的属性的方法:
getAttributeNames方法
getAttribute方法
removeAttribute方法
setAttribute方法  
 

JAVA SERVLET专题(下)的更多相关文章

  1. JAVA SERVLET专题(上)

    SERVLET简介 ·Java Servlet 是和平台无关的服务器端组件,它运行在Servlet容器中.Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和 ...

  2. Java Servlet完全教程

    Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...

  3. JavaWeb之Java Servlet完全教程(转)

    Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...

  4. Java Servlet规范

    截自网址:http://blog.csdn.net/u010391029/article/details/46521051 JavaServlet Specification  Version 2.3 ...

  5. java servlet 几种页面跳转的方法及传值

    java servlet 几种页面跳转的方法及传值   java web 页面之间传值有一下这几种方式1.form 表单传递参数2.url地址栏传递参数3.session4.cookie5.appli ...

  6. Java Servlet与Web容器之间的关系

    自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...

  7. java servlet调用带有多个返回结果集的存储过程

    一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...

  8. java servlet+mysql全过程(原创)

    前段时间写过一篇 servlet+oracle的文章,但是那是因为公司有可能接那么一个项目,然后我当时也比较闲,所以随便学了下,那玩意是白去研究了,因为公司后面并没接到那项目. 这次学servlet用 ...

  9. java servlet+oracle 新手可看

    最近公司领导告诉接下去接的一个产品,可能会涉及到oracle数据库,以前用得最多的是mssql,前些时间学了下mysql也算少许用过.oracle没接触过.应为我之前做过.net开发,所以数据访问接口 ...

随机推荐

  1. Linux 打包和压缩 方法详解

    一般基因组的数据都非常大,所以都会 打包 压缩 后进行传输,拿到数据后的第一步必然就是要 解包 和 解压缩. 基本常识 首先要弄清两个概念:打包 和 压缩. 打包 是指将一大堆文件或目录变成一个总的文 ...

  2. De novo 测序基础知识

    名词解释 De novo:拉丁文,从头开始的意思,de nove测序则是指在不需要任何参考序列的情况下对某一物种进行基因组测序,然后将测得的序列进行拼接.组装,从而绘制该物种的全基因组序列图谱. 重测 ...

  3. linux 重命名文件和文件夹

    linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 其实在文本模式 ...

  4. SharpZipLib要支持unicode的文件名称

    可以参考以下例子 ZipEntry entry = new ZipEntry(file); entry.IsUnicodeText = true; 这个方法找了很久,之前用其他帖子说的ZipConst ...

  5. (18)odoo规范

    * 约定    # 命名会用  蛇形式或驼峰式        todo_task_stage 蛇形式        class TodoTask 驼峰式      变量名还是蛇形居多, 类名和方法名驼 ...

  6. VS2012外接程序VMDebugger未能加载或导致了异常

    转http://blog.csdn.net/maryhuan/article/details/42676915 故障现象:打开Visual Studio 2010后弹出错误框,外接程序VMDebugg ...

  7. HDUOJ-------2719The Seven Percent Solution

    The Seven Percent Solution Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  8. case when 对某个字段值分类讨论

    SELECT SM_ID,SM_CID,SM_STATION,SM_TIME,PS_CODE,PS_NUMBER,SS_NAME,SS_CODE, ( THEN '中转站' END) FROM dbo ...

  9. PowerDesigner生成SQL脚本时,对象带有双引号的问题解决

    在pdm查看脚本时,发现表名和字段名带有双引号: 1.create table"cfg_user_card_account"  ( 2.  "user_card_acco ...

  10. 建库和表的脚本.sql

    1.一直都记不太清楚,需要新建一个数据库和表的脚本是怎样的,恰巧今天翻到了,特地记录下来,希望以后用的时候记住吧! create database testdb00; use testdb00; cr ...