- Login
帳號:
密碼:
ASP MENU
線上教學
   ASP 教學
VB.NET 教學
JSP 教學
JAVA 教學
完整 ASP 教學
程式下載
   ASP 程式下載
提供 ASP 程式
程式量身訂做
   收費標準
填寫需求表
討論交流專區
   程式討論區
電腦資訊交流
工作機會
   社會人就職情報
汎亞人力銀行
大台中人力銀行
大高雄人力銀行
相關連結
   ASP 虛擬空間
ASP 相關網站
聯絡我們
   意見信箱
加入會員程式討論區線上購物回首頁
JSP 教學
六、訪問CGI變量
六、訪問CGI變量
作 者 : 仙人掌工作室


   6.1 CGI變量概述

   如果你是從傳統的CGI編程轉而學習Java Servlet,或許已經習慣了“CGI變量”這一概念。CGI變量匯集了各種有關請求的信息:

部分來自HTTP請求命令和請求頭,例如Content-Length頭;
部分來自Socket本身,例如主機的名字和IP地址;
也有部分與服務器安裝配置有關,例如URL到實際路徑的映射。
   6.2 標準CGI變量的Servlet等價表示

   下表假定request對象是提供給doGet和doPost方法的HttpServletRequest類型對象。 CGI變量 含義 從doGet或doPost訪問
AUTH_TYPE 如果提供了Authorization頭,這堳定了具體的模式(basic或者digest)。 request.getAuthType()
CONTENT_LENGTH 只用於POST請求,表示所發送數據的字節數。 嚴格地講,等價的表達方式應該是String.valueOf(request.getContentLength())(返回一個字符串)。但更常見的是用request.getContentLength()返回含義相同的整數。
CONTENT_TYPE 如果指定的話,表示後面所跟數據的類型。 request.getContentType()
DOCUMENT_ROOT 與http://host/對應的路徑。 getServletContext().getRealPath("/")
注意低版本Servlet規範中的等價表達方式是request.getRealPath("/")。

HTTP_XXX_YYY 訪問任意HTTP頭。 request.getHeader("Xxx-Yyy")
PATH_INFO URL中的附加路徑信息,即URL中Servlet路徑之後、查詢字符串之前的那部分。 request.getPathInfo()
PATH_TRANSLATED 映射到服務器實際路徑之後的路徑信息。 request.getPathTranslated()
QUERY_STRING 這是字符串形式的附加到URL後面的查詢字符串,數據仍舊是URL編碼的。在Servlet中很少需要用到未經解碼的數據,一般使用getParameter訪問各個參數。 request.getQueryString()
REMOTE_ADDR 發出請求的客戶機的IP地址。 request.getRemoteAddr()
REMOTE_HOST 發出請求的客戶機的完整的域名,如java.sun.com。如果不能確定該域名,則返回IP地址。 request.getRemoteHost()
REMOTE_USER 如果提供了Authorization頭,則代表其用戶部分。它代表發出請求的用戶的名字。 request.getRemoteUser()
REQUEST_METHOD 請求類型。通常是GET或者POST。但偶爾也會出現HEAD,PUT, DELETE,OPTIONS,或者 TRACE. request.getMethod()
SCRIPT_NAME URL中調用Servlet的那一部分,不包含附加路徑信息和查詢字符串。 request.getServletPath()
SERVER_NAME Web服務器名字。 request.getServerName()
SERVER_PORT 服務器監聽的端口。 嚴格地說,等價表達應該是返回字符串的String.valueOf(request.getServerPort())。但經常使用返回整數值的request.getServerPort()。
SERVER_PROTOCOL 請求命令中的協議名字和版本(即HTTP/1.0或HTTP/1.1)。 request.getProtocol()
SERVER_SOFTWARE Servlet引擎的名字和版本。 getServletContext().getServerInfo()


   6.3 實例:讀取CGI變量

   下面這個Servlet創建一個表格,顯示除了HTTP_XXX_YYY之外的所有CGI變量。HTTP_XXX_YYY是HTTP請求頭信息,請參見上一節介紹。

   ShowCGIVariables.java
package hall;

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 = "顯示CGI變量";
out.println(ServletUtilities.headWithTitle(title) +
"<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>Not specified</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);
}
}






頂端
本網頁最佳瀏覽模式為:瀏覽器 IE4.0 以上    解析度: 800 x 600
Copyright © 2000-2017 COOLASP All Rights Reserved