Если вы не хотите использовать какой-либо объект, вы можете использовать setattr()
внутри вашего текущего модуля:
import sys
current_module = module = sys.modules[__name__] # i.e the "file" where your code is written
setattr(current_module, 'variable_name', 15) # 15 is the value you assign to the var
print(variable_name) # >>> 15, created from a string
Вы можете использовать метод 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
доступен только с сервлета 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
- это путь развертывания контекста webapp, а /products
- шаблон URL сервлета. Если у вас есть какой-либо HTML <form>
внутри него, просто поставьте POST на текущий URL-адрес, например <form method="post">
, и добавьте doPost()
к тому же самому сервлету для выполнения задания постобработки , Продолжите приведенные ниже ссылки для более конкретных примеров.
Если вы хотите вызвать конкретный метод сервлета, чем использовать язык выражений. Например, вы можете сделать что-то вроде:
Servlet
ForexTest forexObject = new ForexTest();
request.setAttribute("forex", forexObject);
JSP
<body bgcolor="#D2E9FF">
Current date : ${forex.rate}
</body>
ForexTest
должен быть сервлетом, но он вовсе не обязательно должен быть сервлетом вообще. Обычный подход заключается в том, что он является джавабеем и что эти get
методы должны вызывать только для доступа к свойствам, а не для выполнения бизнес-логики.
– BalusC
14 October 2010 в 12:15
Конечно, вы можете просто включить его в свой action
в form
. Но вам нужно написать правильные doPost
или doGet
для обработки запроса!
Вам нужно будет использовать методы RequestDispatcher's forward / include в зависимости от вашего требования для достижения того же.
В JSP вам нужно использовать следующие теги:
Элемент позволяет включать либо статический, либо динамический файл в JSP-файле. Результаты включения статических и динамических файлов совершенно разные. Если файл является статическим, его содержимое включено в вызывающий JSP-файл. Если файл является динамическим, он действует на запрос и отправляет обратно результат, который включен в страницу JSP. Когда действие включения завершено, контейнер JSP продолжает обрабатывать оставшуюся часть JSP-файла.
, например
<jsp:include page="/HandlerServlet" flush="true">
Элемент перенаправляет объект запроса, содержащий информацию запроса клиента из одного JSP-файла в другой файл. Целевой файл может быть HTML-файлом, другим JSP-файлом или сервлетом, если он находится в том же контексте приложения, что и JSP-файл пересылки. Строки в исходном JSP-файле после элемента не обрабатываются.
, например
<jsp:forward page="/servlet/ServletCallingJsp" />
Проверьте расширенный пример JSP: JSP-Servlet Communication:
http://www.oracle.com/technology/sample_code/tech/java/jsps/ojsp/jspservlet.html