Java原生的API可用于发送HTTP请求
即.URL、.URLConnection,JDK自带的类;
1.通过统一资源定位器(.URL)获取连接器(.URLConnection)
2.设置请求的参数
3.发送请求
4.以输入流的形式获取返回内容
5.关闭输入流
封装请求类
1 package com.util;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.OutputStream;
8 import java.io.OutputStreamWriter;
9 import .HttpURLConnection;
10 import .MalformedURLException;
11 import .URL;
12 import .URLConnection;
13 import java.util.Iterator;
14 import java.util.Map;
15
16 public class HttpConnectionUtil {
17
18 // post请求
19 public static final String HTTP_POST = "POST";
20
21 // get请求
22 public static final String HTTP_GET = "GET";
23
24 // utf-8字符编码
25 public static final String CHARSET_UTF_8 = "utf-8";
26
27 // HTTP内容类型。如果未指定ContentType,默认为TEXT/HTML
28 public static final String CONTENT_TYPE_TEXT_HTML = "text/xml";
29
30 // HTTP内容类型。相当于form表单的形式,提交暑假
31 public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded";
32
33 // 请求超时时间
34 public static final int SEND_REQUEST_TIME_OUT = 50000;
35
36 // 将读超时时间
37 public static final int READ_TIME_OUT = 50000;
38
39 /**
40 *
41 * @param requestType
42 *请求类型
43 * @param urlStr
44 *请求地址
45 * @param body
46 *请求发送内容
47 * @return 返回内容
48 */
49 public static String requestMethod(String requestType, String urlStr, String body) {
50
51 // 是否有http正文提交
52 boolean isDoInput = false;
53 if (body != null && body.length() > 0)
54isDoInput = true;
55 OutputStream outputStream = null;
56 OutputStreamWriter outputStreamWriter = null;
57 InputStream inputStream = null;
58 InputStreamReader inputStreamReader = null;
59 BufferedReader reader = null;
60 StringBuffer resultBuffer = new StringBuffer();
61 String tempLine = null;
62 try {
63// 统一资源
64URL url = new URL(urlStr);
65// 连接类的父类,抽象类
66URLConnection urlConnection = url.openConnection();
67// http的连接类
68HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
69
70// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
71// http正文内,因此需要设为true, 默认情况下是false;
72if (isDoInput) {
73 httpURLConnection.setDoOutput(true);
74 httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length()));
75}
76// 设置是否从httpUrlConnection读入,默认情况下是true;
77httpURLConnection.setDoInput(true);
78// 设置一个指定的超时值(以毫秒为单位)
79httpURLConnection.setConnectTimeout(SEND_REQUEST_TIME_OUT);
80// 将读超时设置为指定的超时,以毫秒为单位。
81httpURLConnection.setReadTimeout(READ_TIME_OUT);
82// Post 请求不能使用缓存
83httpURLConnection.setUseCaches(false);
84// 设置字符编码
85httpURLConnection.setRequestProperty("Accept-Charset", CHARSET_UTF_8);
86// 设置内容类型
87httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE_FORM_URL);
88// 设定请求的方法,默认是GET
89httpURLConnection.setRequestMethod(requestType);
90
91// 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
92// 如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。
93httpURLConnection.connect();
94
95if (isDoInput) {
96 outputStream = httpURLConnection.getOutputStream();
97 outputStreamWriter = new OutputStreamWriter(outputStream);
98 outputStreamWriter.write(body);
99 outputStreamWriter.flush();// 刷新
100}
101if (httpURLConnection.getResponseCode() >= 300) {
102 throw new Exception(
103 "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
104}
105
106if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
107 inputStream = httpURLConnection.getInputStream();
108 inputStreamReader = new InputStreamReader(inputStream);
109 reader = new BufferedReader(inputStreamReader);
110
111 while ((tempLine = reader.readLine()) != null) {
112resultBuffer.append(tempLine);
113resultBuffer.append("\n");
114 }
115}
116
117 } catch (MalformedURLException e) {
118// TODO Auto-generated catch block
119e.printStackTrace();
120 } catch (IOException e) {
121// TODO Auto-generated catch block
122e.printStackTrace();
123 } catch (Exception e) {
124// TODO Auto-generated catch block
125e.printStackTrace();
126 } finally {// 关闭流
127
128try {
129 if (outputStreamWriter != null) {
130outputStreamWriter.close();
131 }
132} catch (Exception e) {
133 // TODO Auto-generated catch block
134 e.printStackTrace();
135}
136try {
137 if (outputStream != null) {
138outputStream.close();
139 }
140} catch (Exception e) {
141 // TODO Auto-generated catch block
142 e.printStackTrace();
143}
144try {
145 if (reader != null) {
146reader.close();
147 }
148} catch (Exception e) {
149 // TODO Auto-generated catch block
150 e.printStackTrace();
151}
152try {
153 if (inputStreamReader != null) {
154inputStreamReader.close();
155 }
156} catch (Exception e) {
157 // TODO Auto-generated catch block
158 e.printStackTrace();
159}
160try {
161 if (inputStream != null) {
162inputStream.close();
163 }
164} catch (Exception e) {
165 // TODO Auto-generated catch block
166 e.printStackTrace();
167}
168 }
169 return resultBuffer.toString();
170 }
171
172 /**
173 * 将map集合的键值对转化成:key1=value1&key2=value2 的形式
174 *
175 * @param parameterMap
176 *需要转化的键值对集合
177 * @return 字符串
178 */
179 public static String convertStringParamter(Map parameterMap) {
180 StringBuffer parameterBuffer = new StringBuffer();
181 if (parameterMap != null) {
182Iterator iterator = parameterMap.keySet().iterator();
183String key = null;
184String value = null;
185while (iterator.hasNext()) {
186 key = (String) iterator.next();
187 if (parameterMap.get(key) != null) {
188value = (String) parameterMap.get(key);
189 } else {
190value = "";
191 }
192 parameterBuffer.append(key).append("=").append(value);
193 if (iterator.hasNext()) {
194parameterBuffer.append("&");
195 }
196}
197 }
198 return parameterBuffer.toString();
199 }
200
201 public static void main(String[] args) throws MalformedURLException {
202
203 System.out.println(requestMethod(HTTP_GET, "http://127.0.0.1:8080/test/TestHttpRequestServlet",
204 "username=123&password=我是谁"));
205
206 }
207 }
测试Servlet
1 package com.servlet;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 public class TestHttpRequestServelt extends HttpServlet {
11
12
13 @Override
14 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15
16 System.out.println("this is a TestHttpRequestServlet");
17 request.setCharacterEncoding("utf-8");
18
19 String username = request.getParameter("username");
20 String password = request.getParameter("password");
21
22 System.out.println(username);
23 System.out.println(password);
24
25 response.setContentType("text/plain; charset=UTF-8");
26 response.setCharacterEncoding("UTF-8");
27 response.getWriter().write("This is ok!");
28
29 }
30 }
web.xml配置
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 test
4
5
6 TestHttpRequestServlet
7 com.servlet.TestHttpRequestServelt
8
9
10
11 TestHttpRequestServlet
12 /TestHttpRequestServlet
13
14
15
16 index.html
17 index.htm
18 index.jsp
19 default.html
20 default.htm
21 default.jsp
22
23