📄 echocommand.java
字号:
// EchoCommand.java// $Id: EchoCommand.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.util.Date;import java.util.Dictionary;import java.net.URL ;import org.w3c.www.http.HTTP;import org.w3c.www.http.HeaderValue;import org.w3c.www.http.HttpEntityMessage;import org.w3c.www.http.HttpMessage;import org.w3c.www.http.HttpReplyMessage;import org.w3c.www.http.HttpRequestMessage;import org.w3c.util.ArrayDictionary;import org.w3c.util.TimeFormatter;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;import org.w3c.jigsaw.ssi.SSIFrame;/** * Implementation of the <code>echo</code> SSI command. * As extensions, it has the parameters "reqstate" (for echoing * Jigsaw request states) and "reqheader" (for echoing request * header). * <p>Also, it can take the flag "here", whose presence means that the * variable is to be interpreted at the deepest request level (in the * case of chained internal requests), instead of doing so at the top * (external request) level. It inserts the value of a variable in * the document. * @author Antonio Ramirez <anto@mit.edu> */public class EchoCommand implements Command { private final static String NAME = "echo" ; private static Dictionary modFlags = null ; private static final String[] keys = { "var", "reqstate", "reqheader", "here" } ; static { String[] names = { "DOCUMENT_NAME" , "DOCUMENT_URI" , "QUERY_STRING_UNESCAPED", "SERVER_SOFTWARE" , "SERVER_NAME" , "GATEWAY_INTERFACE" , "SERVER_PROTOCOL" , "SERVER_PORT" , "REQUEST_METHOD" , "PATH_INFO" , "PATH_TRANSLATED" , "SCRIPT_NAME" , "QUERY_STRING" , "REMOTE_HOST" , "REMOTE_ADDR" , "REMOTE_USER" , "AUTH_TYPE" , "REMOTE_IDENT" , "CONTENT_TYPE" , "CONTENT_LENGTH" , "HTTP_ACCEPT" , "HTTP_USER_AGENT" , "DATE_LOCAL" , "DATE_GMT" , "LAST_MODIFIED" } ; Boolean[] values = { Boolean.FALSE, // DOCUMENT_NAME Boolean.FALSE, // DOCUMENT_URI Boolean.TRUE, // QUERY_STRING_UNESCAPED Boolean.FALSE, // SERVER_SOFTWARE Boolean.FALSE, // SERVER_NAME Boolean.FALSE, // GATEWAY_INTERFACE Boolean.FALSE, // SERVER_PROTOCOL Boolean.FALSE, // SERVER_PORT Boolean.FALSE, // REQUEST_METHOD Boolean.FALSE, // PATH_INFO Boolean.FALSE, // PATH_TRANSLATED Boolean.FALSE, // SCRIPT_NAME" Boolean.TRUE, // QUERY_STRING Boolean.FALSE, // REMOTE_HOST Boolean.FALSE, // REMOTE_ADDR Boolean.FALSE, // REMOTE_USER Boolean.FALSE, // AUTH_TYPE Boolean.FALSE, // REMOTE_IDENT Boolean.FALSE, // CONTENT_TYPE Boolean.FALSE, // CONTENT_LENGTH Boolean.FALSE, // HTTP_ACCEPT Boolean.FALSE, // HTTP_USER_AGENT Boolean.TRUE, // DATE_LOCAL Boolean.TRUE, // DATE_GMT Boolean.FALSE // LAST_MODIFIED } ; modFlags = new ArrayDictionary(names,values) ; } /** * return true if reply can be cached. * @return a boolean. */ public boolean acceptCaching() { return true; } public Reply execute(SSIFrame ssiframe, Request request, ArrayDictionary parameters, Dictionary variables) { // Get the relevant parameters Object[] values = parameters.getMany(keys) ; String var = (String) values[0] ; String reqstate = (String) values[1] ; String reqheader = (String) values[2] ; boolean here = values[3] != null ; boolean notMod = false ; Reply reply = ssiframe.createCommandReply(request,HTTP.OK) ; String content = null ; if(var != null) { if(var.equals("DOCUMENT_URI")) { URL theUrl = here ? request.getURL() : request.getOriginal().getURL() ; if(theUrl != null) content = theUrl.toString() ; } else { Dictionary ssiVars = (Dictionary) variables.get(here ? "ssiVars" : "topSsiVars") ; if(ssiVars == null) return null ; if(var.equals("DATE_LOCAL")) { content = TimeFormatter .format(new Date(), (String) variables.get("datefmt")) ; } else if(var.equals("DATE_GMT")) { // FIXME: won't do formatting content = new Date().toGMTString() ; } else if(var.equals("LAST_MODIFIED")) { content = TimeFormatter .format((Date) ssiVars.get("X_LAST_MODIFIED"), (String) variables.get("datefmt")) ; } else { content = (String) ssiVars.get(var) ; if (content == null) content = ""; } } long ims = request.getIfModifiedSince() ; if(ims != -1) { if( var == null ) notMod = true ; else { Boolean result = (Boolean) modFlags.get(var) ; notMod = (result == null) ? true : ! result.booleanValue() ; } } } else if(reqstate != null) { Object state = here ? request.getState(reqstate) : request.getOriginal().getState(reqstate) ; if(state != null) content = state.toString() ; } else if(reqheader != null) { reqheader = reqheader.toLowerCase() ; HeaderValue hvalue = here ? request.getHeaderValue(reqheader) : request.getOriginal().getHeaderValue(reqheader) ; if(hvalue != null) content = hvalue.toExternalForm() ; } else return null ; if(content != null) { reply.setContent(content) ; } else return null ; if(notMod) { reply.setStatus(HTTP.NOT_MODIFIED) ; reply.setLastModified(request.getIfModifiedSince()) ; } return reply ; } public String getName() { return NAME; } public String getValue(Dictionary variables, String variable, Request request) { return "null"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -