2012-03-15 51 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看一看。

相关问题