第四章 使用Servlet处理HTTP请求

 

回顾上一章的知识:

请求网络资源HTTP会发出多个请求并得到响应

设置响应状态行关键是设置状态码

在向客户端输出内容之前要设置状态码和响应头

设置响应头让Servlet发挥最大功能

消息体可以用文本或二进制流方式发送

响应重定向把请求转发给另外一个URL,利用302状态码和Locatoin头,让浏览器处理

可以根据时间来控制响应

 

本章目标:

HTTP请求提交的方法

获取HTTP请求行与请求头

获取表单数据

请求派发和请求范围

 

GET/POST提交方法:

浏览器向Web服务器发送HTTP请求

–用户在网页上点击一个超连接

–用户提交在网页上填写好的表单

–用户在浏览器地址栏中输入URL地址并回车 

默认情况下都是使用HTTP协议的GET方法提交请求

 

GET/POST提交方法区别:

 

何时使用GET/POST方法:

1:请求一个静态页面或图形文件时使用GET方法,因为仅仅需要发送文件名;

2:发送大数据的时候,使用POST方法;

3:上传文件时,使用POST方法;

4:发送用户名、密码或其他保密信息的时候使用POST方法;

 

获取HTTP协议请求行:

HttpServletRequest对象的如下方法访问

–getMethod():获取HTTP的请求方法,例如GET、POST等

-getRequestURI():获取请求的URI资源

–getRequestURL():获取请求的URL,包含协议名、服务器名或IP、端口号和请求资源但不包括查询字符串参数

–getQueryString():获取请求URL后面的查询字符串

–getProtocol():获取HTTP的协议名和版本号

–getContextPath():获取请求URI资源的上下文路径

–getServletPath():获取Servlet的映射路径

 

获取HTTP协议请求头:

HTTP请求头用于告诉服务器客户端使用什么软件以及客户端想要服务器如何返回请求的信息

HttpServletRequest对象的如下方法访问

–getHeader(name):返回指定的请求头的值

–getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值

–getHeaderNames():特定请求中接受到的所有请求头的名称

–getIntHeader(name):获取特定请求头的值,并将其转化为int类型

–getDateHeader(name):获取特定请求头的值,并将其转化为Date类型  

 

Enumeration enum = request.getHeaderNames();

      while (enum.hasMoreElements()) {

          String headerName = (String) enum.nextElement();

         String headerValue = request.getHeader(headerName);

        out.print("<b>"+headerName + "</b>: ");

        out.println(headerValue + "<br>");

      }

 

获取请求消息体:

消息体可以是普通文本也可以是二进制数据 

HttpServletRequest对象可以使用通用的方法来获取表单数据

 

请求转发和请求方法:

重定向和请求转发之间最大的区别在于,重定向让客户端浏览器来完成,而请求转发是在服务器端做工作。

请求转发:

RequestDispatcher对象可以通过调用ServletRequest对象的方法:getRequestDispatcher(String path);

RequestDispatcher对象提供了两种方法来包含资源以及请求转发到不同的资源:

forward(ServletRequest, ServletResponse):派发请求和响应对象到RequestDispatcher 对象所确定的新资源(Servlet、JSP或者HTML等)

include(ServletRequest, ServletResponse):该方法关键是能包含服务器端的资源 

总结:

HttpServletRequest对象主要用于处理分析请求

默认情况下,使用HTTP协议的GET方法提交请求

HTML表单通过“method”属性使浏览器使用HTTP POST方法

GET/POST方法适用于不同场合

HttpServletRequest对象中最常用的方法是获取请求表单参数

HttpServletRequest对象也可以得到请求中参数的原始字节数据

重定向和请求派发之间最大的区别在于,重定向让客户端浏览器来完成,而请求派发是在服务器端做工作

HttpServletRequest可以把一个对象用名字绑定在请求范围内,并且进行访问和删除

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

时间: 2024-11-03 11:59:14

第四章 使用Servlet处理HTTP请求的相关文章

第四章、存储器管理

第四章.存储器管理 物理地址和逻辑地址 物理地址:存储单元的编号,可以直接寻址. 逻辑地址:程序中的地址,是可以改变的,不可直接寻址. 重定位:将逻辑地址空间的逻辑地址变换成内存空间的物理地址的过程. 静态重定位和动态重定位 静态重定位:当用于程序被装入内存时,一次性地实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成),直到该程序完成退出内存为止. 动态重定位:当用户程序被装入内存时,并不将其逻辑地址转换,而是保留原来的逻辑地址.等程序真正要执行时才将其逻辑地址通过动态计算

