qq空间访问|六、访问CGI变量

更新时间:2019-09-10 来源:编程 点击:

【www.hzclsc.cn--编程】

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);

 }

}




本文来源:http://www.hzclsc.cn/ruanjianzixun/27360.html

为您推荐

制作电音的软件|电音创作软件KORG将于明年登录Switch

如果你经常关注我们对任天堂Switch的报道,你可能还记得有家公司正在为Switch制作学习编程的软件,接下来要告诉各位,Switch不单可以用来编程,而且还可以作曲!日本知名的电子音乐作曲工作站软件游戏资讯

2020-12-05 17:04:48   做电音的软件   电音软件手机版  

【支付宝小程序在哪里找】支付宝小程序开发者公测地址 支付宝小程序申请公测网址

支付宝小程序目前已经开始公测了,为大家带来支付宝小程序开发者公测地址,支付宝小程序是手机应用嵌入支付宝客户端的一种方法,下面是支付宝小程序申请公测网址! 支付宝小程序开发者公测地址 特色能力开发服务成编程开发

2020-11-22 11:04:37   支付宝小程序怎么建立   支付宝小程序怎么开发  

[c罗]c++ vector用法详解 c++ vector用法总结

c++ vector是在c++中开发过程中c++ vector作为一个十分有用的容器,许多朋友还不是很清楚c++ vector用法,不知道c++ vector到底有什么优秀的用法,不用着急一起来看看编程开发

2020-11-22 11:04:37   pcba   c盘满了怎么清理  

【eclipse如何导出项目】eclipse怎么导出项目 eclipse导出项目教程

eclipse作为用户量十分大的编程开发软件,有许多新手用户朋友或者刚开始接触这款软件的朋友经常会出现在使用eclipse的时候不知道该怎么导出已经读取到软件中的项目,其实很简单,一起来看看ecli教你一招

2020-11-10 07:04:06   eclipse怎么导入项目   eclipse怎么打开项目  

jdk环境变量配置win10|JDK环境变量配置WIN7 WIN7JDK环境变量配置教程

JDK怎么进行环境变量配置一直是困扰着许多入门编程员的问题,许多用户朋友们如果重新换了一台设备,很容易出现不知道怎么进行环境配置的情况,不用担心,小编为大家带来了详细的在WIN7系统下如果进行JDK教你一招

2020-11-07 11:05:38   jdk安装与环境变量配置   安装jdk并配置环境变量