Как написать простой сервлет в IDE Eclipse + Tomcat v7

В этой статье я опишу создание сервлетов версии v.2.2 и v3.0. Предполагается, что связка Eclipse + Tomcat уже настроена, как описано здесь: Настройка Tomcat 7 + Eclipse + Java 7

 

Важно: я использую Tomcat, настроенный на использование порта 80, в то время как по умолчанию сервер слушает порт 8080. Поэтому у меня сервер доступен по адресу http://localhost/ (то есть используется предопределённый порт 80 протокола TCP, который можно не писать в адресе, это удобно), а для Tomcat с настройками по умолчанию адрес будет http://localhost:8080/. Имейте это в виду, когда будете проверять работу сервлетов, описанных в статье, поскольку я пишу адреса для своей конфигурации.

 

Создадим новый Dynamic Web Project, в диалоге создания выберите в поле Dynamic web module version значение 2.2.

Когда проект будет создан, вы увидите обширное дерево папок. Наши классы будут располагаться в папке Java Resources -> src, для этого создайте там пакет org.test.technerium.servlets.

 


 

Для начала напишем сервлет v2, формирующий страничку. Создайте класс Direct, наследующий HttpServlet как описано ниже:

package org.test.technerium.servlets;

import java.io.IOException;
import java.io.PrintWriter;


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

public class Direct extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html"); //Задаем формат ответа - HTML, текст
    PrintWriter out = response.getWriter(); //Получаем объект, позволяющий записать контент в ответ 
    out.write("<!DOCTYPE html>\n" + // Записываем в ответ HTML код простейшей странички
       "<html>\n" +
       "<head><title>A servlet without templates.</title></head>\n" +
       "<body bgcolor=\"#fdf5e6\">\n" +
       "<h1>Note:</h1>\n" +
       "<p>This whole page was created via servlet</p>\n" +
       "</body></html>"); 
  }
}

Итак, этот класс представляет собой сервлет, который переопределяет метод doGet, срабатывающий при получении GET-запроса на адрес, к которому привязан сервлет. Как мы видим, метод получает в качестве аргументов объекты запроса request и ответа response. Соответственно, из запроса мы можем получить все параметры, которые там присуствуют, а в ответ записать то, что хотим отправить. В данном случае мы будем просто отправлять String, содержащий контент нашей тестовой странички.

Для того, чтобы привязать сервлет к определенному адресу, служит дескриптор web.xml, расположенный здесь: WebContent -> WEB-INF

Отредактируйте дескриптор, чтобы он выглядел наподобие этого:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app id="WebApp_ID">
    <display-name>TechNeriumServletV2Project</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    
    // Начало добавленного кода -->
  <servlet>
    <servlet-name>DirectServlet</servlet-name>
    <servlet-class>org.test.technerium.servlets.Direct</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DirectServlet</servlet-name>
    <url-pattern>/directURL</url-pattern>
  </servlet-mapping>
  // Конец добавленного кода <--
</web-app>

Здесь секция <servlet> задает внутренее имя сервлета, по которому к нему можно обратиться в дескрипторе. Секция <servlet-mapping> привязывает сервлет к определенному суффиксу URL адреса. Полный адрес образуется следующим образом: <адрес Tomcat'a>/<имя проекта>/<суффикс сервлета>.

Далее запускаем сервер и заходим через браузер по адресу http://localhost/TechNeriumServletV2Project/directURL.

На странице увидим следующее:

 


 

Теперь напишем сервлет v3, который позволяет обходиться без дескриптора web.xml. Создаем новый проект, выбираем Dynamic web module version 3. Добавляем его в сервер, копируем пакет и класс из предыдущего проекта в этот, и редактируем наш сервлет: добавляем аннотацию к классу, так чтобы получилось это:

package org.test.technerium.servlets;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/directURL") //Добавьте эту аннотацию
public class Direct extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.write("<!DOCTYPE html>\n" +
       "<html>\n" +
       "<head><title>A servlet v3.</title></head>\n" +
       "<body bgcolor=\"#fdf5e6\">\n" +
       "<h1>Note:</h1>\n" +
       "<p>This whole page was created via servlet v3</p>\n" +
       "</body></html>");
  }
}

Аннотация @WebServlet("/directURL") позволяет нам обойтись без web.xml, поскольку напрямую задает URL-суффикс сервлета. Запускайте сервер и на странице http://localhost/TechNeriumServletV3Project/directURL увидите следующее:

Вот, пожалуй, и всё для начала. По ссылке ниже доступен архив с проектами, описанными в статье.

techneirum_servletsv2v3.zip

 

Была ли статья полезна: 

Добавить комментарий

HTML

  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre> <p>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Поместите примеры вашего исходного кода в теги <code>...</code> or <source>...</source> и он будет красиво отформатирован.

Plain text

  • Поместите примеры вашего исходного кода в теги <code>...</code> or <source>...</source> и он будет красиво отформатирован.
  • Строки и параграфы переносятся автоматически.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <code> <source>
CAPTCHA
Пожалуйста, подтвердите, что вы человек.