分享
 
 
 

Introduction to CGI Variables

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

1. Introduction to CGI VariablesIf 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 VariablesAlthough 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 VariablesHere'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.javaYou 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有