无法获取Servlet设置的属性(在请求范围内)并转发给JSP

时间:2015-01-14 09:35:51

标签: java jsp servlets

我在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 Reference和HeadFirst O&#39; Reilly指南),这应该是直截了当的,但即使我使用scriptlet,我也只是没有文本。我尝试了Glassfish和TomEE

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我或多或少地确定你的问题是你的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>