Как настроить список файлов приветствия в 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... Как это сделать правильно?
4 ответа
Вам нужно поместить файл JSP в /index.jsp
вместо того, чтобы в /WEB-INF/jsp/index.jsp
, Таким образом, весь сервлет, кстати, излишен.
WebContent
|-- META-INF
|-- WEB-INF
| `-- web.xml
`-- index.jsp
Если вы абсолютно уверены, что вам нужно вызывать сервлет таким странным способом, то вам следует сопоставить его с шаблоном URL /index.jsp
вместо /index
, Вам нужно только изменить его, чтобы получить диспетчер запросов от request
вместо от config
и избавиться от всего init()
метод.
В случае, если вы действительно намереваетесь иметь "сервлет домашней страницы" (и, следовательно, не файл приветствия), который имеет совершенно иное назначение, а именно файл по умолчанию, который должен обслуживаться при запросе папки, который, таким образом, не является корневым папка), тогда вы должны сопоставить сервлет с шаблоном URL пустой строки.
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
Смотрите также Разница между / и /* в шаблоне отображения сервлета.
Я думаю, что вы хотите, чтобы ваш сервлет индекса действовал как страница приветствия, поэтому измените на:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
Так что будет использован индексный сервлет. Обратите внимание, что для этого вам понадобится контейнер сервлетов спецификации 2.4.
Заметьте также, что @BalusC получает мой голос, потому что ваш индексный сервлет сам по себе лишний.
Я увидел хорошее решение в этой ссылке на стек-поток, которое может помочь читателям в проблеме обработки сервлета defulat с помощью шаблона URL-адреса с пустой строкой "":
@WebServlet("")
или же
<servlet-mapping>
<servlet-name>yourHomeServlet</servlet-name>
<url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>
Это мой способ настроить сервлет как страницу приветствия.
Делюсь за кого беспокойство.
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");
}
}
Я просто заявил, как показано ниже, в файле web.xml, и он работает для меня:
<welcome-file-list>
<welcome-file>/WEB-INF/jsps/index.jsp</welcome-file>
</welcome-file-list>
И НИКАКИХ страниц html/jsp, присутствующих в общедоступном каталоге, кроме статических ресурсов (css, js, изображений). Теперь я могу получить доступ к своей странице индекса с URL-адресом, например:http://localhost:8080/app/ Его вызывающая страница /WEB-INF/jsps/index.jsp. При размещении в производственной среде конечный URL-адрес выглядит как https://eisdigital.com/
Он основан на том, из какого файла вы пытаетесь получить доступ к этим файлам.
Если он находится в той же папке, где находится файл вашего рабочего проекта, вы можете использовать только имя файла. нет необходимости пути.
Если он находится в другой папке, которая находится в той же родительской папке вашего рабочего файла проекта, то вы можете использовать расположение, как в следующем /javascript/sample.js
В вашем примере, если вы пытаетесь получить доступ к своему js-файлу из html-файла, вы можете использовать следующую папку
../javascript/sample.js
префикс../ перейдет в родительскую папку файла (папка вверх)