【问题标题】:Cannot get attribute (in request scope) set by Servlet and forwarded to JSP无法获取由 Servlet 设置并转发到 JSP 的属性(在请求范围内)
【发布时间】:2015-01-14 09:35:51
【问题描述】:

我什至在 StackOverflow 上尝试了几种解决方案,但似乎没有一个可行: 我想将字符串从 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 我都试过了

【问题讨论】:

  • 示例工作正常。你在使用过滤器吗?
  • @ZakiMak 不。我几乎不知道它们是干什么用的。
  • 我已经为您发布了答案。希望它会有所帮助。

标签: java jsp servlets


【解决方案1】:

我或多或少肯定你的问题是你的 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()...
}

在上述情况下,如果您点击相对于您的 webapp 的 /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>

【讨论】:

  • 我刚刚意识到我愚蠢地没有调用 servlet 名称,而只调用了 App 根目录。先生,我真诚地感谢您!
【解决方案2】:

尝试使用 ${requestScope.message} 而不是 ${message}

(基于https://stackoverflow.com/a/4912797/1843508

【讨论】:

  • 去过那里,做到了。没用。除了框架默认在几个隐式对象中搜索该名称包括 requestScope
猜你喜欢
  • 2015-04-18
  • 1970-01-01
  • 2011-02-28
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2014-02-25
  • 2015-05-03
相关资源
最近更新 更多