Статьи

Учебник по сервлету Java — ULTIMATE Guide (PDF Download)

Java Servlets — это веб-технология на основе Java. Технология Java Servlet предоставляет веб-разработчикам простой и согласованный механизм для расширения функциональности веб-сервера и для доступа к существующим бизнес-системам.

Сервлет почти можно рассматривать как апплет, который работает на стороне сервера — без лица. Java-сервлеты делают возможным множество веб-приложений.

Сервлеты Java составляют основную часть Java Enterprise Edition (Java EE). Обратите внимание, что для работы Java-сервлеты должны выполняться внутри Servlet-совместимого «контейнера сервлетов (например, веб-сервера)».

Это руководство представляет собой исчерпывающее руководство по запуску кода на основе Java-сервлета.

1. Введение

Сервлет — это класс языка программирования Java, часть Java Enterprise Edition (Java EE). Sun Microsystems разработала свою первую версию 1.0 в 1997 году. Текущая версия — Servlet 3.1.

Сервлеты используются для создания динамических веб-приложений в Java, расширяя возможности сервера. Он может работать на любом веб-сервере, интегрированном с контейнером сервлетов.

1.1 Процесс сервлета Java

Процесс сервлета показан ниже:

Java Servlet Рисунок 1: обработка сервлетов пользовательских запросов

Рисунок 1: сервлетная обработка пользовательских запросов

  • Запрос отправляется клиентом в контейнер сервлета. Контейнер действует как веб-сервер.
  • Веб-сервер ищет сервлет и запускает его.
  • Запрос клиента обрабатывается сервлетом и отправляет ответ обратно на сервер.
  • Затем ответ сервера направляется клиенту.

1.2 Достоинства

  • Сервлеты не зависят от платформы, так как они могут работать на любой платформе.
  • Servlet API наследует все функции платформы Java.
  • Он строит и модифицирует логику безопасности для серверных расширений.
  • Сервлеты наследуют безопасность, обеспечиваемую веб-сервером.
  • В сервлете только один экземпляр запросов выполняется одновременно. Он не запускается в отдельном процессе. Таким образом, он экономит память, устраняя накладные расходы на создание нового процесса для каждого запроса.

2. Жизненный цикл

Жизненный цикл сервлета описывает, как контейнер сервлета управляет объектом сервлета.

  • Загрузить класс сервлетов
  • Экземпляр сервлета создается веб-контейнером при загрузке класса сервлета
  • init() : вызывается только один раз при создании сервлета. Нет необходимости вызывать его снова и снова для нескольких запросов.
1
2
3
public void init() throws ServletException {
 
 }
  • service() : он вызывается веб-контейнером для обработки запроса от клиентов. Здесь фактическое функционирование кода сделано. Веб-контейнер вызывает этот метод каждый раз при получении запроса на сервлет.

Он вызывает doGet() , doPost() , doTrace() , doPut() , doDelete() и другие методы

  • doGet() :
1
2
3
4
public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException, IOException {
// code
}
  • doPost() :
1
2
3
4
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // code
}
  • destroy() : используется для очистки ресурсов и вызывается перед удалением экземпляра сервлета.
1
public void destroy()
Сервлет Java Рисунок 2. Жизненный цикл сервлета

Рисунок 2: Жизненный цикл сервлета

3. Контейнер

Он известен как механизм сервлетов, который управляет компонентами Java-сервлетов поверх веб-сервера для запроса, отправляемого клиентом.

3.1 Услуги

Сервлет Контейнер предоставляет следующие услуги:

  • Он управляет жизненным циклом сервлета.
  • Ресурсы, такие как сервлеты, страницы JSP и файлы HTML, управляются контейнером сервлетов.
  • Он добавляет идентификатор сеанса к пути URL для поддержания сеанса.
  • Обеспечивает охрану.
  • Он загружает класс сервлета из сетевых служб, файловых систем, таких как удаленная файловая система и локальная файловая система.

3.2 Контейнер сервлетов

Контейнер сервлета может быть настроен с веб-сервером для управления сервлетами тремя способами, перечисленными ниже:

  • Автономный контейнер
  • Контейнер в процессе
  • Контейнер вне процесса

Автономный контейнер : в этом типе функциональность веб-сервера берется контейнером сервлета. Здесь контейнер тесно связан с веб-сервером.

