top
Loading...
訪問標準CGI變量
來源:LoveJSP.site
1. CGI變量簡介
如果你在以前使用過傳統的CGI,你應該對“CGI變量”的概念很熟悉。 由這些變量可以取得一些和請求(Request)有關的信息。其中一些來自于 HTTP 請求命令行(request line) 和headers (例如:在URI中問號后面的部分或者Content-Length header),一些來自于 Socket本身(例如:被請求主機的IP和名稱),還有一些來自于服務器的配置信息(例如:被映射為URL目錄的實際 路徑)。

2. Servlet和標準CGI變量之間的對應關系
下面的表格中給出了Servlet和標準CGI變量之間的對應關系,對以前使用CGI變量進行編程的朋友會有很大的幫助。 在下表中我們假設request是HttpServletRequest類型的對象。
CGI變量 含義 在 doGet 或 doPost 訪問的辦法
AUTH_TYPE 如果在請求中有 Authorization header ,則這個變量將會被賦值 (basic 或 digest) request.getAuthType()
CONTENT_LENGTH 只有當請求的方法是 POST 時這個變量才會有意義,它表示傳送的數據的字節數。 String.valueOf(request.getContentLength()) (返回String) 或者 request.getContentLength(),返回一個整數(int)。
CONTENT_TYPE 如果被賦值,就表示數據的MIME類型。 request.getContentType()
DOCUMENT_ROOT 和網站根目錄對應的實際路徑 getServletContext().getRealPath("/") 注意:在以前的Servlet標準中,這條語句是這樣寫的request.getRealPath("/") 。
HTTP_XXX_YYY 訪問任意的HTTP headers request.getHeader("Xxx-Yyy")
PATH_INFO URL 指向的路徑的信息。由于Servlet可以和服務器直接通訊,所以這個變量對Servlet沒什么作用。 request.getPathInfo()
PATH_TRANSLATED 在Server上被映射為web目錄的目錄的真實路徑的信息。和上一個變量一樣,對Servlet用處不大。 request.getPathTranslated()
QUERY_STRING 如果用 GET 方法發出請求(requests),這個變量中將會存放請求的數據,其 形式為經過URL編碼的一個大字符串。在servlet中,你很少會用到這個原始的字符串。而是 用 request.getParameter 方法來訪問某個特定的請求數據。 request.getQueryString()
REMOTE_ADDR 客戶端的IP地址,是String類型的。其形式類似于 "192.9.48.9"。 request.getRemoteAddr()
REMOTE_HOST 發出請求的客戶端的域名(例如. "java.sun.com") 如果不能檢測到域名,就用客戶端的IP地址代替。 request.getRemoteHost()
REMOTE_USER 如果 Authorization header 被賦值,則這個變量中放有用戶名。 request.getRemoteUser()
REQUEST_METHOD 請求的類型。通常為 GET 或 POST,但也可能是 HEAD, PUT, DELETE, OPTIONS, 或者 TRACE。 request.getMethod()
SCRIPT_NAME srvlet的路徑 request.getServletPath()
SERVER_NAME 服務器的名稱 request.getServerName()
SERVER_PORT 服務器的端口 String.valueOf(request.getServerPort())(返回String類型) request.getServerPort()(返回int類型)
SERVER_PROTOCOL 在請求命令行中用的協議的版本號。(例如. HTTP/1.0 或 HTTP/1.1)。 request.getProtocol()
SERVER_SOFTWARE 所用 Web Server 軟件的名稱 getServletContext().getServerInfo()


3. 例子:讀取CGI變量。
下面是一個顯示除去 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">" +
"<H1 ALIGN=CENTER>" + title + "</H1>" +
"<TABLE BORDER=1 ALIGN=CENTER>" +
"<TR BGCOLOR="#FFAD00">" +
"<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>沒有被賦值</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

北斗有巢氏 有巢氏北斗