Вызов сервлета при загрузке страницы индекса

Мне нужно загрузить список некоторых данных из базы данных и показать их на моей странице индекса 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() метод.

Другие вопросы по тегам