Контейнер In-Process . В этом контейнере выполняется процесс веб-сервера.

Контейнер Out-Process : в этом типе необходимо настроить контейнер сервлета для запуска вне процесса веб-сервера. Он используется в некоторых случаях, например, в случае необходимости запуска сервлетов и контейнеров сервлетов в разных процессах / системах.

4. Демо: для начала

Вот пример, демонстрирующий демонстрационный сервлет. Выполните следующие действия, чтобы начать работу с первым приложением сервлета в NetBeansIDE.

Шаг 1. Откройте NetBeansIDE -> Файл -> Новый проект-> Веб-приложение -> Установить имя проекта как WebApplicationServletDemo

Сервлет Java Рисунок 3. Создание нового проекта WebApplication в NetBeansIDE: WebApplicationServletDemo

Рисунок 3: Создание нового проекта WebApplication в NetBeansIDE: WebApplicationServletDemo

Шаг 2: Теперь нажмите Next>, как показано выше. Это создаст новый проект со следующей структурой каталогов.

Сервлет Java Рисунок 4: Каталог проекта после создания нового проекта

Рисунок 4: Каталог проектов после создания нового проекта

Шаг 3: Создайте новое приложение сервлета, нажав правой кнопкой мыши на Project Directory-> New -> Servlet

Сервлет Java Рисунок 5: Добавление файла сервлета

Рисунок 5: Добавление файла сервлета

Шаг 4: Добавьте имя класса сервлета как « ServletDemo » и нажмите « Далее» .

Сервлет Java Рисунок 6: Добавление имени класса сервлета

Рисунок 6: Добавление имени класса сервлета

Шаг 5. Теперь настройте развертывание сервлета, выбрав « Добавить информацию в дескриптор развертывания (web.xml) » и добавив шаблон URL (видимая ссылка) в виде ServletDemo . Этот шаг создаст файл web.xml в папке WEB-INF .

Сервлет Java Рисунок 7. Настройка развертывания сервлета

Рисунок 7: Настройка развертывания сервлета

Шаг 6: Нажмите Finish, как показано выше, это добавит сервлет ServletDemo.java в директорию проекта. Проверьте изменения в структуре каталогов:

Сервлет Java Рисунок 8: Изменения в каталоге проекта после настройки

Рисунок 8: Изменения в каталоге проекта после настройки

Вот код дескриптора развертывания (web.xml) с URL- шаблоном в виде / ServletDemo :

Листинг 1: web.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
            30
</session-timeout>
</session-config>
</web-app>

Вот,

1
2
3
4
<servlet-name>: name given to Servlet
<servlet-class>: servlet class
<servlet-mapping>: maps internal name to URL
<url-pattern>: link displays when Servlet runs

Гиперссылка Next упоминается как ServletDemo . Таким образом, когда пользователь нажимает на нее, страница перенаправляется на сервлет ServletDemo , URL-шаблон которого упоминается как ServetDemo :

Листинг 2: index.html

01
02
03
04
05
06
07
08
09
10
11
12
<html>
<head>
<title>Welcome</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div><h2>Welcome</h2></div>
<p>We're still under development stage. Stay Tuned for our website's new design and learning content.</p>
<a href="ServletDemo"><b>Next</b></a>
</body>
</html>

Листинг 3: ServletDemo.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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 ServletDemo extends HttpServlet {
 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet ServletDemo</title>");           
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet ServletDemo at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlets</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<br /><p><h2>First Demo Servlet application</h2><br />Here, the URL-pattern is ServletDemo in web.xml. So, the address is <i>WebApplicationServletDemo/ServletDemo</i>.</p>");
            out.println("<br /><br /><a href=\"index.html\">Previous Page</a>");
            out.println("</body>");
            out.println("</html>");
        }
        finally
        {
        out.close();
        }
    }
}
Сервлет Java Рисунок 9: Вывод, показывающий страницу приветствия index.html

Рисунок 9: Вывод, показывающий страницу приветствия index.html

Сервлет Java Рисунок 10: Вывод, показывающий перенаправление в ServletDemo.java

Рисунок 10: Вывод, показывающий перенаправление в ServletDemo.java

5. Фильтр

