Вызов сервлета при загрузке страницы индекса
Мне нужно загрузить список некоторых данных из базы данных и показать их на моей странице индекса JSP. Мой способ сделать это - вызвать сервлет на индексной странице следующим образом.
<body>
<jsp:include page="listAll" />
<fieldset>
<legend>Search Here</legend>
<input type="text" id="search" name="search"/>
<input type="button" value="Search" id="searchBtn"/>
</fieldset>
</body>
Я собираюсь сделать свое кодирование в сервлете listAll и добавить атрибут к запросу. Что мне нужно знать, так ли это? Могу ли я сделать то, что мне нужно, как это? Если нет, как это сделать?
3 ответа
В Java Web App есть атрибут файла web.xml, который называется welcome-file-list
,
welcome-file-list
сообщает веб-приложению, какие URL-адреса использовать, если не указано ничего более конкретного.
Как правило, это значение настроено для index.jsp
, но это может быть любое отображение в веб-приложении.
Если вы хотите, чтобы сервлет отвечал, а не index.jsp
, тогда вы бы правильно отобразили сервлет, а затем использовали эту ссылку в welcome-file-list
,
Рассматривать:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>pkg.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
Здесь мы имеем pkg.IndexServlet
сопоставлены с /index
, Мы также сообщаем приложению, что index
это файл приветствия для этого приложения. Итак, внутренне, когда приложение видит http://host.com/webapp
, он автоматически добавится index
к нему, а затем направьте его соответствующим образом, что приведет его к сервлету, сопоставленному с /index
,
Как только вы правильно настроили это, вы захотите сделать паттерн, который @Matthias делал здесь, где сервлет собирает данные, а затем пересылает их в JSP.
Я не совсем уверен, понял ли я, что вы пытаетесь сделать. Но я полагаю, что вы пытаетесь показать список данных на странице JSP и хотите внедрить сервлет, который выполняет тяжелую работу по получению всего из БД и тому подобного.
Если бы я был вами, я бы сделал это следующим образом: создайте сервлет, который выполняет фактические вызовы базы данных и загружает ваши данные в атрибут запроса. Затем вы пересылаете сервлет в JSP, который фактически отображает данные
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
List<DataElement> list = new ArrayList<DataElement>(); // lets assume this is the list we got from the DB
request.setAttribute("list", list);
String nextJSP = "/searchResults.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request,response);
}
Затем в JSP вы можете получить доступ к атрибутам запроса и перебрать их с помощью JSTL.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
<c:forEach var="dataElem" items="${list}">
Item <c:out value="${dataElem.someValue}"/><p>
</c:forEach>
</body>
</html>
Ваш подход выглядит хорошо. Вы можете обернуть эти вещи в form
, так что вы получите их в сервлете.
<form action="servletURL" method="post">
<input type="text" id="search" name="search"/>
<input type="submit" value="Search" id="searchBtn"/>
</form>
вы можете получить эти значения с помощью request#getParameter
в вашем doPost()
метод.