直播中
2. Servlet和標(biāo)準(zhǔn)CGI變量之間的對(duì)應(yīng)關(guān)系
下面的表格中給出了Servlet和標(biāo)準(zhǔn)CGI變量之間的對(duì)應(yīng)關(guān)系,對(duì)以前使用CGI變量進(jìn)行編程的朋友會(huì)有很大的幫助。 在下表中我們假設(shè)request是HttpServletRequest類(lèi)型的對(duì)象。
CGI變量 含義 在 doGet 或 doPost 訪問(wèn)的辦法
AUTH_TYPE 如果在請(qǐng)求中有 Authorization header ,則這個(gè)變量將會(huì)被賦值 (basic 或 digest) request.getAuthType()
CONTENT_LENGTH 只有當(dāng)請(qǐng)求的方法是 POST 時(shí)這個(gè)變量才會(huì)有意義,它表示傳送的數(shù)據(jù)的字節(jié)數(shù)。 String.valueOf(request.getContentLength()) (返回String) 或者 request.getContentLength(),返回一個(gè)整數(shù)(int)。
CONTENT_TYPE 如果被賦值,就表示數(shù)據(jù)的MIME類(lèi)型。 request.getContentType()
DOCUMENT_ROOT 和網(wǎng)站根目錄對(duì)應(yīng)的實(shí)際路徑 getServletContext().getRealPath("/") 注意:在以前的Servlet標(biāo)準(zhǔn)中,這條語(yǔ)句是這樣寫(xiě)的request.getRealPath("/") 。
HTTP_XXX_YYY 訪問(wèn)任意的HTTP headers request.getHeader("Xxx-Yyy")
PATH_INFO URL 指向的路徑的信息。由于Servlet可以和服務(wù)器直接通訊,所以這個(gè)變量對(duì)Servlet沒(méi)什么作用。 request.getPathInfo()
PATH_TRANSLATED 在Server上被映射為web目錄的目錄的真實(shí)路徑的信息。和上一個(gè)變量一樣,對(duì)Servlet用處不大。 request.getPathTranslated()
QUERY_STRING 如果用 GET 方法發(fā)出請(qǐng)求(requests),這個(gè)變量中將會(huì)存放請(qǐng)求的數(shù)據(jù),其 形式為經(jīng)過(guò)URL編碼的一個(gè)大字符串。在servlet中,你很少會(huì)用到這個(gè)原始的字符串。而是 用 request.getParameter 方法來(lái)訪問(wèn)某個(gè)特定的請(qǐng)求數(shù)據(jù)。 request.getQueryString()
REMOTE_ADDR 客戶端的IP地址,是String類(lèi)型的。其形式類(lèi)似于 "192.9.48.9"。 request.getRemoteAddr()
REMOTE_HOST 發(fā)出請(qǐng)求的客戶端的域名(例如. "java.sun.com") 如果不能檢測(cè)到域名,就用客戶端的IP地址代替。 request.getRemoteHost()
REMOTE_USER 如果 Authorization header 被賦值,則這個(gè)變量中放有用戶名。 request.getRemoteUser()
REQUEST_METHOD 請(qǐng)求的類(lèi)型。通常為 GET 或 POST,但也可能是 HEAD, PUT, DELETE, OPTIONS, 或者 TRACE。 request.getMethod()
SCRIPT_NAME srvlet的路徑 request.getServletPath()
SERVER_NAME 服務(wù)器的名稱(chēng) request.getServerName()
SERVER_PORT 服務(wù)器的端口 String.valueOf(request.getServerPort())(返回String類(lèi)型) request.getServerPort()(返回int類(lèi)型)
SERVER_PROTOCOL 在請(qǐng)求命令行中用的協(xié)議的版本號(hào)。(例如. HTTP/1.0 或 HTTP/1.1)。 request.getProtocol()
SERVER_SOFTWARE 所用 Web Server 軟件的名稱(chēng) getServletContext().getServerInfo()
3. 例子:讀取CGI變量。
下面是一個(gè)顯示除去 HTTP_XXX_YYY 外所有CGI變量的的servlet。他顯示了在上面的表格中列出的所有CGI變量的值。
3.1 ShowCGIVariables.java
Download Here
//! ####### Start ShowCGIVariables.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ShowCGIVariables extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String[][] variables =
{ { "AUTH_TYPE", request.getAuthType() },
{ "CONTENT_LENGTH", String.valueOf(request.getContentLength()) },
{ "CONTENT_TYPE", request.getContentType() },
{ "DOCUMENT_ROOT", getServletContext().getRealPath("/") },
{ "PATH_INFO", request.getPathInfo() },
{ "PATH_TRANSLATED", request.getPathTranslated() },
{ "QUERY_STRING", request.getQueryString() },
{ "REMOTE_ADDR", request.getRemoteAddr() },
{ "REMOTE_HOST", request.getRemoteHost() },
{ "REMOTE_USER", request.getRemoteUser() },
{ "REQUEST_METHOD", request.getMethod() },
{ "SCRIPT_NAME", request.getServletPath() },
{ "SERVER_NAME", request.getServerName() },
{ "SERVER_PORT", String.valueOf(request.getServerPort()) },
{ "SERVER_PROTOCOL", request.getProtocol() },
{ "SERVER_SOFTWARE", getServletContext().getServerInfo() }
};
String title = "Servlet Example: 顯示CGI變量";
out.println("<HTML><HEAD><TITLE>"+title +"</TITLE></HEAD>"+
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>CGI Variable Name<TH>Value");
for(int i=0; i<variables.length; i++) {
String varName = variables[i][0];
String varValue = variables[i][1];
if (varValue == null)
varValue = "<I>沒(méi)有被賦值</I>";
out.println("<TR><TD>" + varName + "<TD>" + varValue);
}
out.println("</TABLE></BODY></HTML>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
//! ####### End ShowCGIVariables.java