Как настроить список приветственных файлов в web.xml

У меня это есть в моем документе web.xml. Я пытаюсь получить список приветствия, поэтому мне больше не нужно вводить путь для домашней страницы. Но каждый раз щелкнув приложение на моей странице tomcat, он отображает запрашиваемый ресурс.

<listener>
    <listener-class>web.Init</listener-class>
</listener>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
    <servlet-name>index</servlet-name>
    <servlet-class>web.IndexServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>index</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>

Мой сервлет для страницы jsp

package web;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

public class IndexServlet extends HttpServlet
{
    private Logger logger = Logger.getLogger(this.getClass());
    private RequestDispatcher jsp;

    public void init(ServletConfig config) throws ServletException
    {
        ServletContext context = config.getServletContext();
        jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        logger.debug("doGet()");
        jsp.forward(req, resp); 
    }
}

Почему он все еще не работает? Мне все еще нужно набирать /index в моем url... Как это сделать правильно?

Ответ 1

Вам нужно поместить файл JSP в /index.jsp вместо /WEB-INF/jsp/index.jsp. Таким образом, весь сервлет, кстати, является сверхъестественным.

WebContent
 |-- META-INF
 |-- WEB-INF
 |    `-- web.xml
 `-- index.jsp

Если вы абсолютно уверены, что вам нужно вызвать сервлет таким странным способом, тогда вы должны сопоставить его по шаблону URL /index.jsp вместо /index. Вам нужно только его изменить, чтобы получить диспетчера запросов от request вместо config и избавиться от всего метода init().

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

<servlet-mapping>
    <servlet-name>index</servlet-name>
    <url-pattern></url-pattern>
</servlet-mapping>

См. также Разница между/и/* в шаблоне url для сопоставления сервлетов.

Ответ 2

Я предполагаю, что вы хотите, чтобы ваш индексный сервлет выполнял роль страницы приветствия, поэтому измените на:

<welcome-file-list>
   <welcome-file>index</welcome-file>
</welcome-file-list>

Таким образом, будет использоваться сервлет индекса. Обратите внимание: для этого вам понадобится контейнер 2.4 для сервлета.

Обратите внимание, что @BalusC получает мой голос, потому что ваш сервлет данных сам по себе лишний.

Ответ 3

Я видел хорошее решение в этой fooobar.com/questions/6481/..., которая может помочь читателям проблемы с обработкой сервлета defulat, используя шаблон пустой строки URL":

@WebServlet("")

или

<servlet-mapping>
    <servlet-name>yourHomeServlet</servlet-name>
    <url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>

Ответ 4

Это мой способ настроить сервлет как страницу приветствия.

Я разделяю для кого беспокойство.

web.xml

  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Demo</servlet-name>
        <servlet-class>servlet.Demo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo</servlet-name>
        <url-pattern></url-pattern>
    </servlet-mapping>

Класс сервлетов

@WebServlet(name = "/demo")
public class Demo extends HttpServlet {
   public void doGet(HttpServletRequest req, HttpServletResponse res)
     throws ServletException, IOException  {
       RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
   }
}

Ответ 5

Я просто объявил, как показано ниже в файле web.xml, и он работает для меня:

 <welcome-file-list>
    <welcome-file>/WEB-INF/jsps/index.jsp</welcome-file>
</welcome-file-list>

И никаких html/jsp страниц, присутствующих в общедоступном каталоге, кроме статических ресурсов (css, js, images). Теперь я могу получить доступ к своей странице индекса с помощью URL-адреса, например: http://localhost:8080/app/ Это вызывающая страница /WEB-INF/jsps/index.jsp. При размещении в прямом эфире на производстве итоговый URL выглядит следующим образом https://eisdigital.com/

Ответ 6

Он основан на том, из какого файла вы пытаетесь получить доступ к этим файлам.

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

Если он находится в другой папке, которая находится под одной и той же родительской папкой вашего рабочего файла проекта, вы можете использовать местоположение, как в следующем /javascript/sample.js

В вашем примере, если вы пытаетесь получить доступ к своему js файлу из своего html файла, вы можете использовать следующее расположение

../JavaScript/sample.js

префикс../перейдет в родительскую папку файла (перемещение папки вверх)