Вызов сервлета из файла JSP при загрузке страницы - PullRequest
7 голосов
/ 28 августа 2010

Можно ли вызвать сервлет из файла JSP без использования формы HTML?

Например, чтобы показать результаты из базы данных в таблице HTML во время загрузки страницы.

Ответы [ 4 ]

9 голосов
/ 28 августа 2010

Вы можете использовать doGet() метод сервлета для предварительной обработки запроса и перенаправить запрос в JSP.Затем просто укажите URL-адрес сервлета вместо URL-адреса JSP в ссылках и адресной строке браузера.

Например,

@WebServlet("/products")
public class ProductsServlet extends HttpServlet {

    @EJB
    private ProductService productService;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Product> products = productService.list();
        request.setAttribute("products", products);
        request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
    }

}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
    <c:forEach items="${products}" var="product">
        <tr>
            <td>${product.name}</td>
            <td>${product.description}</td>
            <td>${product.price}</td>
        </tr>
    </c:forEach>
</table>

Обратите внимание, что файл JSP находится внутри папки /WEB-INF, чтобы предотвратитьпользователи могут обращаться к нему напрямую без вызова сервлета.

Также обратите внимание, что @WebServlet доступен только с Servlet 3.0 (Tomcat 7 и т. д.), см. также аннотацию @ WebServlet с Tomcat 7 .Если вы не можете выполнить обновление или по какой-то причине вам нужно использовать web.xml, который не совместим с Servlet 3.0, вам придется вручную зарегистрировать сервлет по старинке в web.xml, как показано ниже, вместоиспользуя аннотацию:

<servlet>
    <servlet-name>productsServlet</servlet-name>
    <servlet-class>com.example.ProductsServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>productsServlet</servlet-name>
    <url-pattern>/products</url-pattern>
</servlet-mapping>

После правильной регистрации сервлета с помощью аннотации или XML, теперь вы можете открыть его по http://localhost:8080/context/products, где /context - это путь развернутого контекста веб-приложения, а /productsэто шаблон URL сервлета.Если у вас есть какой-либо HTML <form> внутри него, просто дайте ему POST к текущему URL, например, <form method="post"> и добавьте doPost() к тому же сервлету для выполнения задания постобработки.Перейдите по ссылкам ниже для более конкретных примеров.

См. Также

8 голосов
/ 28 августа 2010

Вам нужно будет использовать методы RequestDispatcher для пересылки / включения в зависимости от ваших требований для достижения того же.

В JSP вам нужно использовать следующие теги:

jsp: включая :

Элемент позволяет вам включить либо статический, либо динамический файл в файле JSP. Результат в том числе статические и динамические файлы достаточно разный. Если файл статический, его содержание включено в вызов файла JSP. Если файл динамический, он действует по запросу и отправляет обратно результат, который включен на странице JSP. Когда включить действие завершено, контейнер JSP продолжает обрабатывать остаток файл JSP.

, например

<jsp:include page="/HandlerServlet" flush="true">  

JSP: вперед :

Элемент пересылает объект запроса, содержащий клиента запросить информацию из одного файла JSP в другой файл. Целевой файл может быть файлом HTML, другим файлом JSP или сервлет, пока он находится в тот же контекст приложения, что и пересылка файла JSP. Линии в исходный файл JSP после элемент не обработаны.

* * Например, тысяча двадцать-три
<jsp:forward page="/servlet/ServletCallingJsp" />

Проверьте расширенный пример JSP: Связь JSP-сервлет:

http://www.oracle.com/technology/sample_code/tech/java/jsps/ojsp/jspservlet.html

0 голосов
/ 13 октября 2010

Если вы хотите вызвать конкретный метод сервлета, тогда вы также используете язык выражений. Например, вы можете сделать что-то вроде:

Servlet

ForexTest forexObject = new ForexTest();
request.setAttribute("forex", forexObject);

JSP

<body bgcolor="#D2E9FF">
Current date : ${forex.rate}
</body>
0 голосов
/ 29 августа 2010

Конечно, вы можете просто включить его в action в form. Но вы должны написать правильный doPost или doGet для обработки запроса!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...