Главная » Java, Web » Сервлеты и переменные CGI

0

При работе с CGI-приложениями мы сталкиваемся с большим количеством переменных, используемых в CGI-программировании. Источники CGI- переменных могут быть различны. Информация собирается из разных мест, включая информацию, содержащуюся в HTTP-запросах (заголовки содержат URI). При этом часть информации получается из сокетов (IP-адреса), часть получается из параметров инсталляции сервера (отображение URL в физический путь). Полезно сопоставить переменные, используемые в CGI, с аналогами Java-сервлетов (табл. 4.3).

Таблица 4.3. Переменные окружения

Переменная CGI

Смысл

или назначение

Обращение к значению из doGet или из doPost

AUTH TYPE

Если присутствует заголовок Authorization, то задается схема

(basic или digest)

request.getAuthType()

CONTENT LENGTH

Для запросов post. Количество байт

эквивалентно

String.valueOf(request. getContentLength () ) — строка

полезно использовать

request.getContentLength() — значение типа int

CONTENT TYPE

MIME-тип приложения

Request.getContentType()

DOCUMENT ROOT

Путь к каталогу, соответствующему Ийр://имя-хоста/

GetServletContext(). getRealPath ("/"), в старых версиях request.getRealPath ("/")

HTTP XXX YYY

Доступ к заголовку

Request.getHeader("Xxx-Yyy")

PATH INFO

Информация о пути

Request.getPathlnfo()

PATH TRANSLATED

Путь переведенный в реальный путь к серв- лету

Request.getPathTranslated()

QUERY STRING

Данные (для запроса GET)

Request.getQueryString()

Таблица 4.3 (окончание)

Переменная CGI

Смысл

или назначение

Обращение к значению из doGet или из doPost

REMOTE ADDR

IP-адрес в виде строки, например "192.9.48.9"

Request.getRemoteAddr()

REMOTE HOST

Полное доменное имя, например "java.sun.com"

Request.getRemoteHost()

REMOTE USER

Пользовательская часть аутентификации, если есть заголовок

Authorization

Request.getRemoteUser()

REQUEST METHOD

Тип запроса(обычно

GET ИЛИ POST, но может быть

И HEAD, PUT, DELETE, OPTIONS, TRACE)

Request.getMethod()

SCRIPT NAME

Путь к сервлету

Request.getServletPath()

SERVER NAME

Имя Web-cepeepa

Request.getServerName()

SERVER PORT

Номер порта

эквивалентно

String.valueOf(request.getSer verPortO) — строка, полезен метод request.getServerPort()— значение типа int

SERVER PROTOCOL

Версия

протокола HTTP (НТТР/1.1)

Request.getProtocol()

SERVER SOFTWARE

Информация о Web- сервере

GetServletContext(). getServerlnfo()

В качестве иллюстрации к вышеизложенному приведем пример сервлета, который выводит значения переменных окружения (листинг 4.9).

Листинг 4.9. Файл ShowCGI.java

package paket; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*;

public class ShowCGI extends HttpServiet {

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String [] [] variables =

{ { "AUTHJTYPE", request.getAuthType() },

{ "CONTENT_LENGTH", String.vaiueOf(request.getContentLength()) }, { "CONTENTJTYPE", request.getcontentType() }, { "DOCUMENT_ROOT", getServletContext().getRealPath("/") }, { "PATH_INFO", request.getPathlnfo() }, { "PATH_TRANSLATED", request.getPathTranslated() }, { "QUERY_STRING", request.getQueryString() }, { "REMOTE_ADDR", request.getRemoteAddr() }, { "REMOTE_HOST", request.getRemoteHost() }, { "REMOTEJJSER", request.getRemoteUser() }, { "REQUESTJMETHOD", request.getMethod() }, { "SCRIPT_NAME", request.getServletPath() }, { "SERVER_NAME", request.getServerName() }, { "SERVER_PORT", String.vaiueOf(request.getServerPort()) }, { "SERVER_PROTOCOL", request.getProtocol() }, { "SERVER_SOFTWARE", getServletContext().getServerlnfo() }

};

String title = "Servlet Example: Showing CGI Variables"; out.println(ServletUtilities.headWithTitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1 ALIGN=CENTER>" + title + "</Hl>\n" + "CTABLE B0RDER=1 ALIGN=CENTER>\n" + "<TR BGCOLOR=\"#FFADO0\">\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 ("<TRXTD>" + varName + "<TD>" + varValue);

}

out. println ("</TABLEX/BODYX/HTML>") ;

}

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { doGet(request, response);

}

Вставка в файл web.ini следующая:

servlet.name: cgi

servlet.cgi.className: paket.ShowCGI servlet.cgi.url: /cgi

Ответ, получаемый браузером, показан на рис. 4.12.

Рис. 4.12. Отображение полученного ответа браузером

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии