Introduction to CGI Variables (转)

本文介绍了CGI变量的基本概念,并详细对比了CGI变量与Servlet中对应的变量,包括请求方式、内容类型、路径信息等关键信息。通过一个示例程序展示了如何在Servlet中获取这些CGI变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Introduction to CGI Variables (转)[@more@]

1. Introduction to CGI Variables

If you come to Java servlets from traditional CGI, you are probably used to the idea of "CGI Variables". These are a somewhat eclectic collection of information about the request. Some are derived from the HTTP request line and headers (e.g. the part of the URI that came after the question mark and typically contains the fo RM data, or the Content-Length header), some are derived from the socket itself (e.g. the name and ip address of the requesting host), and some are derived from server installation parameters (e.g. the map ping of URLs to actual paths).

2. Servlet Equivalent of Standard CGI Variables

Although it probably makes more sense to think of different sources of data (request data, server data, etc.) as distinct, experienced CGI programmers may find the following table useful. Assume that request is the HttpServletRequest supplied to the doGet and doPost methods.

CGI Variable Meaning Accessing it from doGet or doPost AUTH_TYPE If an Authorization header was supplied, this is the scheme specified (basic or digest) request.getAuthType() CONTENT_LENGTH For POST requests only, the number of bytes of data sent. Technically, the equivalent is String.valueOf(request.getContentLength()) (a String) but you'll probably want to just call request.getContentLength(), which returns an int. CONTENT_TYPE MIME type of attached data, if specified. request.getContentType() DOCUMENT_root Path to directory corresponding to http://host/ getServletContext().getRealPath("/") Note that this was request.getRealPath("/") in older servlet specifications. HTTP_XXX_YYY Access to arbitrary HTTP headers request.getHeader("Xxx-Yyy") PATH_INFO Path information attached to the URL. Since servlets, unlike standard CGI programs, can talk to the server, they don't need to treat this separately. Path info could be sent as part of the regular form data. request.getPathInfo() PATH_TRANSLATED The path information mapped to a real path on the server. Again, with servlets there is no need to have a special case for this. request.getPathTranslated() QUERY_STRING For GET requests, this is the attached data as one big string, with values still URL-encoded. You rarely want the raw data in servlets; instead use request.getParameter to access individual parameters. request.getQueryString() REMOTE_ADDR The IP address of the client that made the request, as a String. E.g. "192.9.48.9". request.getRemoteAddr() REMOTE_HOST The fully qualified domain name (e.g. "java.sun.com") of the client that made the request. The IP address is returned if this cannot be deteRmined. request.getRemoteHost() REMOTE_USER If an Authorization header was supplied, the user part. request.getRemoteUser() REQUEST_METHOD The request type, which is usually GET or POST, but is occasionally HEAD, PUT, DELETE, OPTIONS, or TRACE. request.getMethod() SCRIPT_NAME Path to servlet. request.getServletPath() SERVER_NAME web server's name request.getServerName() SERVER_PORT Port server is listening on. Technically, the equivalent is String.valueOf(request.getServerPort()), which returns a String. You'll usually just want request.getServerPort(), which returns an int. SERVER_PROTOCOL Name and version used in the request line (e.g. HTTP/1.0 or HTTP/1.1). request.getProtocol() SERVER_SOFTWARE Identifying information about the Web server getServletContext().getServerInfo()

3. Example: Reading the CGI Variables

Here's a servlet that creates a table showing the values of all the CGI variables other than HTTP_XXX_YYY, which are just the HTTP request headers shown in the previous section.

3.1 ShowCGIVariables.java

You can also DOWNLOAD the source or try it on-line. Note: also uses ServletUtilities.java, shown earlier.

package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; /** Creates a table showing the values of all the CGI variables. *

* Part of tutorial on servlets and JSP that appears at * http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/ * 1999 Marty Hall; may be freely used or adapted. */ 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: Showing CGI Variables"; out.println(ServletUtilities.headWithTitle(title) + "

n" + "

" + title + "

n" + "
CGI Variable NameValue"); for(int i=0; i" + varName + "" + varValue); } out.println("

转载于:http://blog.itpub.net/10752043/viewspace-989839/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值