Servlet向JSP传递值

4

我希望能够简单地将值从Servlet传递到JSP页面。我想要运行JSP文件,并在加载数据时从获取Servlet显示数据。

但是我得到了null:"Servlet communicated message to JSP: null "

以下是我的代码。

Java代码

package api;

public class ServletToJSP extends HttpServlet {
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //communicating a simple String message.
        String message = "Example source code of Servlet to JSP communication.";
        request.setAttribute("message", message);

        RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher("javaPapers.jsp");
        reqDispatcher.forward(request,response);


      }
}

jsp file

<%@ page import="api.ServletToJSP" language="java" %>


<html>
<body>
<%
  String message = (String) request.getAttribute("message");
  out.println("Servlet communicated message to JSP: "+ message);

 // Vector vecObj = (Vector) request.getAttribute("vecBean");
//  out.println("Servlet to JSP communication of an object: "+vecObj.get(0));
%>
</body>
</html>

web.xml

<servlet>
      <servlet-name>ServletToJSP</servlet-name>
      <servlet-class>api.ServletToJSP</servlet-class>
  </servlet>
  <servlet-mapping>

      <servlet-name>ServletToJSP</servlet-name>
      <url-pattern>/ServletToJSP/*</url-pattern>
  </servlet-mapping>

1
避免使用脚本片段,而是使用JSTL - araknoid
请在此处发布web.xml代码。你是如何调用servlet的? - Ved
除了JSTL之外,还有一种表达式语言可以访问值,因此您的消息将在jsp中作为${message}访问,而无需其余脚本代码的要求。http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html - Jaydee
你的欢迎文件是什么?你的servlet是如何被调用的? - user2575725
4个回答

3

有几个需要更改的地方:

在servlet中

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //communicating a simple String message.
    String message = "Example source code of Servlet to JSP communication.";
    request.setAttribute("message", message);
    request.getRequestDispatcher("javaPapers.jsp").forward(request,response);
}

在 JSP 中:
<html>
  <body>
    Servlet communicated message to JSP: ${message}
  </body>
</html>

所做的更改:

  • 在servlet中,使用request.getRequestDispatcher(String url)
  • 在jsp中,移除了servlet的引用。
  • 在jsp中,使用EL获取属性值。

0

替换

RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher("javaPapers.jsp");

使用

RequestDispatcher reqDispatcher = request.getRequestDispatcher("javaPapers.jsp");

ServletRequest.getRequestDispatcher(uri) 只接受相对于上下文根的绝对路径,因此必须以 '/' 开头。所以,代码可以更改为 getServletConfig().getServletContext().getRequestDispatcher("/javaPapers.jsp"); - BlackJoker

0

使用request.setAttribute("message", message);传递参数应该可以使用以下代码:

RequestDispatcher  rd = getServletContext().getRequestDispatcher("yourPage.jsp");
rd.forward(request,response);

您也可以通过调度程序中的URL传递属性:

RequestDispatcher  rd = getServletContext().getRequestDispatcher("yourPage.jsp?message=some message");
    rd.forward(request,response);

同时,您也可以使用会话对象共享信息。

session.setAttribute("message","your message");

然后在 JSP 中使用以下代码检索它:

String message=(String)session.getAttribute("message");

-1
你必须使用上下文路径从servlet到jsp中获取消息。这绝对有效,我已经做过了。
String msg = "Message from servlet to jsp";
response.sendRedirect(response.encodeRedirectURL(contextPath+"/report/test.jsp?msg="+msg));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接