Java Web要求與呼應實例詳解。本站提示廣大學習愛好者:(Java Web要求與呼應實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Web要求與呼應實例詳解正文
Servlet最重要感化就是處置客戶端要求並作出回應,為此,針對每次要求,Web容器在挪用service()之前都邑創立兩個對象,分離是HttpServletRequest和HttpServletResponse。個中HttpServletRequest封裝HTTP要求新聞,HttpServletResponse封裝HTTP呼應新聞。須要留意的是,Web辦事器運轉進程中,每一個Servlet都邑只創立一個實例對象,不外每次要求都邑挪用Servlet實例的service(ServletRequest req, ServletResponse res)辦法,這裡HttpServletRequest是ServletRequest的子類,HttpServletResponse是ServletResponse的子類。
HttpServletRequest和HttpServletResponse接口繼續關系圖以下所示:
1、HttpServletResponse
HttpServletResponse接口繼續自ServletResponse接口,因為HTTP呼應新聞分為狀況行、呼應新聞體、新聞體三部門,是以,在HttpServletResponse接口中界說了向客戶端發送呼應狀況碼、呼應新聞頭、呼應新聞體的辦法。固然HttpServletResponse接口中的辦法較多,然則我們經常使用的也就是那末幾個,假如用到其他的辦法了可以浏覽呼應的源碼或許相干材料就好了。
發送狀況碼相干函數
辦法 解釋 public void setStatus(int sc) 設置呼應新聞狀況碼,Web辦事器默許發生一個狀況碼為200的狀況行 public void sendError(int sc) 發送表現毛病信息的狀況碼,第二個辦法還增長了一個用於提醒解釋的文本信息 public void sendError(int sc, String msg)
發送呼應新聞頭相干函數
辦法 解釋 public void addHeader(String name, String value) 設置HTTP呼應頭字段,name指定字段稱號,value指定字段值。addHeader可以增長同名的呼應頭字段,setHeader則會籠罩同名的頭字段 public void setHeader(String name, String value) public void setContentLength(int len) 設置呼應新聞的實體內容的年夜小,單元為字節,即設置Content-Length字段的值 public void setContentType(String type) 設置Servlet輸入內容的MIME類型,即設置Content-Type字段的值 public void setCharacterEncoding(String charset) 設置輸入內容字符編碼,即設置Content-Type字段的值,留意,該辦法優先級比setContentType的高 public void sendRedirect(String location) Servlet要求重定向
發送呼應新聞體相干函數
辦法 解釋 public ServletOutputStream getOutputStream() 獲得HttpServletResponse的字節輸入流ServletOutputStram類型 public PrintWriter getWriter() 獲得HttpServletResponse的字符輸入流ServletWriter類型
中文輸入亂碼成績
盤算機中的數據都是以二進制情勢存儲的,是以,傳輸文本時,就會產生字符的字節之間的轉換。字符與字節之間的轉換時經由過程查碼表完成的,字符轉換為字節的進程稱為編碼,字節轉換為字符的進程稱為解碼,假如編碼息爭碼應用的碼表紛歧樣,則會湧現亂碼成績。
留意:HttpServletResponse對象的字符輸入流在編碼時,默許采取的是ISO 8859-1編碼,該編碼方法不兼容中文,好比會將"中國"編碼為"63 63"(在ISO 8959-1的碼表中查不到的字符會顯示63)。當閱讀器對吸收到的數據停止解碼時,會默許采取GB2312,將"63"解碼為"?",閱讀器就將"中國"兩個字符解碼為"??"。
HttpServletResponse法式示例
package zzz; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置呼應新聞編碼,正文後"中國"會顯示"??"亂碼 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("hello 中國"); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { this.doGet(request, response); } }
有時會碰到准時跳轉頁面的成績,HTTP中Refresh頭字段可以告訴閱讀器在指定的時光內主動刷新並跳轉到其他頁面,網頁准時刷新並跳轉到指定頁面。
package zzz; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置呼應新聞編碼 response.setContentType("text/html;charset=utf-8"); response.setHeader("Refresh", "2;url=http://www.百度.com"); PrintWriter out = response.getWriter(); out.println("hello 中國,2秒後跳轉到百度..."); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { this.doGet(request, response); } }
2、HttpServletRequest
HttpServletRequest接口繼續ServletRequest接口,專門用於封狀HTTP要求新聞。因為HTTP要求信息包含要求行、要求頭和要求體三部門,所以HttpServletRequest接口界說了獲得要求行、要求頭和要求體的相干辦法。
獲得要求行的相干辦法
辦法 解釋 public String getMethod() 獲得HTTP要求方法,POST、GET等 public String getRequestURI() 獲得要求行中資本稱號部門 public String getQueryString() 獲得要求行中的參數部門 public String getProtocol() 獲得要求行中協定稱號和版本,如HTTP 1.1 public String getContextPath() 獲得要求URL中屬於Web運用法式的途徑
其實關於要求行的辦法從辦法名中便可以看出其感化,這裡就紛歧一貼出來了。
獲得要求新聞頭的相干辦法
辦法 解釋 public String getHeader(String name) 獲得指定字段的值,假如沒有前往null,假如有多個前往第一個值 public Enumeration<String> getHeaders(String name) 前往一個指定字段的Enumeration聚集對象 public Enumeration<String> getHeaderNames() 前往一個包括一切字段的Enumeration聚集對象 public String getContentType() 獲得Content-Type字段的值
打印要求新聞頭字段的一切值
package zzz; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置呼應新聞編碼 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); Enumeration<String> names = request.getHeaderNames(); while (names.hasMoreElements()) { String name = names.nextElement(); String value = request.getHeader(name); out.println(name + ": " + value + "</br>"); } } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { this.doGet(request, response); } }
獲得要求體的相干辦法
辦法 解釋 public ServletInputStream getInputStream() 獲得要求的ServletInputStream對象,假如實體內容為非文本,只能經由過程getInputStream辦法獲得要求體新聞體 public BufferedReader getReader() 獲得要求的BufferedReader對象,該對象會將實體內容字節數據轉換為指定字符集編碼的文本字符串
獲得要求參數
辦法 解釋 public String getParameter(String name) 獲得指定的參數值,沒有該參數前往null public Enumeration<String> getParameterNames() 前往一個包括一切參數名的Enumeration對象 public String[] getParameterValues(String name) HTTP要求中能夠有多個雷同的參數,獲得統一個參數名對應的一切參數值
3、RequestDispatcher接口
當一個Web資本遭到客戶端要求後,假如願望辦事器告訴別的一個資本如處置要求,除應用功效sendRedirect()完成重定向外,還可以經由過程RequestDispatcher接口的實例對象來完成,在ServletRequest接口中界說了一個獲得RequestDispatcher對象的辦法--getRequestDispatcher(String path),它前往某個途徑所指定資本的RequestDispatcher對象,參數path必需以"/"開首,用於表現以後Web運用的根目次,也就是path途徑必需是在本Web法式中,不然會湧現異常。
RequestDispatcher接口中辦法
辦法 功效 public void forward(ServletRequest request, ServletResponse response) 將一個Servlet傳遞給別的一個Web資本,將要求傳遞給其他資本停止呼應 public void include(ServletRequest request, ServletResponse response) 用於將其他資本作為以後呼應內容包括出去
以上所述是小編給年夜家引見的Java Web要求與呼應實例詳解的相干內容,願望對年夜家有所贊助!