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. 项目二:使用机器学习(SVM)进行基因预测

    SVM软件包 LIBSVM -- A Library for Support Vector Machines(本项目所用到的SVM包)(目前最新版:libsvm-3.21,2016年7月8日) C-S ...

  2. VR应用里面的Photogrammetry技术是什么

    http://www.manew.com/thread-49556-1-1.html 具体使用 http://www.didayin.com/archives/632 软件下载 http://labs ...

  3. 【bzoj1057】棋盘制作

    题意 给定\(n*m\)的棋盘,每个格子有0或1其中的一种颜色. 求一个最大的正方形,满足正方形内0和1相互间隔. 求一个最大的矩形,满足矩形内0和1相互间隔. \(n,m\leq 2000\) 分析 ...

  4. robotframework笔记4

    机器人框架概述   机器人框架是一个通用的开源的自动化测试框架 验收测试和验收测试驱动开发(ATDD).它具有易于使用的表格的测试数据 语法采用关键字驱动 测试方法.其检测能力可以通过测试库 用Pyt ...

  5. WLAN频段介绍-04

    ISM频段 ISM频段,此频段主要是开放给工业.科学.医学三个主要机构使用,该频段是依据美国联邦通讯委员会(FCC)所定义出来,并没有所谓使用授权的限制. 工业频段:美国频段为902-928MHz,欧 ...

  6. 为MySQL选择合适的备份方式

    数据库的备份是极其重要的事情.如果没有备份,遇到下列情况就会抓狂: UPDATE or DELETE whitout where… table was DROPPed accidentally… IN ...

  7. jQuery图表开源软件

    jQuery图表插件 jQchart jQchart 是一个jQuery的插件,用来绘制图表的.支持各种形状的图表. 示例代码: == Mini sample == $('#canvasMyID'). ...

  8. hdu----(4301)Divide Chocolate(状态打表)

    多校综合排名前25名的学校请发送邮件到HDUACM@QQ.COM,告知转账信息(支付宝或者卡号) Divide Chocolate Time Limit: 2000/1000 MS (Java/Oth ...

  9. js 格式验证总结

    1.身份证号验证 var Common = { //身份证号验证 IsIdCardNo: function (IdCard) { var reg = /^\d{15}(\d{2}[0-9X])?$/i ...

  10. javascript中IE与ff的区别

    1.自定义属性问题:可以使用获取常规属性的方法来获取自定义属性,也可以使用getAtribute()获取自定义属性,ff下只能使用getAttribute()获取自定义属性. 2. 在IE中可以用ev ...