Главная » Java, Web » Сервлет, создающий HTML

0

Большинство сервлетов выводят не простой текст, a HTML. Чтобы иметь возможность выводить HTML, необходимо первым делом сообщить браузеру о том, что текст, посылаемый ему, — это HTML. Для этого необходимо послать заголовок в соответствии со спецификацией протокола HTTP. Чтобы указать тип данных HTML, заголовок должен содержать "content-Type: text/html". Заголовки должны быть отделены от потока текста пустой строкой. За нас все это сделает метод setHeader из интерфейса HttpServletResponse, однако существует и другой метод — setContentType.

Более того, заголовок можно сформировать и передать вручную. Заголовок должен создаваться перед тем, как будут переданы данные. Например, файл Heiiowww. java (листинг 4.2). Здесь класс размещается внутри пакета paket (рис. 4.4).

Рис. 4.4. Сервлет выводит HTML

Листинг 4.2. Передача заголовков браузеру

package paket; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doGet(HttpServletRequest request,

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

out.printIn("<!DOCTYPE HTML PUBLIC V-//W3C//DTD HTML 4.0 " +

"Transitional//EN\">\n" +

"<HTML>\n" +

"<HEADXTITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" +

"<Hl>Hello WWW</Hl>\n" + "</BODYX/HTML>") ;

В файле конфигурации Web-сервера пишем:

servlet.name: HelloWWW

servlet.HelloWWW.className: paket.HelloWWW servlet.HelloWWW.url: /hellowww

Файл класса HelloWWW.class помещаем в папку с: \Biazix\ciasss\paket.

Каждый раз выводить информацию с использованием println не очень удобно. Учитывая, что заголовки и названия страниц часто содержат весьма однотипную информацию, можно создать класс, который будет упрощать работу со стандартной информацией, выводимой сервлетом. Пусть это будет класс ServletUtilities . java (листинг 4.3).

Листинг 4.3. Файл Servletutilities.java

package paket; import javax.servlet.*; import javax.servlet.http.*; public class ServletUtilities {

public static final String DOCTYPE =

"<!DOCTYPE HTML PUBLIC V-//W3C//DTD HTML 4.0 Transitional//EN\">"; public static String headWithTitle(String title) { return(DOCTYPE + "\n" + "<HTML>\n" +

"<HEADXTITLE>" + title + "</TITLEX/HEAD>\n") ;

/*

чтение параметра по имени name, преобразование его в int, возвращение этого параметра */

public static int getlntParameter(HttpServletRequest request,

String paramName, int defaultValue) {

String paramString = request.getParameter(paramName); int paramValue; try {

paramValue = Integer.parselnt(paramString); } catch(NumberFormatException nfe) { // обработка null и

// неправильных значений

paramValue = defaultValue;

}

return(paramValue);

public static String getCookieValue(Cookie[] cookies,

String cookieName, String defaultValue) { for(int i=0; iccookies.length; i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) return(cookie.getValue());

}

return(defaultValue); // значения

public static final int SECONDS_PERJMONTH = 60*60*24*30; public static final int SECONDS_PER_YEAR = 60*60*24*365;

Сейчас, когда есть уже класс с утилитами, программа HelloWWW (рис. 4.5) может быть записана в более удобном виде (листинг 4.4).

Листинг 4.4. Файл He!!oWWW2,java

package paket; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW2 extends HttpServiet { public void doGet(HttpServletRequest request,

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

out.println(ServletUtilities.headWithTitle("Hello WWW") + "<BODY>\n" +

"<Hl>Hello WWW</Hl>\n" + "</BODYX/HTML>") ;

Рис. 4.5. Сервлет HelloWWW2

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

По теме:

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