`
DLevin
  • 浏览: 37468 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet&JSP学习系列(2) - Request消息

阅读更多
Servlet是基于HTTP协议的,因而深入了解HTTP协议的消息格式,对理解Servlet有很大的帮助。事实上,HttpServletRequest就是对HTTP请求消息的一种封装。

HTTP request消息的格式如下:
[Method][SP][URI][SP][HTTP version]
[headers(key: value)]*
CRLF
[Content]

注:SP为空格
CRLF为回车换行
如:
GET /servlet/Search?Keywords=servlet+jsp HTTP/1.1
Accept:image/gif,image/jpg,*/*
Accept-Encoding:gzip
Connection:Keep-Alive
Cookie:userID=id45678
Host:localhost
User-Agent:Mozilla/4.0(compatible;MISE 6.0;Windows NT 5.0)

可以将HTTP请求消息格式分成三部分来讨论:
1. 起始行:包含请求方法(如GET、POST、PUT、DELETE等),请求URI,若是GET方法,URI中还包含了请求内容,以及HTTP版本号,一般都为HTTP/1.1的值。
2. 请求报头:包含当前请求的额外信息。如Accept表示客户端可处理的MIME类型,Cookie表示客户端传输过来的cookie值对。
3. 请求消息内容:如果是POST请求,还会在请求报头后空一行,加如请求消息的内容。(注:如要读取该内容,要用read方法,而不能用readLine方法。

一般常用的请求方法有:GET和POST。GET方法会直接在浏览器的地址栏中显示,不会加密,因而主要用于不敏感的数据,而POST的数据可以用于加密操作,主要用于敏感数据,可以加密。另外GET传送数据量较小,一般不能大于2K,而POST传送数据量较大,一般最大可以达到2M。
在servlet中,请求方法可以通过request.getMethod()方法获取。

URI表示要请求的资源,如要请求的Servlet,JSP页面,HTML页面等。如果是GET方法,则还包含了请求内容,”?”后的值对即为请求的内容,但是内容可以为空,如超链接的请求。
在servlet中,请求方法可以通过request.getRequestURI()方法获取。注:该方法获取的是URL中主机和端口之后、表单数据之前的部分,如http://somehost.com:8080/servlet/booksearch?subject=jsp,则该方法返回的值为:”/servlet/booksearch”.

HTTP版本一般有1.1、1.0。
在servlet中,可以通过request.getProtocol()获取。

请求内容:POST请求出现在请求报头后,一般也是以值对的形式出现,该值对中的值可以为二进制的数据,如文件上传操作。而GET请求则包含在URI中。请求内容一般为用户输入的数据。
在servlet中,请求的内容可以通过request.getParameter(“key”)方法获得。由于请求内容的key可以多次出现,因而对这种情况,可以通过request.getParameterValues(“key”)方法获取。同时Servlet也提供了request.getParameterNames()和request.getParameterMap()方法以获取所有值对的列表。
对GET请求,也可以通过request.getQueryString()方法来获取请求内容,如上URL返回”subject=jsp”。

或许Request消息中,最复杂的就是请求消息头了,HTTP请求消息头一般为浏览器默认填入。为什么HTTP中的请求消息中需要添加消息头呢?我的理解主要有两点:
1. 提供给服务器一些必要的信息,但是这些信息又不是由用户输入的,如cookie,host等。
2. 提供一种对HTTP协议的扩展程序,以定制基于自己的应用程序。
在servlet中,可以通过request.getHeader(“name”)获取相关的值或者用request.getDateHeader(“name”),request.getIntHeader(“name”)进行相应的类型转换,也可以通过request.getHeaderNames()获取所有的请求头列表。对多次出现的报头,可以通过getHeaders(“name”)来获取。
对几种常用的报头,servlet为其提供了专门的方法。如:
1. Cookie报头request.getCookies()
2. Authorization报头:request.getAuthType()和request.RemoteUser()的组合
3. Content-Length报头:request.getContentLength()
4. Content-Type报头:request.getContentType()

几种常见的请求报头:
1. Accept
指示客户端能够处理的MIME类型。用于某些支持多种格式的网站根据Accept报头来定制响应报文。如png文件比gif文件在压缩上占有优势,因而可以检查该报头的内容以定制返回的是png文件还是gif文件。
2. Accept-Charset
指示客户端可以使用的字符集。如ISO-8859-11。
3. Accept-Encoding
指示客户端能够处理的页面编码类型,常见的如”gzip”,”compress”等值。而响应报文中通常加入Content-Encoding来标明响应页面的编码类型。一般来说压缩的时间要比减小的传输时间要短,因而对返回页面进行压缩一般来说是值得的。
4. Accept-Language
指示客户端期望接受的语言类型(单值),如en,en-us等。该报头一般用于国际化,以处理多种语言的结果。
5. Authorization
在访问密码保护的Web页面是,客户端用于标识自己的身份。
6. Connection
指示是否保持连接,以在一个Socket中可以读取多个文件,HTTP1.1中默认为保持连接,而HTTP1.0默认相反。保持连接可以减少协商时间,增加性能。
但是不管是否保持连接,在servlet中,每一个请求多会新起一个线程来调用service方法。
7. Content-Length
只用于POST方法中,用来指示POST的数据大小,以字节为单位。
8. Cookie
向服务器返回之前服务器发送给客户端的Cookies。
9. Host
在HTTP1.1中是必须的,指示原始URL中给出的主机名和端口号。由于虚拟主机的引入(一台计算机处理多个域名对应的网站),导致服务器可能不能通过其他方式知道这个信息。
10. If-Modified-Since
指示仅当页面在制定的日志发生更改的情况下,客户程序才需要获取该页面。如果没有更新的结果,则服务器发送304报头(Not Modified)。该选项可用于浏览器有缓存的情况下。一般Servlet不需要直接处理这个报头,而是应该实现getLastModified()方法,以让系统自动处理修改的日期。
11. If-Unmodified-Since
该报头和If-Modified-Since相反,指示仅当文档比指定的日期要旧时才需要继续操作。一般来说,If-Modified-Since用在GET请求中(仅当服务器的文档比我缓存的文档要新时才获取新的文档),If-Unmodified-Since用在PUT请求中(仅当在我获得这个文档之后,服务器的文档没有其他人做过修改时,才需要更新这个文档)。这是HTTP1.1中新加入的报头。
12. Referer
指示引用Web页面的URL。如在一个Web页面1单击指向Web页面2的链接,那么在浏览器生成请求时就会将Web页面1的URL填入Referer报头中。
该报头可以用于追踪请求的来源。如可以追踪将人们引到某网站广告客户以追溯流量的来源,或者更具引用网站的不同对内容做一些调整。
要注意:
1) 客户端可以轻易的篡改Referer报头。
2) Referer的正确拼写是Referrer,这是HTTP协议作者的一个错误。
3) 某些浏览器(Opera)、广告过滤软件、个人防火墙可能会屏蔽这个报头,并且即使在正常的情况下,也只有用于点击连接时才会设置该报头,因而需要做null检查。
13. User-Agent
指示请求来源的浏览器或者其他客户端程序。可以根据该值为不同的浏览器返回不同的内容。如处理浏览器间的兼容问题。
注意:很多浏览器会在User-Agent中加入其他浏览器的内容,如果IE会加入”Mozilla”的值,以兼容JavaScript。因而需要检查某些浏览器特定包含的内容。
分享到:
评论

相关推荐

    head first servlet&JSP讲解课件java-web

    综上所述,"head first servlet&JSP讲解课件java-web"涵盖了Java Web开发的核心部分,学习者可以通过此课件深入学习Servlet和JSP的各个方面,包括它们的工作原理、编程模式、最佳实践以及如何用它们来构建实际的Web...

    Servlet&JSP学习笔记源代码

    在"Servlet&JSP学习笔记源代码"中,林信良教授通过实例讲解了这两项技术的基础和进阶知识。这些源代码是在Eclipse集成开发环境中创建的,Eclipse是Java开发的主流工具,支持丰富的插件,使得开发、调试和部署Servlet...

    servlet&Jsp核心编程第二版英文版

    2. **JSP内置对象**:如`out`、`request`、`response`、`session`等,它们是预定义的Java对象,可以直接在JSP页面中使用。 3. **EL(Expression Language)**:一种轻量级的表达式语言,用于方便地访问和操作JSP...

    Servlet&JSP学习笔记

    ### Servlet&JSP 学习笔记精要 #### 一、Servlet 基础 ##### 1.1 Web 容器 - **概念**: Web 容器是支持 Servlet 和 JSP 运行的基础环境,主要功能是加载和管理 Servlet 实例,处理客户端请求并返回响应。常见的 ...

    Servlet&JSP;学习笔记源代码

    这份"Servlet&JSP学习笔记源代码"是由林信良编著,提供了丰富的实例代码,旨在帮助学习者深入理解这两种技术。 Servlet是Java编程语言的一个接口,允许Java代码与HTTP服务器进行交互。它扩展了服务器的功能,使得...

    Servlet&JSP知识点归纳思维导图

    4. **JSP内置对象**:包括request、response、session、out、pageContext、config、application、page等,它们对应Servlet的API。 5. **EL(Expression Language)**:EL是JSP 2.0引入的轻量级表达式语言,用于方便...

    Servlet&Jsp技术

    综上所述,这些文件构成了一个关于Servlet和JSP基础的教程系列,涵盖了从入门到实践的多个关键点。通过学习这些内容,开发者能够掌握如何利用Servlet和JSP进行动态网页开发,处理HTTP请求,管理用户会话,以及理解和...

    Servlet&Jsp 技术

    - JSP内置对象:request、response、session、out、pageContext等,它们是Servlet API对象的包装。 3. **Servlet和JSP结合使用**: - MVC模式:Servlet通常作为控制器,处理请求,调用业务逻辑,然后将结果传递给...

    Web应用开发(Servlet&JSP)PDF版

    2. **Servlet配置**:学习如何在web.xml文件中配置Servlet,包括URL映射和初始化参数。 3. **Servlet生命周期**:掌握Servlet的生命周期方法,如init()、service()和destroy()。 4. **JSP语法**:熟悉JSP页面中的...

    [JSP&Servlet;学习笔记(第2版)]

    **JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。

    Servlet&jsp_PPT课件 资料

    Servlet和JSP是Java Web开发中的核心技术,它们用于构建动态网页和服务器端应用程序。本资料主要涵盖这两项技术的基础知识、工作原理以及实际应用。 Servlet是Java编程语言中定义的一个接口,由Java Servlet API...

    开发JSP&Servlet&JavaBean的项目(E-家园)

    【JSP、Servlet与JavaBean】是Web开发中的三个核心组件,它们在构建动态网站时起着至关重要的作用。在“E-家园”这个项目中,这三个技术的结合使用,可以实现用户友好的交互和高效的服务器端处理。 **JSP(Java...

    Servlet&Jsp 技术概述

    Servlet和JSP(JavaServer Pages)是Java Web开发中的核心技术,用于构建动态Web应用程序。本文将深入探讨这两项技术的概念、工作原理以及它们在实际应用中的作用。 Servlet是Java编程语言的一个接口,由Sun ...

    【免费】servlet和jsp学习指南-高清版

    这份"【免费】servlet和jsp学习指南-高清版"压缩包提供了详细的教程资源,旨在帮助初学者和进阶者深入理解这两门技术。 Servlet是Java编程语言的一个接口,由Java Servlet API定义,它允许开发者创建能够处理HTTP...

    servlet和jsp学习指南

    《servlet和jsp学习指南》是一本专为Java Web开发初学者量身定制的书籍,它以细致入微的讲解和实例操作,带领读者深入理解Servlet和JSP的基本原理和应用方法。本书将从以下几个方面展开知识点的讲解: 1. Servlet...

    javax.servlet.jsp-api-2.3.2-b01.jar.zip

    【javax.servlet.jsp-api-2.3.2-b01.jar.zip】这个压缩包文件包含的是Java服务器页面(JSP)的Servlet API,具体版本为2.3.2-b01。这个API主要用于网络应用程序开发,特别是针对基于Java的Web应用。在JSP中,开发者...

    Servlet&jsp;

    ### Servlet与JSP详解 #### 一、Servlet概述与开发流程 Servlet是Java EE平台中的一个核心组件,它主要用于处理客户端请求并生成动态Web页面。Servlet由Sun Microsystems(现已被Oracle收购)推出,并逐渐成为Java...

    Servlet&jsp概述

    3. **JSP内置对象**:JSP提供了九个内置对象,如`request`、`response`、`session`和`application`,它们可以直接在JSP页面中使用,对应于Servlet API中的相应接口。 4. **EL(Expression Language)和JSTL(Java...

    Servlet&JSP文档

    在学习Servlet和JSP的过程中,`jsp-note-v0.7.pdf`和`Servlet 课件-v3.pdf`这两个文档应该是宝贵的参考资料。`jsp-note-v0.7.pdf`可能包含了JSP的详细笔记,涵盖了JSP语法、内置对象、EL(Expression Language)、...

    javax.servlet.jsp.jstl-1.2.zip

    **JSTL(JavaServer Pages Standard Tag Library)** 是一个标准的Java标签库,用于增强JSP页面的功能,简化Web开发。它提供了多种标签来处理常见的任务,如控制流程、XML处理、数据库操作等,使得代码更加简洁和...

Global site tag (gtag.js) - Google Analytics