java中如何设置HTTP协议的头信息(header)

java中如何设置HTTP协议的头信息(header),第1张

首先,我们先看一下http的头信息到底是什么:

HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而 言,包括message-header和message-body两部分。首先传递message- header,即http header消息。http header 消息通常被分为4个部分: general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确,根据日常使用,大体分为Request和Response两部分。

在通常的servlet/jsp应用中,我们只是从http的header中取得信息,如果要设置信息,需要用到HttpClient,具体的设置方法如下:

HttpResponse response = null

HttpGet get = new HttpGet(url)

get.addHeader("Accept", "text/html")

get.addHeader("Accept-Charset", "utf-8")

get.addHeader("Accept-Encoding", "gzip")

get.addHeader("Accept-Language", "en-US,en")

get.addHeader("User-Agent", "Mozilla/5.0 (X11Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22")

response = client.execute(get)

HttpEntity entity = response.getEntity()

Header header = entity.getContentEncoding()

if (header != null)

{

HeaderElement[] codecs = header.getElements()

for (int i = 0i <codecs.lengthi++)

{

if (codecs[i].getName().equalsIgnoreCase("gzip"))

{

response.setEntity(new GzipDecompressingEntity(entity))

}

}

}

return response

其中,client为一个HttpClient的实力,创建方式如:

SchemeRegistry schemeRegistry = new SchemeRegistry()

schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()))

schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()))

PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry)

cm.setMaxTotal(200)

cm.setDefaultMaxPerRoute(2)

HttpHost googleResearch = new HttpHost("research.google.com", 80)

HttpHost wikipediaEn = new HttpHost("en.wikipedia.org", 80)

cm.setMaxPerRoute(new HttpRoute(googleResearch), 30)

cm.setMaxPerRoute(new HttpRoute(wikipediaEn), 50)

DefaultHttpClient client = new DefaultHttpClient(cm)

步骤如下:

1、在web工程里面创建一个Servlet类,继承HttpServlet,重写doPost,doGet方法,在doPost方法中调用doGet方法;

2、在doGet方法中把要设置到jsp页面的值存到request中;

3、在doGet方法中添加转发到jsp页面的代码;

4、在jsp页面中使用jstl标签获取存入的值。

事例代码如下:

Servlet类:

public class DemoServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setAttribute("name", "nameValue")

request.getRequestDispatcher("/demo.jsp").forward(request, response)

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response)

}

}

jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Demo</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

</head>

<body>

${name }

</body>

</html>

其中,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>表示导入jstl标签库,没导入的话无法使用jstl标签,使用jstl标签可以减少很多代码量,导入jstl标签后就可以通过使用${}的方法来获取值了。

本文中演示如何通过URLConnection获取Http响应Header信息

从响应中获得Header信息

URL obj = new URL

URLConnection conn = obj openConnection()

Map<String List<String》 map = conn getHeaderFields()

从响应Header中获取Server信息

Map<String List<String》 map = conn getHeaderFields()

List<String>server = map get( Server )

完整的示例

package qiyadeng

import URL

import URLConnection

import java util List

import java util Map

public class GetHttpResponseHeader {

public static void main(String[] args) {

try {

URL obj = new URL

URLConnection conn = obj openConnection()

Map<String List<String》 map = conn getHeaderFields()

System out println( 显示响应Header信息\n )

for (Map Entry<String List<String》 entry : map entrySet()) {

System out println( Key : + entry getKey() +

Value : + entry getValue())

}

System out println( \n使用key获得响应Header信息 \n )

List<String>server = map get( Server )

if (server == null) {

System out println( Key Server is not found! )

} else {

for (String values : server) {

System out println(values)

}

}

} catch (Exception e) {

e printStackTrace()

}

}

}

输出

显示响应Header信息…

Key : null Value : [HTTP/ OK]

Key : X Pingback Value :

Key : Date Value : [Sun Mar : : GMT]

Key : Transfer Encoding Value : [chunked]

Key : Connection Value : [close]

Key : Content Type Value : [text/charset=UTF ]

Key : Server Value : [Apache/ (CentOS)]

Key : X Powered By Value : [PHP/ ]

lishixinzhi/Article/program/Java/hx/201311/25662


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11427238.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存