2014-10-11 16 views
0

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

Я собираюсь сделать свою кодировку в спискеВсе сервлет и добавить атрибут к запросу. Мне нужно знать, правильно ли это? Могу ли я делать то, что мне нужно? Если нет, как это сделать?

+0

Если вы хотите использовать сервлет, используйте его с ajax, он будет делать именно то, что вы хотели. Если вы не можете включить сервлет в jsp: include.it, это возможно только в том случае, если у вас есть тип ответа – Divya

ответ

0

Ваш подход выглядит нормально. вы можете обернуть это в form. так что вы получите их в сервлете.

<form action="servletURL" method="post"> 
     <input type="text" id="search" name="search"/> 
     <input type="submit" value="Search" id="searchBtn"/> 
</form> 

вы можете получить эти значения с помощью request#getParameter в методе doPost().

1

Я не совсем уверен, понял ли я, что вы пытаетесь сделать. Но я считаю, что вы пытаетесь показать список данных на странице 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> 
+0

Вы показали ' doPost', но для страницы «index» я думаю, что 'doGet' является более подходящим ... –

+0

Серж уверен, что для индексной страницы метод get будет лучше, отредактирует ответ –

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.