CGI Variables and Their Respective ColdFusion/Java Servlet Alternative Methods
Are you a ColdFusion developer? Have you ever wanted to get away from using CGI variables such as CGI.SCRIPT_NAME but didn't quite know what else to use? Then you might find the following list of CGI variables and their respective ColdFusion/Java Servlet Alternative methods to be helpful because I couldn't find much (if any) documentation on this:
| CGI Variable | ColdFusion / Java Servlet Alternative Method |
|---|---|
| CGI.AUTH_TYPE | getPageContext().getRequest().getAuthType() |
| CGI.CONTENT_LENGTH | getPageContext().getRequest().getContentLength() |
| CGI.CONTEXT_PATH | getPageContext().getRequest().getContextPath() |
| CGI.CONTENT_TYPE | getPageContext().getRequest().getContentType() |
| CGI.PATH_INFO | getPageContext().getRequest().getPathInfo() |
| CGI.PATH_TRANSLATED | getPageContext().getRequest().getPathTranslated() |
| CGI.QUERY_STRING | getPageContext().getRequest().getQueryString() |
| CGI.REMOTE_ADDR | getPageContext().getRequest().getRemoteAddr() |
| CGI.REMOTE_HOST | getPageContext().getRequest().getRemoteHost() |
| CGI.REMOTE_USER | getPageContext().getRequest().getRemoteUser() |
| CGI.REQUEST_METHOD | getPageContext().getRequest().getMethod() |
| CGI.SCRIPT_NAME | getPageContext().getRequest().getServletPath() |
| CGI.SERVER_NAME | getPageContext().getRequest().getServerName() |
| CGI.SERVER_PORT | getPageContext().getRequest().getServerPort() |
| CGI.SERVER_PORT_SECURE | getPageContext().getRequest().isSecure() |
| CGI.SERVER_PROTOCOL | getPageContext().getRequest().getProtocol() |
| CGI.SERVER_SOFTWARE | getPageContext().getRequest().getHeader("Server-Software") |
| CGI.HTTP_ACCEPT | getPageContext().getRequest().getHeader("Accept") |
| CGI.HTTP_ACCEPT_CHARSET | getPageContext().getRequest().getHeader("Accept-Charset") |
| CGI.HTTP_ACCEPT_ENCODING | getPageContext().getRequest().getHeader("Accept-Encoding") |
| CGI.HTTP_ACCEPT_LANGUAGE | getPageContext().getRequest().getHeader("Accept-Language") |
| CGI.HTTP_CONNECTION | getPageContext().getRequest().getHeader("Connection") |
| CGI.HTTP_COOKIE | getPageContext().getRequest().getHeader("Cookie") |
| CGI.HTTP_HOST | getPageContext().getRequest().getHeader("Host") |
| CGI.HTTP_REFERER | getPageContext().getRequest().getHeader("Referer") |
| CGI.HTTP_USER_AGENT | getPageContext().getRequest().getHeader("User-Agent") |
| Other Useful Java Servlets | |
| Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters. | getPageContext().getRequest().getRequestURL() |
| The URL string corresponding to the current client request. The string returned does not include the server name or query arguments. | getPageContext().getRequest().getRequestURI() |
| Returns the name of the scheme used to make this request (http, https, or ftp) | getPageContext().getRequest().getScheme() |
Here's some code you can use to copy and paste to your .cfm file for testing:
<cfoutput>
<table border="1">
<tr>
<th>CGI Variable</th>
<th>Displays</th>
<th>ColdFusion / Java Servlet Alternative Method</th>
<th>Displays</th>
</tr>
<tr>
<td>CGI.AUTH_TYPE</td>
<td>#CGI.AUTH_TYPE#</td>
<td>getPageContext().getRequest().getAuthType()</td>
<td>#getPageContext().getRequest().getAuthType()#</td>
</tr>
<tr>
<td>CGI.CONTENT_LENGTH</td>
<td>#CGI.CONTENT_LENGTH#</td>
<td>getPageContext().getRequest().getContentLength()</td>
<td>#getPageContext().getRequest().getContentLength()#</td>
</tr>
<tr>
<td>CGI.CONTEXT_PATH</td>
<td>#CGI.CONTEXT_PATH#</td>
<td>getPageContext().getRequest().getContextPath()</td>
<td>#getPageContext().getRequest().getContextPath()#</td>
</tr>
<tr>
<td>CGI.CONTENT_TYPE</td>
<td>#CGI.CONTENT_TYPE#</td>
<td>getPageContext().getRequest().getContentType()</td>
<td>#getPageContext().getRequest().getContentType()#</td>
</tr>
<tr>
<td>CGI.PATH_INFO</td>
<td>#CGI.PATH_INFO#</td>
<td>getPageContext().getRequest().getPathInfo()</td>
<td>#getPageContext().getRequest().getPathInfo()#</td>
</tr>
<tr>
<td>CGI.PATH_TRANSLATED</td>
<td>#CGI.PATH_TRANSLATED#</td>
<td>getPageContext().getRequest().getPathTranslated() </td>
<td>#getPageContext().getRequest().getPathTranslated()#</td>
</tr>
<tr>
<td>CGI.QUERY_STRING</td>
<td>#CGI.QUERY_STRING#</td>
<td>getPageContext().getRequest().getQueryString()</td>
<td>#getPageContext().getRequest().getQueryString()#</td>
</tr>
<tr>
<td>CGI.REMOTE_ADDR</td>
<td>#CGI.REMOTE_ADDR#</td>
<td>getPageContext().getRequest().getRemoteAddr()</td>
<td>#getPageContext().getRequest().getRemoteAddr()#</td>
</tr>
<tr>
<td>CGI.REMOTE_HOST</td>
<td>#CGI.REMOTE_HOST#</td>
<td>getPageContext().getRequest().getRemoteHost()</td>
<td>#getPageContext().getRequest().getRemoteHost()#</td>
</tr>
<tr>
<td>CGI.REMOTE_USER</td>
<td>#CGI.REMOTE_USER#</td>
<td>getPageContext().getRequest().getRemoteUser()</td>
<td>#getPageContext().getRequest().getRemoteUser()#</td>
</tr>
<tr>
<td>CGI.REQUEST_METHOD</td>
<td>#CGI.REQUEST_METHOD#</td>
<td>getPageContext().getRequest().getMethod()</td>
<td>#getPageContext().getRequest().getMethod()#</td>
</tr>
<tr>
<td>CGI.SCRIPT_NAME</td>
<td>#CGI.SCRIPT_NAME#</td>
<td>getPageContext().getRequest().getServletPath()</td>
<td>#getPageContext().getRequest().getServletPath()#</td>
</tr>
<tr>
<td>CGI.SERVER_NAME</td>
<td>#CGI.SERVER_NAME#</td>
<td>getPageContext().getRequest().getServerName()</td>
<td>#getPageContext().getRequest().getServerName()#</td>
</tr>
<tr>
<td>CGI.SERVER_PORT</td>
<td>#CGI.SERVER_PORT#</td>
<td>getPageContext().getRequest().getServerPort()</td>
<td>#getPageContext().getRequest().getServerPort()#</td>
</tr>
<tr>
<td>CGI.SERVER_PORT_SECURE</td>
<td>#CGI.SERVER_PORT_SECURE#</td>
<td>getPageContext().getRequest().isSecure()</td>
<td>#getPageContext().getRequest().isSecure()#</td>
</tr>
<tr>
<td>CGI.SERVER_PROTOCOL</td>
<td>#CGI.SERVER_PROTOCOL#</td>
<td>getPageContext().getRequest().getProtocol()</td>
<td>#getPageContext().getRequest().getProtocol()#</td>
</tr>
<tr>
<td>CGI.SERVER_SOFTWARE</td>
<td>#CGI.SERVER_SOFTWARE#</td>
<td>getPageContext().getRequest().getHeader("Server-Software")</td>
<td>#getPageContext().getRequest().getHeader("Server-Software")#</td>
</tr>
<tr>
<td>CGI.HTTP_ACCEPT</td>
<td>#CGI.HTTP_ACCEPT#</td>
<td>getPageContext().getRequest().getHeader("Accept")</td>
<td>#getPageContext().getRequest().getHeader("Accept")#</td>
</tr>
<tr>
<td>CGI.HTTP_ACCEPT_CHARSET</td>
<td>#CGI.HTTP_ACCEPT_CHARSET#</td>
<td>getPageContext().getRequest().getHeader("Accept-Charset")</td>
<td>#getPageContext().getRequest().getHeader("Accept-Charset")#</td>
</tr>
<tr>
<td>CGI.HTTP_ACCEPT_ENCODING</td>
<td>#CGI.HTTP_ACCEPT_ENCODING#</td>
<td>getPageContext().getRequest().getHeader("Accept-Encoding")</td>
<td>#getPageContext().getRequest().getHeader("Accept-Encoding")#</td>
</tr>
<tr>
<td>CGI.HTTP_ACCEPT_LANGUAGE</td>
<td>#CGI.HTTP_ACCEPT_LANGUAGE#</td>
<td>getPageContext().getRequest().getHeader("Accept-Language")</td>
<td>#getPageContext().getRequest().getHeader("Accept-Language")#</td>
</tr>
<tr>
<td>CGI.HTTP_CONNECTION</td>
<td>#CGI.HTTP_CONNECTION#</td>
<td>getPageContext().getRequest().getHeader("Connection")</td>
<td>#getPageContext().getRequest().getHeader("Connection")#</td>
</tr>
<tr>
<td>CGI.HTTP_COOKIE</td>
<td>#CGI.HTTP_COOKIE#</td>
<td>getPageContext().getRequest().getHeader("Cookie")</td>
<td>#getPageContext().getRequest().getHeader("Cookie")#</td>
</tr>
<tr>
<td>CGI.HTTP_HOST</td>
<td>#CGI.HTTP_HOST#</td>
<td>getPageContext().getRequest().getHeader("Host")</td>
<td>#getPageContext().getRequest().getHeader("Host")#</td>
</tr>
<tr>
<td>CGI.HTTP_REFERER</td>
<td>#CGI.HTTP_REFERER#</td>
<td>getPageContext().getRequest().getHeader("Referer")</td>
<td>#getPageContext().getRequest().getHeader("Referer")#</td>
</tr>
<tr>
<td>CGI.HTTP_USER_AGENT</td>
<td>#CGI.HTTP_USER_AGENT#</td>
<td>getPageContext().getRequest().getHeader("User-Agent")</td>
<td>#getPageContext().getRequest().getHeader("User-Agent")#</td>
</tr>
<tr>
<td colspan="4"> </td>
</tr>
<tr>
<td><em><strong>Other Useful Java Servlets</strong></em></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port number, and server path, but it <em>does not include</em> query string parameters. </td>
<td> </td>
<td>getPageContext().getRequest().getRequestURL()</td>
<td>#getPageContext().getRequest().getRequestURL()#</td>
</tr>
<tr>
<td>The URL string corresponding to the current client request. The string returned does not include the server name or query arguments.</td>
<td> </td>
<td>getPageContext().getRequest().getRequestURI()</td>
<td>#getPageContext().getRequest().getRequestURI()#</td>
</tr>
<tr>
<td>Returns the name of the scheme used to make this request (http, https, or ftp)</td>
<td> </td>
<td>getPageContext().getRequest().getScheme()</td>
<td>#getPageContext().getRequest().getScheme()#</td>
</tr>
</table>
</cfoutput>
Obviously, you should test these on your server before using them in production. Some of the methods may or may not be available. For example, I get empty strings using getPathInfo() and getPathTranslated(). You might want to try something like the following to see what methods are available on your server:
<cfset availMethods = GetPageContext().getRequest() />
<cfdump var="#availMethods#" />
Here's some more interesting information. Let's say you've defined some variables in a 'globalvariables.cfm' file and included them in your Application.cfc template, such as:
<cfset REQUEST.RootDirectory = expandpath('/') />
<cfset REQUEST.CurrentDirectory = GetDirectoryFromPath(GetTemplatePath()) />
<cfset REQUEST.CurrentPage = GetFileFromPath(GetBaseTemplatePath()) />
If you run the following code, you should see what you also expected to see by simply using <cfoutput>#REQUEST.RootDirectory#</cfoutput> or <cfoutput>#REQUEST.CurrentDirectory#</cfoutput>.
<cfoutput>
#getPageContext().getRequest().RootDirectory#<br />
#getPageContext().getRequest().CurrentDirectory#<br />
#getPageContext().getRequest().CurrentPage#
</cfoutput>
Just for fun, try this too:
<cfset dirlist = getPageContext().getRequest().CurrentDirectory />
<ul>
<cfloop list="#dirlist#" delimiters="\" index="i">
<cfoutput><li>#i#</li></cfoutput>
</cfloop>
</ul>
For more information on the Java HttpServletRequest: http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/http/HttpServletRequest.html
For more informaiton on HTTP Header Field Definitions, see: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
If you catch a typo or have some other insight, please feel free to add to this.


