一.客户端流程
两种方法:1.通过httpurlconnection 2.通过apache开源的httpclient
代码示例为 urlconnection方法:
StringBuilder responseBuilder = null;
BufferedReader reader = null;
BufferedWriter wr = null;
String post = "<?xml namespace=\"forsun.org\"?>hello";//我在没有post参数的情况下也打开了OutputStreamWriter造成的 server return http response code 500
URL url;
try {
url = new URL("http://localhost:8080/SimpleUploadService/");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setConnectTimeout(1000 * 5);
if(post != null && post.trim().length() > 0 ){
wr = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
wr.write(post);
wr.flush();
}
// Get the response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
responseBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
responseBuilder.append(line + "\n");
}
wr.close();
reader.close();
System.out.println(responseBuilder.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
二.服务器流程
服务器可以是两种服务:1.java servlet 2. webservice
代码示例为java servlet方法:
在javaweb工程中,新建一个servlet服务。
在dopost方法中接受客户端传来的参数
private void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException{
// TODO Auto-generated method stub
System.out.println("Access");
request.setCharacterEncoding("UTF-8");
//接受 request
BufferedReader br = request.getReader();
String line = br.readLine();
//接受完后 我想要保存文件到upload文件夹
//响应response
System.out.println("输出响应");
response.getWriter().print("message");
}
服务器返回了message的信息 。
在web.xml中配置servlet服务
<servlet><servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
三.请指点
我在调试服务器程序时候,客户端发送请求后,服务器在进入调试之前,控制台就输出了
System.out.println("Access");
System.out.println("输出响应");
输出的语句。调试进入后又再一次执行了,有没有人能告诉我这是为什么,也就是http请求和响应得原理是怎么一回事,能不能推荐一些讲解http请求响应的博客,论坛或者深入解析http协议的书籍。感谢