位置:首頁 > Java技術 > JSP教學 > JSP服務器響應(Response)

JSP服務器響應(Response)

當Web服務器響應一個HTTP請求到瀏覽器中,反應通常由一個狀態行,一些響應頭,一個空行,這個文件。一個典型的反應看起來像這樣:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

狀態行包含HTTP版本(HTTP/1.1中的例子),一個狀態碼(200中的例子),以及相應的狀態碼(確定在本例中),在很短的消息。

以下是回到瀏覽器從Web服務器端,你會使用它們非常頻繁在網絡編程中最有用的HTTP1.1響應頭的摘要:

Header 描述
Allow This header specifies the request methods (GET, POST, etc.) that the server supports.
Cache-Control This header specifies the circumstances in which the response document can safely be cached. It can have values public, private orno-cache etc. Public means document is cacheable, Private means document is for a single user and can only be stored in private (nonshared) caches and no-cache means document should never be cached.
Connection This header instructs the browser whether to use persistent in HTTP connections or not. A value of close instructs the browser not to use persistent HTTP connections and keep-alive means using persistent connections.
Content-Disposition This header lets you request that the browser ask the user to save the response to disk in a file of the given name.
Content-Encoding This header specifies the way in which the page was encoded during transmission.
Content-Language This header signifies the language in which the document is written. For example en, en-us, ru, etc.
Content-Length This header indicates the number of bytes in the response. This information is needed only if the browser is using a persistent (keep-alive) HTTP connection.
Content-Type This header gives the MIME (Multipurpose Internet Mail Extension) type of the response document.
Expires This header specifies the time at which the content should be considered out-of-date and thus no longer be cached.
Last-Modified This header indicates when the document was last changed. The client can then cache the document and supply a date by an If-Modified-Since request header in later requests.
Location This header should be included with all responses that have a status code in the 300s. This notifies the browser of the document address. The browser automatically reconnects to this location and retrieves the new document.
Refresh This header specifies how soon the browser should ask for an updated page. You can specify time in number of seconds after which a page would be refreshed.
Retry-After This header can be used in conjunction with a 503 (Service Unavailable) response to tell the client how soon it can repeat its request.
Set-Cookie This header specifies a cookie associated with the page.

HttpServletResponse 對象:

響應對象是javax.servlet.http.HttpServletRequest對象的一個實例。正如服務器創建的請求對象,它還會創建一個對象來表示響應給客戶端。

響應對象還定義了處理創造新的HTTP標頭的接口。通過這個對象的JSP程序員可以添加新的Cookie或日期標記,HTTP狀態代碼等。

有以下方法可用於設置HTTP響應報頭中的Servlet程序。這些方法可與HttpServletResponse對象表示服務器響應。

S.N. 方法 & 描述
1 String encodeRedirectURL(String url)
Encodes the specified URL for use in the sendRedirect method or, if encoding is not needed, returns the URL unchanged.
2 String encodeURL(String url)
Encodes the specified URL by including the session ID in it, or, if encoding is not needed, returns the URL unchanged.
3 boolean containsHeader(String name)
Returns a boolean indicating whether the named response header has already been set.
4 boolean isCommitted()
Returns a boolean indicating if the response has been committed.
5 void addCookie(Cookie cookie)
Adds the specified cookie to the response.
6 void addDateHeader(String name, long date)
Adds a response header with the given name and date-value.
7 void addHeader(String name, String value)
Adds a response header with the given name and value.
8 void addIntHeader(String name, int value)
Adds a response header with the given name and integer value.
9 void flushBuffer()
Forces any content in the buffer to be written to the client.
10 void reset()
Clears any data that exists in the buffer as well as the status code and headers.
11 void resetBuffer()
Clears the content of the underlying buffer in the response without clearing headers or status code.
12 void sendError(int sc)
Sends an error response to the client using the specified status code and clearing the buffer.
13 void sendError(int sc, String msg)
Sends an error response to the client using the specified status.
14 void sendRedirect(String location)
Sends a temporary redirect response to the client using the specified redirect location URL.
15 void setBufferSize(int size)
Sets the preferred buffer size for the body of the response.
16 void setCharacterEncoding(String charset)
Sets the character encoding (MIME charset) of the response being sent to the client, for example, to UTF-8.
17 void setContentLength(int len)
Sets the length of the content body in the response In HTTP servlets, this method sets the HTTP Content-Length header.
18 void setContentType(String type)
Sets the content type of the response being sent to the client, if the response has not been committed yet.
19 void setDateHeader(String name, long date)
Sets a response header with the given name and date-value.
20 void setHeader(String name, String value)
Sets a response header with the given name and value.
21 void setIntHeader(String name, int value)
Sets a response header with the given name and integer value.
22 void setLocale(Locale loc)
Sets the locale of the response, if the response has not been committed yet.
23 void setStatus(int sc)
Sets the status code for this response.

HTTP Header Response 實例:

下麵的例子將使用setIntHeader()方法來設置刷新頭,模擬數字時鐘:

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
   // Set refresh, autoload time as 5 seconds
   response.setIntHeader("Refresh", 5);
   // Get current time
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("Current Time is: " + CT + "
");
%>
</center>
</body>
</html>

現在把上麵的代碼在main.jsp,並嘗試訪問它。每5秒後得出這樣會顯示當前係統時間。隻要運行JSP和等待,看看結果:

Auto Refresh Header 例子

Current Time is: 9:44:50 PM

也可以其他方法可以嘗試更上麵列出的方法以同樣的方式。