Сервлеты предназначены для контроля, предварительной обработки и / или пост-обработки запросов, а не для представления данных. Здесь JSP является технологией представления, предоставляющей шаблон для записи HTML / CSS / JS. Вы можете управлять потоком страниц с помощью таких тегов, как JSTL , и получать доступ к любым атрибутам области, используя EL .
Сначала создайте SearchServlet
и сопоставьте его с url-pattern
из /search
и реализуйте doGet()
и doPost()
следующим образом:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Preprocess request here and finally send request to JSP for display.
request.getRequestDispatcher("/WEB-INF/search.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Postprocess request here. Get results from your DAO and store in request scope.
String search = request.getParameter("search");
List<Result> results = searchDAO.find(search);
request.setAttribute("results", results);
request.getRequestDispatcher("/WEB-INF/search.jsp").forward(request, response);
}
Вот как будет выглядеть JSP /WEB-INF/search.jsp
, он использует JSTL (просто поместите JAR в /WEB-INF/lib
) для управления потоком страниц.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<form action="search" method="post">
<input type="text" name="search">
<input type="submit" value="search">
</form>
<c:if test="${not empty results}">
<p>There are ${fn:length(results)} results.</p>
<table>
<c:forEach items="${results}" var="result">
<tr>
<td>${result.id}</td>
<td>${result.name}</td>
<td>${result.value}</td>
</tr>
</c:forEach>
</table>
</c:if>
Обратите внимание, что JSP находится в /WEB-INF
, чтобы запретить пользователям прямой доступ по URL. Для этого они вынуждены использовать сервлет к http://example.com/contextname/search
.
Чтобы узнать больше о JSP / Сервлетах, я могу порекомендовать Учебные пособия Марти Холла по Coreservlets.com . Чтобы узнать больше о логике searchDAO
, я могу порекомендовать этот базовый учебник по DAO .
Чтобы пойти дальше, вы всегда можете использовать MVC-фреймворк, построенный на основе Servlet API, такой как Sun JSF , Apache Struts , Spring MVC и так далее, так что в итоге вы получите только файлы Javabeans и JSP / XHTML. Средние инфраструктуры MVC позаботятся о сборе параметров запроса, их проверке / преобразовании, обновлении Javabeans с этими значениями, вызове некоторого метода действия Javabean для их обработки и так далее. Это делает сервлет «лишним» (который, тем не менее, все еще используется в качестве основного процессора платформы).