HttpRequestServlet.java
說明:
用於接受所有http形式的請求,並把接受到的request中param及getInputStream全打印出來.
package king.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.util.Date; import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 用於接受所有http形式的請求,並把接受到的request中param及getInputStream全打印出來 * @author King * */ public class HttpRequestServlet extends HttpServlet{ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) { try { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); System.err.println("我是服務器,通過request.getParameter()獲取的參數:"); StringBuilder paramSB = new StringBuilder(); Enumeration<?> paramNames=request.getParameterNames(); while(paramNames.hasMoreElements()){ String name=(String)paramNames.nextElement(); String valueNotDecode=request.getParameter(name); String valueDecode=new String(valueNotDecode.getBytes("UTF-8"),"UTF-8"); paramSB.append(name + "==" + valueDecode+"\n"); } System.out.println("我是服務器,通過param讀取的參數如下:\n"+paramSB.toString()); PrintWriter writer = response.getWriter(); writer.write("通過param讀取的參數如下:\n"+paramSB.toString()); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) { try { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 如果"您的文本內容" 用UTF-8編碼后,再以conn.setRequestProperty("content-type", "text/xml;charset=iso-8859-1");發送到本服務端,那么需要對參數內容進行如下解碼 // String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"UTF-8"); // System.out.println("name : "+ name); System.err.println("我是服務器,通過request.getParameter()獲取的參數:"); StringBuilder paramSB = new StringBuilder(); Enumeration<?> paramNames=request.getParameterNames(); while(paramNames.hasMoreElements()){ String name=(String)paramNames.nextElement(); String valueNotDecode=request.getParameter(name); String valueDecode=new String(valueNotDecode.getBytes("iso-8859-1"),"UTF-8"); System.out.println(name + "==" + valueDecode); paramSB.append(name + "==" + valueDecode+"\n"); } //使用apache的httpcomponents 的post請求時:formparams.add(new BasicNameValuePair("key","value")); 也只能從這里獲取到! BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8")); String line = null; StringBuilder streamSB = new StringBuilder(); while ((line = br.readLine()) != null) { streamSB.append(line); } String decode = URLDecoder.decode(streamSB.toString(), "UTF-8"); System.out.println("我是服務器,通過request.getInputStream()讀取的參數:\n" + decode); response.setCharacterEncoding("UTF-8");//第一優先級高於第二優先級,只能用來設置out輸出流中所采用的編碼 // response.setContentType("text/html;charset=UTF-8");//第二優先級,不僅能用來設置out輸出流中所采用的編碼,也可以設置瀏覽器接收到這些字符后以什么編碼方式來解碼 PrintWriter writer = response.getWriter(); writer.write("通過param讀取的參數如下:\n"+paramSB.toString()); writer.write("通過stream讀取的參數如下:\n"+decode); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 客戶端通過conn.setRequestProperty(key,value), * 即可在服務端通過request.getHeader(key)獲取到對應的head協議頭值 * @param request * @param response * @throws Exception */ public void tip(HttpServletRequest request, HttpServletResponse response) throws Exception{ //在客戶端用 HttpURLConnection conn = (HttpURLConnection) new URL("http://localhost:8080/httpserver").openConnection(); conn.setRequestProperty("Accept", "application/soap+xml, application/dime, multipart/related, text/*"); //就能在本服務端用 request.getHeader("Accept");//獲取到Head協議頭中的值. } }
