servlet 3.0 @WebServlet использовать .. что будет в web.xml? - PullRequest
12 голосов
/ 01 апреля 2012

Я хочу знать структуру каталогов для использования сервлета 3.0 с Tomcat 7. Я использовал аннотацию @WebServlet без параметров инициализации.

Я хочу знать, что тогда будет написано в файле web.xml ?? Есть и еще предстоит написать ... ??

Файл хранится в папке классов кота.

Ответы [ 2 ]

24 голосов
/ 01 апреля 2012

Это все, что вам нужно в web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

3.0-совместимый контейнер сервлетов (например, Tomcat 7) найдет @WebServlet автоматически.

2 голосов
/ 08 июля 2016

Я прочитал ответ Томаша Нуркевича, за который до сих пор проголосовали 22 человека.Пожалуйста, обратите внимание, он ответил 4 года назад .

Мне было интересно, зачем мне нужен почти пустой XML-файл?

И я попробовал с привет миром с Servlet 3.

package com.servlet3;


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("/helloServlet3")
public class HelloServlet3 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.print("<html><body>");
        out.print("<h3>Hello Servlet</h3>");
        out.print("</body></html>");
    }
}

И я могу успешно запустить это крошечное веб-приложение.

enter image description here

Важное примечание:

обратите внимание, в данном примере web.xml не существует .

enter image description here

Итак,нам не нужно такого рода почти пустого web.xml.

но web.xml обязательный ,если вам нужна аутентификация на основе форм (но без безопасности Spring ). потому что нет эквивалентной аннотации для <login-config>.

В соответствии с этимотправлять сообщения в SO

<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/login</form-login-page>
    <form-error-page>/login?event=Retry</form-error-page>
  </form-login-config>
</login-config>

... единственный способ настроить аутентификацию на основе форм - использовать дескриптор развертывания (web.xml или web-фрагмент.xml).

Согласно спецификации JSR-315 Servlet 3.0on :: Ch13.6.3 (pg132):

"Дескриптор развертывания веб-приложения содержит записи для формы входа и страницы ошибок ..."

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

UPDATE:

Приведенная выше strike out информация относится к Java EE6 .

В Java EE7 , мы можем сделать на основе формыаутентификация программным способом ..

Из Java EE7 Официальное руководство ,

48.3.1 Аутентификация пользователей программно

Следующие методы интерфейса HttpServletRequest позволяют программно проверять подлинность пользователей веб-приложения.

authenticate позволяет приложению инициировать проверку подлинности вызывающего запроса с помощьюконтейнер изнутри неограниченного запросатекст.Диалоговое окно входа в систему отображает и собирает имя пользователя и пароль для целей аутентификации.

login позволяет приложению собирать информацию об имени пользователя и пароле в качестве альтернативы указаниюпроверка подлинности на основе форм в приложении дескриптор развертывания .

logout позволяет приложению сбрасывать личность вызывающего абонента в запросе.

...