无法获取由 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>