Фильтры преобразуют содержимое запросов, ответов и информацию заголовка из одного формата в другой. Это многоразовые коды.

  • Класс фильтра объявлен в дескрипторе развертывания.
  • Используется для написания повторно используемых компонентов.
  • Запрос обрабатывается до его вызова с использованием фильтров.
  • Он может использоваться в веб-приложении для некоторых задач, таких как:
    • Проверка
    • компрессия
    • верификация
    • интернационализация

5.1 Интерфейс

Он состоит из этих 3 фильтров:

Сервлет Java Рисунок 11: Интерфейсы API фильтров

Рисунок 11: Интерфейсы API фильтра

Фильтр

Это начальный и базовый интерфейс, который должен реализовывать весь класс фильтра. Интерфейс Java.servlet.Filter имеет следующие методы:

методы Описание
init(FilterConfig) Этот метод инициализирует фильтр
doFilter(ServletRequest, ServletResponse, FilterChain) Этот метод инкапсулирует служебную логику в ServletRequest для генерации ServletResponse. FilterChain направляет пару запрос / ответ на следующий фильтр.
destroy() Уничтожает экземпляр класса фильтра.

FilterConfig

Его объект используется при инициализации фильтров. Дескриптор развертывания (web.xml) состоит из информации о конфигурации. Объект интерфейса FilterConfig используется для получения информации о конфигурации фильтра, указанного в web.xml . Его методы упомянуты ниже:

методы Описание
getFilterName() Возвращает имя фильтра в web.xml
getInitParameter(String) Возвращает значение указанного параметра инициализации из web.xml
getInitParameterNames() Возвращает перечисление всех параметров инициализации фильтра.
getServletContext() Возвращает объект ServletContext.

FilterChain

Здесь хранится информация о более чем 1 фильтре (цепочке). Все фильтры в этой цепочке должны применяться по запросу перед обработкой запроса.

5.2 Пример

Это пример, показывающий применение фильтров в NetBeansIDE. Создайте проект WebApplication WebApplicationFilterDemo так же, как показано в разделе « Демо ». Новый фильтр можно добавить в веб-приложение, щелкнув правой кнопкой мыши по каталогу проекта -> Создать -> Фильтр.

Сервлет Java Рисунок 12. Добавление нового фильтра в веб-приложение.

Рисунок 12. Добавление нового фильтра в веб-приложение.

Сервлет Java Рисунок 13: Добавьте Имя класса как NewFilter и нажмите Next

Рисунок 13: Добавьте имя класса как NewFilter и нажмите Next

Настройте развертывание фильтра, установив флажок « Добавить информацию в дескриптор развертывания (web.xml) ». Теперь кнопка Next здесь отключена из-за ошибки, выделенной на рисунке 13. Ошибка « Введите хотя бы один шаблон URL » может быть устранена нажатием « New ».

Сервлет Java Рисунок 14: Настройте развертывание фильтра, установив флажок «Добавить информацию в дескриптор развертывания (web.xml)»

Рисунок 14. Настройте развертывание фильтра, установив флажок «Добавить информацию в дескриптор развертывания (web.xml)».

Теперь фильтр сопоставляется путем добавления шаблона URL, как показано на рисунке 15.

Сервлет Java Рисунок 15: Отображение фильтра

Рисунок 15: Отображение фильтра

После добавления нового фильтра и нажатия кнопки ОК ошибка будет устранена. Теперь добавьте init-параметр с именем и значением. Затем нажмите Готово .

Сервлет Java Рисунок 16: Добавление параметра init

Рисунок 16: Добавление параметра init

Листинг 4: web.xml

Фильтр NewFilter может применяться к каждому сервлету, так как здесь указывается / * для шаблона URL.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<filter>
<filter-name>NewFilter</filter-name>
<filter-class>NewFilter</filter-class>
  <init-param>
      <param-name>newParam</param-name>
      <param-value>valueOne</param-value>
  </init-param>
</filter>
<filter-mapping>
     <filter-name>NewFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
    <session-timeout>
            30
   </session-timeout>
</session-config>
</web-app>

Листинг 5: NewFilter.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
public class NewFilter implements Filter {
 
    public void init(FilterConfigfilterConfig) {       
        // init parameter
        String value = filterConfig.getInitParameter("newParam");
 
        // displaying init parameter value
        System.out.println("The Parameter value: " + value);
    }
 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
 
