Introduction to CGI Variables

原创 2001年05月30日 22:47:00

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 form 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 mapping 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) + "<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); } }

3.2 ShowCGIVariables Output

ShowCGIVariables: Output


转到nginx,用上php-cgi了

nginx用来做fcgi服务器配置倒是非常方便。一个多月前曾用过lighttpd,但由于不大稳定,一直想换到nginx。nginx已经工作好几周都没有问题,于是准备将所有php开发的项目都转来。ngi...
  • snleo
  • snleo
  • 2009年09月18日 06:51
  • 5368

CGI Environment Variables

CGI Environment Variables CGI uses environment variables to send your program additional paramete...
  • darennet
  • darennet
  • 2014年12月04日 17:29
  • 475

CGI environment variables

Before running a CGI application or interpreter, Abyss Web Server sets its environment variables in ...
  • kingsliupengbo
  • kingsliupengbo
  • 2017年09月05日 13:32
  • 125

A Cgi print Environment Variables

#!c:/Perl/bin/Perl.exeuse CGI;$q = new CGI;print $q->header;foreach $var (sort(keys(%ENV))) { $va...
  • EricYeung
  • EricYeung
  • 2006年02月22日 22:04
  • 700

Setup Apache standard CGI variables

/* Setup the CGI variables if this is the main request */ if (r->main == NULL ||  /* .. or if the ...
  • zy531
  • zy531
  • 2015年06月16日 11:43
  • 281

abstract 和 introduction的写法

abstract 1. 大背景, 很重要 2.目前问题 3. 考虑到什么因素,提出算法, 解决问题,1-2句 4.pros and cons 5. 实验证明 introdu...
  • seamanj
  • seamanj
  • 2017年01月16日 20:04
  • 647

Reinforcement Learning:An Introduction 读书笔记- Chapter 1

Reinforcement Learning: An Introduction第一章
  • PeytonPu
  • PeytonPu
  • 2017年11月05日 17:18
  • 75

【读书笔记】《推荐系统(recommender systems An introduction)》第一章 引言

很久没上来写blog,前两个月赶上校招季节,都忙校招去了。 这本书我早就买来了,不过我从前看过项亮的《推荐系统实践》,看这本书的目录结构和项亮那本差不多,就一直放着没看。最近在做一个推荐系统...
  • xceman1997
  • xceman1997
  • 2014年12月02日 22:57
  • 1378

【读书笔记】《推荐系统(recommender systems An introduction)》第三章 基于内容的推荐

基于内容的推荐的基本推荐思路是:用户喜欢幻想小说,这本书是幻想小说,则用户有可能喜欢这本小说 两方面要求:(1)知道用户的喜好;(2)知道物品的属性 基于内容的推荐相比协同过滤方法(个人观...
  • xceman1997
  • xceman1997
  • 2014年12月07日 21:51
  • 1151

An Introduction to GCC

准备工作 注意:本文可能会让你失望,如果你有下列疑问的话:为什么要在终端输命令啊? GCC 是什么东西,怎么在菜单中找不到? GCC 不能有像 VC 那样的窗口吗?…… 那么你真正想要了解的可能...
  • zhangliangaws
  • zhangliangaws
  • 2014年02月23日 21:37
  • 1158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Introduction to CGI Variables
举报原因:
原因补充:

(最多只允许输入30个字)