动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   Cgi/Perl → 阅读文章

 访问标准CGI变量

作者来源: 
阅读 数 354 人次 , 2006-3-29 4:02:00 


1. cgi变量简介
如果你在以前使用过传统的cgi,你应该对“cgi变量”的概念很熟悉。 由这些变量可以取得一些和请求(request)有关的信息。其中一些来自于 http 请求命令行(request line) 和headers (例如:在uri中问号后面的部分或者content-length header),一些来自于 socket本身(例如:被请求主机的ip和名称),还有一些来自于服务器的配置信息(例如:被映射为url目录的实际 路径)。

2. servlet和标准cgi变量之间的对应关系
下面的表格中给出了servlet和标准cgi变量之间的对应关系,对以前使用cgi变量进行编程的朋友会有很大的帮助。 在下表中我们假设request是httpservletrequest类型的对象。
cgi变量 含义 在 doget 或 dopost 访问的办法
auth_type 如果在请求中有 authorization header ,则这个变量将会被赋值 (basic 或 digest) request.getauthtype()
content_length 只有当请求的方法是 post 时这个变量才会有意义,它表示传送的数据的字节数。 string.valueof(request.getcontentlength()) (返回string) 或者 request.getcontentlength(),返回一个整数(int)。
content_type 如果被赋值,就表示数据的mime类型。 request.getcontenttype()
document_root 和网站根目录对应的实际路径 getservletcontext().getrealpath("/") 注意:在以前的servlet标准中,这条语句是这样写的request.getrealpath("/") 。
http_xxx_yyy 访问任意的http headers request.getheader("xxx-yyy")
path_info url 指向的路径的信息。由于servlet可以和服务器直接通讯,所以这个变量对servlet没什么作用。 request.getpathinfo()
path_translated 在server上被映射为web目录的目录的真实路径的信息。和上一个变量一样,对servlet用处不大。 request.getpathtranslated()
query_string 如果用 get 方法发出请求(requests),这个变量中将会存放请求的数据,其 形式为经过url编码的一个大字符串。在servlet中,你很少会用到这个原始的字符串。而是 用 request.getparameter 方法来访问某个特定的请求数据。 request.getquerystring()
remote_addr 客户端的ip地址,是string类型的。其形式类似于 "192.9.48.9"。 request.getremoteaddr()
remote_host 发出请求的客户端的域名(例如. "java.sun.com") 如果不能检测到域名,就用客户端的ip地址代替。 request.getremotehost()
remote_user 如果 authorization header 被赋值,则这个变量中放有用户名。 request.getremoteuser()
request_method 请求的类型。通常为 get 或 post,但也可能是 head, put, delete, options, 或者 trace。 request.getmethod()
script_name srvlet的路径 request.getservletpath()
server_name 服务器的名称 request.getservername()
server_port 服务器的端口 string.valueof(request.getserverport())(返回string类型) request.getserverport()(返回int类型)
server_protocol 在请求命令行中用的协议的版本号。(例如. http/1.0 或 http/1.1)。 request.getprotocol()
server_software 所用 web server 软件的名称 getservletcontext().getserverinfo()

3. 例子:读取cgi变量。
下面是一个显示除去 http_xxx_yyy 外所有cgi变量的的servlet。他显示了在上面的表格中列出的所有cgi变量的值。
3.1 showcgivariables.java
download here

//! ####### start showcgivariables.java
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 = "servlet example: 显示cgi变量";
out.println("<html><head><title>"+title +"</title></head>"+
"<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>没有被赋值</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);
}
}

//! ####### end showcgivariables.java

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:LB5000XP论坛配合SERV-U获取系统管理员权限
· 下一篇:使用PERL脚本生成PDF输出
· CGI编程的安全性 -- 文件名
· Perl操作Mysql数据库
· Perl教学 第一篇 概述
· Perl 程序的属性详解
· 深入研究表单提交方式:GET/POST


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077