        // IP address of the client machine.  
        String remoteAddress = request.getRemoteAddr();
 
        // Returns the remote address
        System.out.println("Remote Internet Protocl Address: "+ remoteAddress);
 
        chain.doFilter(request,response);
    }
 
    public void destroy( ){
 
    }
}
Сервлет Java Рисунок 17: Отображение вывода консоли

Рисунок 17: Отображение вывода консоли

6. Сессия

Это коллекция HTTP-запросов между клиентом и сервером. Сеанс уничтожается, когда он истекает, и его ресурсы возвращаются в механизм сервлета.

6.1 Обработка сеансов

Это средство для отслеживания данных сеанса. Это представляет данные, переданные в сеансе. Он используется, когда веб-сервер может потребовать данные сеанса из одного сеанса для выполнения задач в одном или разных сеансах. Обработка сеансов также известна как отслеживание оценки.

6.2 Механизмы обработки сеансов

Существует четыре механизма для обработки сеанса:

Перезапись URL : данные сеанса, требуемые в следующем запросе, добавляются к пути URL, используемому клиентом для выполнения следующего запроса.

· Строка запроса: строка, добавленная после запрошенного URI, является строкой запроса. Строка добавляется с разделителем как ‘?’ характер.

Пример 1): http://localhost:8080/newproject/login?user=test&passwd=abcde

· Информация о пути: это часть URI запроса. Данные сеанса могут быть добавлены в часть информации о пути URI запроса.

Пример 2): http://localhost:8080/newproject/myweb/login;user=test&passwd=abcde

Скрытое поле формы : тип поля формы HTML, которое остается скрытым в представлении. Некоторые другие поля формы: текстовое поле, пароль и т. Д. Этот подход можно использовать с запросами на основе форм. Он просто используется для сокрытия пользовательских данных от других типов пользователей.

Пример 3: <input type="hidden" username="name" value="nameOne"/>

Cookies : это файл, содержащий информацию, отправляемую клиенту сервером. Файлы cookie сохраняются на стороне клиента после передачи клиентам (с сервера) через заголовок ответа HTTP.

Куки считаются лучшими, когда мы хотим уменьшить сетевой трафик. Его атрибутами являются имя, значение, домен, номер версии, путь и комментарий. Пакет javax.servlet.http состоит из класса имен Cookie.

Некоторые методы в классе javax.servlet.http.Cookie перечислены ниже:

  • setValue (String)
  • getValue()
  • getName()
  • setComment(String)
  • getComment()
  • setVersion(String)
  • getVersion()
  • setDomain(String)
  • setPath(String)
  • getPath()
  • setSecure(boolean)
  • getSecure(boolean)

HTTP-сеанс : предоставляет сервис управления доступом, реализованный через объект HttpSession.

Некоторые методы объекта HttpSession перечислены здесь; это указано в официальной документации Oracle :

метод Описание
public Object getAttribute(String name) Он возвращает объект, связанный с указанным именем в этом сеансе, или ноль, если ни один объект не связан с именем.
public Enumeration getAttributeNames() Он возвращает перечисление объектов String, содержащих имена всех объектов, связанных с этим сеансом.
public String getId() Возвращает строку, содержащую уникальный идентификатор, назначенный этому сеансу.
public long getCreationTime() Возвращает время создания этого сеанса, измеренное в миллисекундах с полуночи 1 января 1970 года по Гринвичу.
public long getLastAccessedTime() Он возвращает последний раз, когда клиент отправил запрос, связанный с этим сеансом.
public int getMaxInactiveInterval() Он возвращает максимальный интервал времени в секундах, в течение которого контейнер сервлета будет поддерживать этот сеанс открытым между клиентскими обращениями.
public void invalidate() Это делает недействительным этот сеанс, а затем отменяет привязку любых объектов, связанных с ним.
public boolean isNew() Он возвращает true, если клиент еще не знает о сеансе или если клиент решает не присоединяться к сеансу.

6.3 Пример

Информация о сеансе, такая как идентификатор сеанса, время создания сеанса, время последнего доступа и другие, выводится в этом примере.

