⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 execcommand.java

📁 很棒的web服务器源代码
💻 JAVA
字号:
// ExecCommand.java// $Id: ExecCommand.java,v 1.4 2000/08/16 21:37:47 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.ssi.commands ;import java.io.IOException;import java.io.StringBufferInputStream;import java.util.Dictionary;import java.util.Vector;import org.w3c.www.http.HTTP ;import org.w3c.util.ArrayDictionary;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;import org.w3c.jigsaw.ssi.DelayedInputStream;import org.w3c.jigsaw.ssi.SSIFrame;/** * Implementation of the SSI <code>exec</code> command. * It inserts the output from a CGI script or a shell command in the * document. Note that in the Jigsaw architecture CGI scripts are just * another resource class, so that no distinction is made between * executing a CGI script or including a file. * Relies on variables set by DefaultCommandRegistry. * @author Antonio Ramirez <anto@mit.edu> */public class ExecCommand extends BasicCommand {    private final static String NAME = "exec" ;    public Reply execute(SSIFrame ssiframe,			 Request request,			 ArrayDictionary parameters,			 Dictionary variables)    {	    	String cmd = (String) parameters.get("cmd") ;	if(cmd != null) return executeCmd(ssiframe,					  request,					  parameters,					  variables,					  cmd) ;	// "cgi" would be handled here (just like an include...)	Reply reply = ssiframe.createDefaultReply(request,HTTP.OK) ;	reply.setContent("[unimplemented: use include]") ;	handleSimpleIMS(request,reply) ;	return reply ;    }    /**     * return true if reply can be cached.     * @return a boolean.     */    public boolean acceptCaching() {	return true;    }    private Reply executeCmd(SSIFrame ssiframe,			     Request request,			     ArrayDictionary parameters,			     Dictionary variables,			     String cmd)    {	// Deny command if secure flag was set	if(((Boolean)variables.get("secure")).booleanValue()) {	    Reply reply = ssiframe		.createCommandReply(request,HTTP.OK) ;	    reply.setContent("[exec cmd not allowed: secure SSI]") ;	    return reply ;	}		ArrayDictionary ssiVars = (ArrayDictionary)	    variables.get("ssiVars") ;	if(ssiVars==null) {	    Reply reply = ssiframe		.createCommandReply(request,HTTP.OK) ;	    reply.setContent("[exec: can't find environment]") ;	    handleSimpleIMS(request,reply) ;	    return reply ;	}	String[] env  = new String[ssiVars.size()] ;	for(int i=0,j=0;	    i<ssiVars.capacity() && ssiVars.keyAt(i)!=null;	    i++)	    env[j++] =		(ssiVars.keyAt(i).toString())		+ "="		+ (ssiVars.elementAt(i).toString()) ;	Reply reply = new Reply(request.getClient()) ;	reply.setStream(new DelayedProcessStream(cmd,env)) ;	return reply ;    }    private final void addEnv(Vector env,String var,String val)    {	if(var!=null && val!=null)	    env.addElement(var+'='+val) ;    }    public String getName()    {	return NAME;    }  public String getValue(Dictionary variables, String variable, 			 Request request) {    return "null";  }}class DelayedProcessStream extends DelayedInputStream {    private String cmd = null ;    private String[] env = null ;    DelayedProcessStream(String cmd, String[] env)    {	this.cmd = cmd ;	this.env = env ;    }    protected final void init()    {	Process proc = null ;	try {	    proc = Runtime.getRuntime().exec(cmd,env) ;	} catch(IOException ex) {	    proc = null ;	}	if(proc == null)	    in = new StringBufferInputStream		("[exec: cannot start process: \""+cmd+"\"]") ;	else 	    in = proc.getInputStream() ;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -