`

服务器响应的生成:HTTP响应报头

    博客分类:
  • Java
阅读更多

前面提到了,web服务器响应一般由状态行,一个或多个响应报头 (其中一个必须为Content-Type),一个空行和关联文档组成,要让servlet发挥最大的效力,你不仅需要知道如何生成文档(事实上以后都是用jsp来完成这个工作的),更重要的是要知道  有效地利用状态行和响应报头


如前所述,HTTP响应报头的设置,经常是和状态代码的设置结合一起的 ,例如文档发生移动的状态代码300到307都伴随一个Location头,401(Unauthorized)

代码经常包括伴随WWW-Authenticate的报头。

即使在设置正常的状态代码时,指定报头 也是十分重要的。响应报头 可以用来:指定cookie,提供页面的修改日期(用于客户端缓存),指示浏览器在指定的时间间隔后重新载入页面,给出文件的大小使持续性http连接的应用成为可能,指定生成文档的类型以及执行许多其他任务。




7.1  在servlet中设置响应报头


1,  指定报头时,最通用的方式是使用HttpServletResponse的setHeader方法,接受两个字符串,报头名和报头值:

setHeader(String headerName, String headerValue);//注意这样就只能设置报头值是String类型的报头了


这是通用的方法,对于含有整数和日期的报头,提供了专门的方法,消去上述职能设置String值的缺点:

setDateHeader(String header, long milliseconds)

setIntHeader(String header, int headerValue)

2,  HTTP允许同名的报头名多次出现,有时候我们希望加入新的报头,这时就 用addHeader,addDateHeader,addIntHeader;(set替换,add新增),如果需要知道是否已经包含了特定的报头,可 以用containsHeader进行检查。


3,  HttpServletResponse还提供了许多方便的方法来指定常用的报头(就不用再使用setHeader了)

setContentType(String mimeType)  设置Content-Type报头,大多数servlet都要用到这个

setContentLength(int length)      设置Content-Length报头,如果浏览器支持持续性http连接,这个报头将十分有用

addCookie(Cookie c)         见cookie管理

sendRedirect(String address)  将状态代码设为302,并设置Location报头




7.2  理解HTTP1.1响应报头

理解常见报头的含义:

Allow  指定服务器支持的请求方法

Cache-Control

Connection  close值指定浏览器不要使用持续性http连接

Content-Disposition

Content-Encoding   页面传输使用的编码,gzip,,,

Content-Language

Content-Length

Content-Type  响应文档的mime类型

Expires

Last-Modified

Location  通知浏览器文档的地址

Pragma

Refresh   表明浏览器多长时间后请求最新的页面  例如response.setIntHeader("Refresh", 30);

Retry-After  告诉客户程序多久后重复它的请求

Set-Cookie  

WWW-Authenticate

棕色表示的报头在下面的示例中会用到



7.3 示例:构建Excel表格


servlet也可以生成Excel类型,Excel的MIME类型是application/vnd.ms-excel:

response.setContentType( " application/vnd.ms-excel " ); PrintWriter out = response.getWriter();

 

package coreservlets; import java.io. * ; import javax.servlet. * ; import javax.servlet.http. * ; // 输出一个简单的excel表格 public class ApplesAndOranges extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType( " application/vnd.ms-excel " ); // 设置setContent-Type报头指定输出格式 PrintWriter out = response.getWriter(); // excel接受制表符/t out.println( " \tQ1\tQ2\tQ3\tQ4\tTotal " ); out.println( " Apples\t78\t87\t92\t29\t=SUM(B2:E2) " ); out.println( " Oranges\t77\t86\t93\t30\t=SUM(B3:E3) " ); } }


请求:http://localhost:8080/Servlet/servlet/ApplesAndOranges的结果----




打开表格内容为:





7.4  servlet状态的持续以及页面的自动重载

 
如果你的jsp或者servlet执行一项耗时较长的计算任务,比如20秒或者更多,你不能知网计算完成后再将结果发送至客户,到那时客户可能已经放弃并离开该页面或者更坏---用户单击Reload重新计算过程。解决方案:

1)一种跨请求存储数据的方式

对于不专属于任意客户的数据,可以将其存储在servlet的字段变量中(实例变 量),对于用户专用的数据,可以将其存储在HttpSession对象中(参见后续章节),对于其他servlet和jsp页面需要用到的数据,可以存储 到ServletContex中(后续章节)。

2)一种在请求发送给用户后,继续保持运算的方式

启动一个线程,系统为了应答请求而启动的线程,在响应完成后线程自动结束,但其他的线程会保持运行。要将线程的优先级设为一个较低的值,才不至于影响整个服务器的运行

3)一种在更新的结果就绪后,使浏览器得到它的方式

遗憾的是,服务器主动的将新结果发送给浏览器并不容易,因为浏览器并不维护一个与服务器之间保持打开的连接 ,只能让浏览器去主动请求,这样就用Refresh报头来指定重新请求的时间间隔




7.5  使用servlet生成jpeg图像


跟excel差不多,就是具体过程麻烦点,不写在这了



这两章主要都在讲服务器对浏览器请求的响应,要理解响应的格式,这两章分开讲解了响应内容中的状态码和报头 ,理解servlet是怎样利用这些状态码和响应报头来完成一些应用的

分享到:
评论

相关推荐

    Servlet与 JSP 指南,PPT教学课件part2(共3个)

    1、servlet与JSP技术概述 2、servlet基础 3、客户请求的处理:表单数据 4、客户请求的处理:HTTP请求报头 5、服务器响应的生成:HTTP状态代码 6、服务器响应的生成: HTTP响应报头 7、cookie...

    Servlet与 JSP 指南,PPT教学课件part3(共3个)

    1、servlet与JSP技术概述 2、servlet基础 3、客户请求的处理:表单数据 4、客户请求的处理:HTTP请求报头 5、服务器响应的生成:HTTP状态代码 6、服务器响应的生成: HTTP响应报头 7、cookie...

    Servlet与 JSP 指南,PPT教学课件part1(共3个)

    1、servlet与JSP技术概述 2、servlet基础 3、客户请求的处理:表单数据 4、客户请求的处理:HTTP请求报头 5、服务器响应的生成:HTTP状态代码 6、服务器响应的生成: HTTP响应报头 7、cookie...

    C++自己封装HTTP报头

    9. **Status Code**:在响应报头中,3位数字表示请求处理的结果,如200表示成功,404表示未找到资源,500表示服务器内部错误。 在C++中封装HTTP报头,你需要创建一个类来代表HTTP请求或响应,包含上述字段,并提供...

    HTTP协议详解

    - 常见的响应报头: - `Content-Type`: 响应的数据类型。 - `Content-Length`: 响应体的长度。 - `Server`: 服务器软件的名称和版本。 - `Date`: 响应生成的时间。 - `Location`: 重定向到的新位置。 #### 六...

    Response-Headers详解

    以Java中的Servlet为例,可以使用`HttpServletResponse`类来设置各种响应报头: 1. **`setHeader`方法**:用于设置任意名称的响应报头。 ```java response.setHeader("X-Custom-Header", "value"); ``` 2. **`...

    计算机网络实验报告(20211010104803).pdf

    - 构造HTTP响应报头:服务器根据客户端请求构造响应报头,完成类似于真实Web服务器的交互。 实验过程中,学生不仅能掌握基础的网络协议知识,还能通过实践理解HTTP协议在Web通信中的作用,以及Java Socket编程技术...

    http协议详解.pdf

    * 响应报头:响应报文第二行开始到第一个空行为止的内容,包含了关于 HTTP 响应的重要字段,例如 Content-Type、Set-Cookie 等。 * 响应正文:响应报文从第一个空行开始到最后的所有内容,用于传输资源的内容,例如 ...

    http协议详解

    2. 消息报头:包含服务器返回的附加信息,如Server(服务器软件信息)、Location(重定向URL)、Date(响应生成时间)等。 3. 响应正文:服务器返回的具体内容,如HTML文档、图片、视频等。 了解HTTP协议的工作...

    07HTTP协议应用1

    消息报头用于传递服务器响应的附加信息,响应正文则包含了服务器返回的内容,如HTML页面、图片等。 【HTTP请求方法】 HTTP/1.1定义了8种请求方法,最常见的两种是GET和POST: - GET:用于获取资源,请求参数包含在...

    java_socket服务器给浏览器发信息.doc

    接着,服务器接收到请求后,解析请求信息,生成HTTP响应并发送回浏览器。响应的基本结构如下: 1. 状态行:包含HTTP协议版本、状态码(如200表示成功,404表示未找到)和状态消息。 2. 响应头:包含服务器信息、...

    Servlet与JSP核心编程第2版

    第6章 服务器响应的生成:http状态代码 6.1 状态代码的指定 6.2 http1.1状态代码 6.3 将用户重定向到浏览器相关页面的servlet 6.4 各种搜索引擎的一个前端 第7章 服务器响应的生成:htip响应报头 7.1 在...

    C++ Linux WebServer服务器.zip

    5. **HTTP协议**:HTTP定义了客户端(浏览器)与Web服务器之间的通信规则,包括请求方法(GET、POST等)、状态码(200、404等)、报头和实体主体等元素。 6. **HTTPS**:HTTPS是在HTTP基础上加入了SSL/TLS层,用于...

    HTTP协议总结

    - **消息报头**:提供了关于响应的详细信息,如Server(服务器使用的软件)、Date(响应的生成时间)、Content-Type(响应体的MIME类型)、Content-Length(响应体的长度)等。 - **实体数据**:即响应中的实际...

    javasocket服务器给浏览器发信息.pdf

    常见的响应报头包括日期、服务器类型、MIME类型、内容长度等。响应的主体部分通常包含HTML内容或二进制文件。 在Java中,实现HTTP服务器的关键在于创建`ServerSocket`对象,它会在指定的端口(如HTTP默认的80端口)...

    必须掌握的http协议知识.pdf

    例如,Allow头表示服务器支持的请求方法,Content-Type头指定响应实体的数据类型,Date头给出响应生成的时间,Server头则表明服务器软件信息。 理解并熟练掌握HTTP协议的基本概念、工作原理和请求响应机制,对于...

    java_socket服务器给浏览器发信息(1).pdf

    一旦连接建立,服务器端的Socket对象就可以读取请求的字节流,解析出请求行和报头,然后根据请求的内容生成相应的HTTP响应。 响应消息也有类似的结构:状态行(包含HTTP版本、状态码和简短信息)、报头和实体主体。...

    http协议介绍

    3. **响应请求**:服务器接收到请求后,根据请求内容生成响应并返回给客户端。 4. **断开连接**:事务完成后,客户端和服务器关闭TCP连接。 #### 1.4 HTTP消息 - **请求消息(Request)**:由客户端发送到服务器,...

Global site tag (gtag.js) - Google Analytics