Листинг 6: ServletSession.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class ServletSession extends HttpServlet {
 
@Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
           // session object creation
           HttpSessionnewSession = request.getSession(true);
      // Session creation time.
      Date cTime = new Date(newSession.getCreationTime());
      // The last time the client sent a request.
      Date lTime = new Date( newSession.getLastAccessedTime());
 
      /* sets the time, in seconds, between client requests before the servlet container   
      invalidates this session */
      newSession.setMaxInactiveInterval(1 * 60 * 60);
      String str = "Website | Session";
 
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
 
      String document =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
      out.println(document +
                "<html>\n" +
                "<head><title>" + str + "</title></head>\n" +
                "<body bgcolor=\"#bbf5f0\">\n" +
                 "<h2>Website: Displaying Session Information</h2>\n" +
                "<table border=\"2\">\n" +
                "<tr>\n" +
                "  <td>Unique identifier assigned to this session</td>\n" +
                "  <td>" + newSession.getId() + "</td>"
              + "</tr>\n" +
                "<tr>\n" +
                "  <td>The time when this session was created</td>\n" +
                "  <td>" + cTime +
                "  </td>"
              + "</tr>\n" +
                "<tr>\n" +
                "  <td>The last time the client sent a request associated with this session</td>\n"
              + "  <td>" + lTime +
                "  </td>"
              + "</tr>\n" +
                "</tr>\n" +
                "<tr>\n" +
                "  <td> the maximum time interval, in seconds that the servlet container will keep this session open between client accesses.</td>\n" +
                "  <td>" + newSession.getMaxInactiveInterval() +
                "  </td>"
              + "</tr>\n" +
                     "</table>\n" +
                "</body></html>");
  }
}
Сервлет Java Рисунок 18: Отображение вывода

Рисунок 18: Отображение вывода

7. Обработка исключений

Исключения используются для обработки ошибок. Это реакция на невыносимые условия. Здесь приводится роль web.xml, то есть описания развертывания, которое используется для запуска страниц JSP и сервлетов. Контейнер ищет конфигурации в web.xml на соответствие. Таким образом, в web.xml эти элементы типа исключения используются для соответствия с типом брошенного исключения, когда сервлет генерирует исключение.

7.1 Конфигурация кода ошибки

Сервлет / HandlerClass вызывается, когда возникает ошибка с кодом состояния 403, как показано ниже:

Листинг 7: Для кода ошибки 403

1
2
3
4
<error-page>
  <error-code>403</error-code>
  <location>/HandlerClass</location>
</error-page>

7.2 Конфигурация типа исключения

Если приложение выдает IOException, тогда сервлет / HandlerClass вызывает контейнер:

Листинг 8: Для типа исключения IOException

1
2
3
4
<error-page>
  <exception-type>java.io.IOException</exception-type >
  <location>/HandlerClass</location>
</error-page>

Если вы хотите избежать дополнительных затрат на добавление отдельных элементов, используйте java.lang.Throwable качестве типа исключения:

Листинг 9: Для всех исключений упомяните java.lang.Throwable:

1
2
3
4
<error-page>
  <exception-type>java.lang.Throwable</exception-type >
  <location>/HandlerClass</location>
</error-page>

8. Отладка

Клиент-серверные взаимодействия в сервлетах встречаются в большом количестве. Это затрудняет поиск ошибок. Для предупреждений о местонахождении и ошибок можно использовать разные способы.

8.1 Регистрация сообщений

Журналы предназначены для получения информации о предупреждениях и сообщениях об ошибках. Для этого используется стандартный метод регистрации. Servlet API может генерировать эту информацию с помощью метода log (). Используя Apache Tomcat, эти журналы можно найти в TomcatDirectory / logs.

8.2 Java Debugger

Сервлеты можно отлаживать с помощью JDB Debugger, т.е. Java Debugger. В этом случае отлаживаемая программа называется sun.servlet.http.HttpServer. Задайте путь к классу отладчика для поиска следующих классов:

  • servlet.http.HttpServer
  • server_root / servlets и server_root / classes: с помощью этого отладчик устанавливает точки останова в сервлете.

8.3 Заголовки

Пользователи должны иметь некоторую информацию, связанную со структурой заголовков HTTP. О проблемах можно судить по их использованию, что может дополнительно обнаружить некоторые неизвестные ошибки. Информация, связанная с заголовками HTTP, может помочь вам в поиске ошибок. Изучение запросов и ответов может помочь угадать, что не так хорошо.

