亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cgiservlet.java

?? 用java開發的
?? JAVA
字號:
// CgiServlet - runs CGI programs
//
// Copyright (C)1996,1998 by Jef Poskanzer <jef@acme.com>. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// Visit the ACME Labs Java page for up-to-date versions of this and other
// fine Java utilities: http://www.acme.com/java/

package Acme.Serve;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/// Runs CGI programs.
// <P>
// Note: although many implementations of CGI set the working directory of
// the subprocess to be the directory containing the executable file, the
// CGI spec actually says nothing about the working directory.  Since
// Java has no method for setting the working directory, this implementation
// does not set it.
// <P>
// <A HREF="/resources/classes/Acme/Serve/CgiServlet.java">Fetch the software.</A><BR>
// <A HREF="/resources/classes/Acme.tar.Z">Fetch the entire Acme package.</A>
// <P>
// @see Acme.Serve.Serve

public class CgiServlet extends HttpServlet {

	// / Returns a string containing information about the author, version, and
	// copyright of the servlet.
	public String getServletInfo() {
		return "runs CGI programs";
	}

	// / Services a single request from the client.
	// @param req the servlet request
	// @param req the servlet response
	// @exception ServletException when an exception has occurred
	public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		if (!(req.getMethod().equalsIgnoreCase("get") || req.getMethod().equalsIgnoreCase("post"))) {
			res.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
			return;
		}
		dispatchPathname(req, res, getServletContext().getRealPath(req.getServletPath() + req.getPathInfo()));
	}

	private void dispatchPathname(HttpServletRequest req, HttpServletResponse res, String path) throws IOException {
		if (new File(path).exists())
			serveFile(req, res, path);
		else
			res.sendError(HttpServletResponse.SC_NOT_FOUND);
	}

	private void serveFile(HttpServletRequest req, HttpServletResponse res, String path) throws IOException {
		String queryString = req.getQueryString();
		int contentLength = req.getContentLength();
		int c;

		log("running " + path + "?" + queryString);

		// Make argument list.
		String argList[] = (path + (queryString != null && queryString.indexOf("=") == -1 ? "+" + queryString : ""))
				.split("\\+"); /* 1.4 */

		// Make environment list.
		Vector envVec = new Vector();
		envVec.addElement(makeEnv("PATH", "/usr/local/bin:/usr/ucb:/bin:/usr/bin"));
		envVec.addElement(makeEnv("GATEWAY_INTERFACE", "CGI/1.1"));
		envVec.addElement(makeEnv("SERVER_SOFTWARE", getServletContext().getServerInfo()));
		envVec.addElement(makeEnv("SERVER_NAME", req.getServerName()));
		envVec.addElement(makeEnv("SERVER_PORT", Integer.toString(req.getServerPort())));
		envVec.addElement(makeEnv("REMOTE_ADDR", req.getRemoteAddr()));
		envVec.addElement(makeEnv("REMOTE_HOST", req.getRemoteHost()));
		envVec.addElement(makeEnv("REQUEST_METHOD", req.getMethod()));
		if (contentLength != -1)
			envVec.addElement(makeEnv("CONTENT_LENGTH", Integer.toString(contentLength)));
		if (req.getContentType() != null)
			envVec.addElement(makeEnv("CONTENT_TYPE", req.getContentType()));
		envVec.addElement(makeEnv("SCRIPT_NAME", req.getServletPath()));
		if (req.getPathInfo() != null)
			envVec.addElement(makeEnv("PATH_INFO", req.getPathInfo()));
		if (req.getPathTranslated() != null)
			envVec.addElement(makeEnv("PATH_TRANSLATED", req.getPathTranslated()));
		if (queryString != null)
			envVec.addElement(makeEnv("QUERY_STRING", queryString));
		envVec.addElement(makeEnv("SERVER_PROTOCOL", req.getProtocol()));
		if (req.getRemoteUser() != null)
			envVec.addElement(makeEnv("REMOTE_USER", req.getRemoteUser()));
		if (req.getAuthType() != null)
			envVec.addElement(makeEnv("AUTH_TYPE", req.getAuthType()));
		Enumeration hnEnum = req.getHeaderNames();
		while (hnEnum.hasMoreElements()) {
			String name = (String) hnEnum.nextElement();
			String value = req.getHeader(name);
			if (value == null)
				value = "";
			envVec.addElement(makeEnv("HTTP_" + name.toUpperCase().replace('-', '_'), value));
		}
		String envList[] = makeList(envVec);

		// Start the command.
		Process proc = Runtime.getRuntime().exec(argList, envList);

		try {
			// If it's a POST, copy the request data to the process.
			if (req.getMethod().equalsIgnoreCase("post")) {
				InputStream reqIn = req.getInputStream();
				OutputStream procOut = proc.getOutputStream();
				for (int i = 0; i < contentLength; ++i) {
					c = reqIn.read();
					if (c == -1)
						break;
					procOut.write(c);
				}
				procOut.close();
			}

			// Now read the response from the process.
			BufferedReader procIn = new BufferedReader(new InputStreamReader(proc.getInputStream()));
			OutputStream resOut = res.getOutputStream();
			// Some of the headers have to be intercepted and handled.
			boolean firstLine = true;
			while (true) {
				String line = procIn.readLine();
				if (line == null)
					break;
				line = line.trim();
				if (line.equals(""))
					break;
				int colon = line.indexOf(":");
				if (colon == -1) {
					// No colon. If it's the first line, parse it for status.
					if (firstLine) {
						StringTokenizer tok = new StringTokenizer(line, " ");
						try {
							switch (tok.countTokens()) {
							case 2:
								tok.nextToken();
								res.setStatus(Integer.parseInt(tok.nextToken()));
								break;
							case 3:
								tok.nextToken();
								res.setStatus(Integer.parseInt(tok.nextToken()), tok.nextToken());
								break;
							}
						} catch (NumberFormatException ignore) {
						}
					} else {
						// No colon and it's not the first line? Ignore.
					}
				} else {
					// There's a colon. Check for certain special headers.
					String name = line.substring(0, colon);
					String value = line.substring(colon + 1).trim();
					if (name.equalsIgnoreCase("Status")) {
						StringTokenizer tok = new StringTokenizer(value, " ");
						try {
							switch (tok.countTokens()) {
							case 1:
								res.setStatus(Integer.parseInt(tok.nextToken()));
								break;
							case 2:
								res.setStatus(Integer.parseInt(tok.nextToken()), tok.nextToken());
								break;
							}
						} catch (NumberFormatException ignore) {
						}
					} else if (name.equalsIgnoreCase("Content-type")) {
						res.setContentType(value);
					} else if (name.equalsIgnoreCase("Content-length")) {
						try {
							res.setContentLength(Integer.parseInt(value));
						} catch (NumberFormatException ignore) {
						}
					} else if (name.equalsIgnoreCase("Location")) {
						res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
						res.setHeader(name, value);
					} else {
						// Not a special header. Just set it.
						res.setHeader(name, value);
					}
				}
			}
			// Copy the rest of the data uninterpreted.
			Acme.Utils.copyStream(procIn, resOut, null);
			procIn.close();
			resOut.close();
		} catch (IOException e) {
			// res.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
			// There's some weird bug in Java, when reading from a Process
			// you get a spurious IOException. We have to ignore it.
		}
	}

	private static String makeEnv(String name, String value) {
		return name + "=" + value;
	}

	private static String[] makeList(Vector vec) {
		String list[] = new String[vec.size()];
		for (int i = 0; i < vec.size(); ++i)
			list[i] = (String) vec.elementAt(i);
		return list;
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区四区视频| 欧美在线三级电影| 日韩成人免费在线| 亚洲人成亚洲人成在线观看图片 | 一区二区三区四区在线免费观看| 久久精品视频一区二区| 国产亚洲综合色| 国产欧美日韩麻豆91| 国产亚洲精品中文字幕| 国产欧美一区二区精品久导航| 国产视频视频一区| 成人欧美一区二区三区| 国产精品另类一区| 成人免费在线观看入口| 亚洲自拍与偷拍| 亚欧色一区w666天堂| 奇米影视7777精品一区二区| 日产欧产美韩系列久久99| 日韩和的一区二区| 久久99久久精品欧美| 国产福利一区二区三区在线视频| 懂色av一区二区在线播放| 色婷婷精品大在线视频| 欧美精品久久天天躁| 精品国产a毛片| 亚洲视频小说图片| 日韩精品一级二级| 国产精品18久久久久久久久久久久| 国产精品99久久不卡二区| 99久久国产综合精品女不卡| 欧美日韩国产高清一区二区| 久久久99精品免费观看不卡| 一区在线中文字幕| 日日摸夜夜添夜夜添国产精品 | 综合色中文字幕| 香港成人在线视频| 国产传媒欧美日韩成人| 在线日韩一区二区| 国产视频在线观看一区二区三区| 亚洲自拍偷拍麻豆| 国产成人免费av在线| 欧美人妖巨大在线| 亚洲婷婷综合色高清在线| 蜜桃传媒麻豆第一区在线观看| 不卡高清视频专区| 日韩一区二区三区三四区视频在线观看| 国产欧美视频在线观看| 亚洲第一福利一区| 不卡av免费在线观看| 欧美成人精精品一区二区频| 亚洲欧美日韩久久| 国产精品一区二区在线看| 欧美精选一区二区| 亚洲少妇30p| 国产真实乱对白精彩久久| 色中色一区二区| 国产丝袜在线精品| 久久99精品视频| 5566中文字幕一区二区电影| 一区二区三区av电影| 成人高清视频免费观看| 国产亚洲成aⅴ人片在线观看| 日韩国产欧美一区二区三区| 在线观看网站黄不卡| 中文字幕中文字幕在线一区 | 免费成人美女在线观看.| 色婷婷综合久久久中文字幕| 国产午夜精品一区二区三区视频 | 欧美日韩黄色一区二区| 最新高清无码专区| 粉嫩aⅴ一区二区三区四区五区| 日韩一区二区电影网| 日本特黄久久久高潮| 欧美日韩精品二区第二页| 亚洲高清免费观看高清完整版在线观看| www.爱久久.com| 国产精品成人在线观看| 成人精品视频一区二区三区尤物| www久久精品| 激情综合色综合久久综合| 日韩色在线观看| 国内精品视频一区二区三区八戒| 日韩欧美高清dvd碟片| 免费观看在线色综合| 日韩欧美国产成人一区二区| 国内精品嫩模私拍在线| 久久久久成人黄色影片| 国产成人小视频| 中文字幕一区二区不卡| 91麻豆国产精品久久| 亚洲一区二区三区小说| 51精品视频一区二区三区| 久久国产剧场电影| 久久精品一区二区三区av| 成人av免费在线| 亚洲图片一区二区| 欧美一级生活片| 国产成人自拍在线| 亚洲欧洲av另类| 在线不卡a资源高清| 精一区二区三区| 国产精品传媒入口麻豆| 欧美天堂一区二区三区| 美女视频一区二区三区| 国产日韩欧美麻豆| 欧美影院精品一区| 国模一区二区三区白浆| 1024国产精品| 欧美一二区视频| 99免费精品视频| 奇米一区二区三区| 亚洲国产岛国毛片在线| 欧美亚洲国产一区二区三区| 精品亚洲成a人在线观看| 中文字幕一区在线| 日韩欧美高清在线| 91久久精品一区二区三| 久久精品免费看| 亚洲精品午夜久久久| 欧美一区二区三区视频在线观看| 成人动漫一区二区| 日本不卡中文字幕| 亚洲人亚洲人成电影网站色| 精品国产1区2区3区| 一本一本大道香蕉久在线精品| 看电影不卡的网站| 亚洲一区电影777| 欧美激情艳妇裸体舞| 日韩一区二区在线播放| 欧美伊人久久久久久午夜久久久久| 国模娜娜一区二区三区| 日产精品久久久久久久性色| 亚洲欧美激情一区二区| 国产日韩欧美a| 欧美一区二区三区不卡| 在线国产电影不卡| 成人黄色国产精品网站大全在线免费观看| 五月开心婷婷久久| 亚洲柠檬福利资源导航| 久久精品无码一区二区三区| 日韩欧美在线影院| 欧美日韩精品一区二区三区| 色婷婷国产精品| 成人高清av在线| 国产超碰在线一区| 国产一区二区三区精品视频| 久久91精品国产91久久小草| 日本免费在线视频不卡一不卡二| 亚洲一区在线看| 亚洲妇女屁股眼交7| 一区二区三区在线观看网站| 伊人夜夜躁av伊人久久| 亚洲乱码中文字幕综合| 亚洲欧洲精品一区二区精品久久久| 欧美激情中文字幕一区二区| 国产欧美一区二区三区在线老狼| 久久精品夜色噜噜亚洲aⅴ| 久久精品在线免费观看| 国产日韩欧美综合一区| 国产欧美日韩精品在线| 中文字幕av一区 二区| 国产精品久久毛片a| 亚洲欧洲av另类| 一区二区三区成人在线视频| 亚洲成人av在线电影| 日韩精品成人一区二区三区| 日韩成人一区二区三区在线观看| 免费观看日韩av| 国产一区二区h| 不卡一区二区三区四区| 一本高清dvd不卡在线观看| 欧美日韩中文字幕一区二区| 91麻豆精品国产自产在线观看一区| 日韩欧美一区二区不卡| 26uuu成人网一区二区三区| 国产欧美中文在线| 一区二区三区精品| 免费人成黄页网站在线一区二区| 国产在线精品国自产拍免费| 国产91精品在线观看| 日本久久精品电影| 91精品国产综合久久小美女| 久久久久9999亚洲精品| 亚洲女女做受ⅹxx高潮| 日韩高清不卡一区二区三区| 国产一区二区三区精品视频| 在线观看一区日韩| 精品国产自在久精品国产| 国产精品免费丝袜| 日韩电影在线观看一区| 成人午夜视频在线| 欧美日韩国产综合视频在线观看 | 欧美日韩在线播| 精品国产1区二区| 亚洲欧美日韩人成在线播放| 精品一区二区三区免费毛片爱| 91色在线porny| 精品粉嫩aⅴ一区二区三区四区 | 亚洲高清久久久| 国产.精品.日韩.另类.中文.在线.播放|