《.net编程先锋C#》第四章 C#类型(转)

编程 第四章 C#类型 既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#的类型系统.在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么.尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序.4.1 值类型 各种值类型总是含有相应该类型的一个值.C#迫使你初始化变量才能使用它们进行计算-变量没有初始化不会出问题,因为当你企图使用它们时,编译器会告诉你. 每当把一个值赋给一个值类型时,该值实际上被拷贝了.相比,对于引用类型,仅是引用被拷贝

&amp;gt;第四章 C#类型(rainbow 翻译)(来自重粒子空间)

<<展现C#>>第四章 C#类型(rainbow 翻译)   出处:http://www.informit.com\matter\ser0000002\chapter4\ch04_04.shtml 正文: 第四章  C#类型     既然你知道了怎样创建一个简单的C#程序,我将会给你介绍C#的类型系统.在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么.尽管这一章的不侧重于例子,但你可以学到很多重要的信息,关于如何创建现成类型的程序.4.1 值类型     

《Servlet和JSP学习指南》一第1章 Servlet 1.1 Servlet API概述

第1章 Servlet Servlet是开发Servlets应用程序的主要技术.掌握Servlet API是成为一名技术高超的Java Web开发者的基础.你必须非常熟悉Servlet API中所定义的70多种类型.这个数字听起来似乎不少,但是如果你每次学一种,就不会觉得困难了. 本章将介绍Servlet API,并教你编写第一个Servlet应用程序. 1.1 Servlet API概述 Servlet API中有4个Java包,包括: javax.servlet.包含定义Servlet与Se

【PMP】Head First PMP 学习笔记 第四章 项目整合管理

第四章 项目整合管理 项目经理每天的工作 力保项目顺利进行 紧密监督以确保计划进行 计划本身不完善需要予以修正 即使是更大的项目的子项目,也要有收尾的过程 6个整合管理过程 整合管理划分为6个过程,项目经理必须掌握的核心职责. 1.制订项目章程 授权你展开工作的文档,通常由赞助人(为项目提供资金的人)交给你. 2.制订项目管理计划 项目管理计划涵盖了所有知识领域,很大一部分就是告诉你在出现问题时如何处理变更. 3.指导和管理项目执行 确保所有人都在做他们本该做的事,项目创建的产品和项目确实满足干

《PHP程序设计》 第四章 程序控制

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  第四章 程序控制      本章深入PHP内部,讲述如何使用函数.表达式和语句以实现对程序的控制.      前面的章节初步介绍了怎样操作数据,如果我们将操作数和操作符看作是构筑元件的话,那么它们组合起来即可形成表达式.进一步讲,表达式可以构成语句,语句用于组成函数,而函数则可用来组成程序.      提示:在学习有关编

第十四章 数组[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计|数组 第十四章 数组. 内容摘要: 本章讨论了数组的方方面面,对于这种常用类型进行深入研究. 一. 数组简介 三种类型:一维数组.多维数组.交错数组(jagged aray) l 一维数组: Int32[] myIntegers; myIntegers = new Int32[100]; l 多维数组: Int32[,] myIntegers; myIntegers = new Int32[100,100]; l 交错数组:交错数组不受CLS支持 Point[][

3D编程:第四章 Hello,Shaders

第四章 Hello,Shaders 本章,会编写第一个shaders.介绍HLSL语法,FX文件格式,数据结构等等.学完本章,你就具备了深入学习图形编程的基础知识. Your First Shader 使用一种新的编程语言编写第一个程序时都会使用经典的编程例子"Hello,World!",程序输出就是一行文字"Hello,World!".我们遵守这一历史悠久的传统,编写第一个shader程序"Hello,Shaders!",但是这次的输出是一种固

WF从入门到精通(第十四章):基于状态的工作流

学习完本章,你将掌握: 1.理解状态机的概念以及它怎样被模拟到工作流处理中的 2.创建基于状态的工作流 3.运用初始(initial)和终止(terminal)状态条件 4.使用代码进行状态的切换 在第四章"活动和工作流类型介绍"中,我阐述过你使用WF所能创建的工作流类型,在那里我提到过基于状态的工作流.基于状态的工作流模型被认为是有限自动机(finite state machine).基于状态的工作流在工作流需要和外部事件进行许多交互的场合中大出风头.在事件触发并被工作流处理的时候,