8.4 Обновить

Обновите веб-страницу вашего браузера, чтобы избежать кеширования предыдущего запроса. На некоторых этапах браузер показывает запрос, выполненный ранее. Это известный момент, но он может быть проблемой для тех, кто работает правильно, но не может правильно отобразить результат.

Листинг 21: ServletDebugging.java

Здесь показана отладка сервлета, которая отображает ошибки в журнале Tomcat.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletDebugging extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // parameter "name"
        String strpm = request.getParameter("name");
 
        ServletContext context = getServletContext( );
 
        // checks if the parameter is set or not
        if (strpm == null || strpm.equals(""))
        context.log("No message received:", new IllegalStateException("Sorry, the
        parameter is missing."));
        else
        context.log("Here is the visitor's message: " +strpm);
         
    }
}
Сервлет Java Рисунок 19: Вывод, видимый в журнале Apache Tomcat

Рисунок 19: Вывод, видимый в журнале Apache Tomcat

9. Интернационализация

При создании глобального веб-сайта учитываются некоторые важные моменты, в том числе язык, связанный с национальностью пользователя. Интернационализация — это включение веб-сайта для предоставления контента, переведенного на разные языки в соответствии с национальностью пользователя.

9.1 Методы

Для нахождения посетителей местного региона и языка используются следующие методы:

метод Описание
String getCountry() Возвращает код страны.
String getDisplayCountry() Возвращает имя для страны посетителей.
String getLanguage() Возвращает код языка.
String getDisplayLanguage() Возвращает имя для языка посетителей.
String getISO3Country() Возвращает трехбуквенное сокращение для страны посетителей.
String getISO3Language() Возвращает трехбуквенное сокращение для языка посетителей.

9.2 Пример

В примере отображается текущая локаль пользователя. В NetBeansIDE создан следующий проект:

1
2
3
4
Project Name: WebApplicationInternationalization
Project Location: C:\Users\Test\Documents\NetBeansProjects
Servlet: ServletLocale
URL Pattern: /ServletLocale

Листинг 22: ServletLocale.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletLocale extends HttpServlet {
 
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
           //Get the client's Locale
      Locale newloc = request.getLocale();
      String country = newloc.getCountry();
 
      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
 
      // this sets the page title and body content
      String title = "Finding Locale of current user";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " +
      "transitional//en\">\n";
       out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n" +
        "<body bgcolor=\"#C0C0C0\">\n" + "<h3>" + country + "</h3>\n" +
        "</body></html>");
    }
}

Листинг 23: index.html с гиперссылкой в ​​виде URL-шаблона — ServletLocale

01
02
03
04
05
06
07
08
09
10
11
<html>
<head>
<title>User's Location</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <p>Click on the following link for finding the locale of visitor:</p>
    <a href="ServletLocale"><b>Location</b></a>
</body>
</html>

Листинг 24: web.xml с URL-шаблоном в виде / ServletLocale

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<servlet>
    <servlet-name>ServletLocale</servlet-name>
    <servlet-class>ServletLocale</servlet-class>
</servlet>
<servlet-mapping>
     <servlet-name>ServletLocale</servlet-name>
     <url-pattern>/ServletLocale</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
            30
</session-timeout>
</session-config>
</web-app>
Сервлет Java Рисунок 20: Отображение index.html

Рисунок 20: Отображение index.html

Сервлет Java Рисунок 21: Отображение локали в качестве вывода

Рисунок 21: Отображение локали в качестве вывода

10. Ссылки

10.1 Веб-сайт

10.2 Книги

  • Head First Servlets и JSP: сдача сертификационного экзамена Sun для сертифицированных веб-компонентов. Авторы: Bryan Basham, Kathy Sierra, Bert Bates
  • Сервлет и JSP (учебник), Буди Курниаван

11. Заключение

Сервлет отличается высокой производительностью и простотой использования по сравнению с традиционными интерфейсами Common Gateway (CGI). С помощью этого руководства вы можете легко изучить концепции, связанные с сервлетами Java. Коды проекта разрабатываются в рамках NetBeansIDE, так что вы получите представление о некоторых из его удивительных удобных функций.

12. Скачать

Это было руководство по Java-сервлетам.