2012-03-15 68 views
0

我想將數據從servlet傳輸到jsp。 使用以下代碼將servlet傳輸到jsp時。如何在servlet和jsp之間傳輸數據?

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

然後我想通過使用下面的代碼爲jsp添加request.setAttribute()方法。

<%=request.getAttribute("str1") %> 

所以,我的代碼是這樣的: 在Servlet的

request.setAttribute("str1", "Test1"); 
request.setAttribute("str2", "Test2"); 
RequestDispatcher rd = request.getRequestDispatcher("test2.jsp"); 
rd.forward(request, response); 

在JSP

<body> 
    <p>This is <%=request.getAttribute("str1") %>.</p> 
    <p>This is <%=request.getAttribute("str2") %>.</p> 
</body> 

錯誤會發生,派遣到JSP中。

SEVERE: Error loading WebappClassLoader 
    delegate: false 
    repositories: 
    /WEB-INF/classes/ 
----------> Parent Classloader: 
[email protected] 
test2.jsp 
java.lang.ClassNotFoundException: test2.jsp 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1083) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806) 
    at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:361) 
    at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:170) 

回答

1
at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:170) 

堆棧跟蹤的那行告訴你要麼運行Tomcat的一個完全過時的版本,其中有舊的(和目前已棄用/刪除)InvokerServlet默認開啓(Tomcat 4.x在),或者有一個平庸的Tomcat版本(5.x-6.x),默認情況下它已被棄用/禁用,但以某種方式手動打開(該人顯然不知道security holes)。該Tomcat 7.x中的該servlet已被刪除。

invoker servlet默認映射到/servlet/*的URL模式,並且只接受URI路徑信息中的完全限定的servlet類,如/servlet/com.example.MyServlet

異常消息

java.lang.ClassNotFoundException: test2.jsp 

基本上是告訴它不能找到「小服務程序」 test2.jsp這你試圖通過URI /servlet/test2.jsp調用。

因此,您正嘗試從一個servlet中轉發到JSP,該servlet本身就是由InvokerServlet調用的。 ServletRequest#getRequestDispatcher()即將路徑相對於解析爲當前請求URI(另請參閱its javadoc)。

因此,要解決您的特定問題,您需要指定一個絕對路徑。假設你的JSP被放置在webcontent的根目錄下,只需要前綴/。例如。

RequestDispatcher rd = request.getRequestDispatcher("/test2.jsp"); 

這就是說,我真的推薦關閉那個invoker servlet。它完全過時並且充滿了漏洞。我建議給自己一個好的Tomcat 7,並扔掉你目前正在閱讀的十年前的JSP/Servlet教程/書籍。在our servlets wiki page看一看。