无法获取由 Servlet 设置并转发到 JSP 的属性(在请求范围内)
Cannot get attribute (in request scope) set by Servlet and forwarded to JSP
我什至在 Whosebug 上尝试了几种解决方案,但 none 似乎有效:
我想将一个字符串从 Servlet 传递到 JSP 并用 EL 显示它。
我在 Netbeans 上创建了一个简单的普通项目,这是我添加的代码:
Servlet 代码:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message = "Hello";
request.setAttribute("message", message);
RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
dispatcher.forward(request, response);
}
JSP代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<h2 style="border: 2px solid brown; width: 20%"> Message is: ${message} </h2>
</body>
</html>
让我感到沮丧的是,即使对于文档(Oracle Api 参考和 HeadFirst O'Reilly 指南),这也应该是直截了当的,但即使我使用 scriptlet,我也没有得到任何文本。我尝试了 Glassfish 和 TomEE
尝试使用 ${requestScope.message}
而不是 ${message}
(基于)
我或多或少确定你的问题是你的 Servlet 没有被调用。在您的 Servlet 中放置一个控制台 (System.out.println) 输出并查看输出是否正在打印。
不要尝试直接访问 JSP 页面。 而是点击为您的 Servlet 映射的 URL。
您的 Servlet 可以通过两种方式映射:
1.注解
2. 部署描述符 (web.xml)
@WebServlet("/processForm")
public class UploadServlet extends HttpServlet {
// implement servlet doPost() and doGet()...
}
在上述情况下,如果您点击与您的 web 应用程序相关的 /processForm,将调用 UploadServlet,如果使用调度程序,将执行并转发由 Servlet 进行的任何处理。
下面显示了等效的描述符:
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.bla.bla.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/processForm</url-pattern>
</servlet-mapping>
我什至在 Whosebug 上尝试了几种解决方案,但 none 似乎有效: 我想将一个字符串从 Servlet 传递到 JSP 并用 EL 显示它。
我在 Netbeans 上创建了一个简单的普通项目,这是我添加的代码:
Servlet 代码:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message = "Hello";
request.setAttribute("message", message);
RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
dispatcher.forward(request, response);
}
JSP代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<h2 style="border: 2px solid brown; width: 20%"> Message is: ${message} </h2>
</body>
</html>
让我感到沮丧的是,即使对于文档(Oracle Api 参考和 HeadFirst O'Reilly 指南),这也应该是直截了当的,但即使我使用 scriptlet,我也没有得到任何文本。我尝试了 Glassfish 和 TomEE
尝试使用 ${requestScope.message}
而不是 ${message}(基于)
我或多或少确定你的问题是你的 Servlet 没有被调用。在您的 Servlet 中放置一个控制台 (System.out.println) 输出并查看输出是否正在打印。
不要尝试直接访问 JSP 页面。 而是点击为您的 Servlet 映射的 URL。
您的 Servlet 可以通过两种方式映射: 1.注解 2. 部署描述符 (web.xml)
@WebServlet("/processForm")
public class UploadServlet extends HttpServlet {
// implement servlet doPost() and doGet()...
}
在上述情况下,如果您点击与您的 web 应用程序相关的 /processForm,将调用 UploadServlet,如果使用调度程序,将执行并转发由 Servlet 进行的任何处理。
下面显示了等效的描述符:
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.bla.bla.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/processForm</url-pattern>
</servlet-mapping>