如何在servlet和jsp之间传输数据?

时间:2012-03-15 04:53:25

标签: jsp servlets

我想将数据从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:
org.apache.catalina.loader.StandardClassLoader@18c56d
 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)

2 个答案:

答案 0 :(得分:1)

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

堆栈跟踪的那一行告诉你要么运行一个完全过时的Tomcat版本,它默认打开旧版(当前已弃用/已删除)InvokerServlet(Tomcat 4.x),或者一个平庸的Tomcat版本(5.x-6.x),它默认情况下已经弃用/禁用但是以某种方式手动打开(该人显然不知道security holes)。该Tomlet已在Tomcat 7.x中删除。

默认情况下,调用者servlet映射到/servlet/*的URL模式,并且只接受URI路径信息中的完全限定servlet类,如/servlet/com.example.MyServlet

异常消息

java.lang.ClassNotFoundException: test2.jsp

基本上告诉它找不到你试图通过URI test2.jsp调用的“servlet”/servlet/test2.jsp

因此,您尝试从servlet内部转发到JSP,该servlet本身由InvokerServlet调用。 ServletRequest#getRequestDispatcher()即将路径 relative 解析为当前请求URI(另请参阅its javadoc)。

因此,要解决您的特定问题,您需要指定绝对路径。假设您的JSP位于webcontent的根目录中,只需添加/前缀。 E.g。

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

那就是说,我真的建议关闭那个调用者servlet。它完全过时,充满了可洞察性漏洞。我建议给自己一个很好的Tomcat 7并抛弃你正在阅读的那个有着十年历史的JSP / Servlet教程/书。看一下our servlets wiki page

答案 1 :(得分:0)

查看http://www.coderanch.com/t/361886/Servlets/java/Error-loading-WebappClassLoader-Why

抛出的异常不在你的代码周围,你的设置中还有一些其他问题,所以我建议先修复它们。您是否正确安装了tomcat并正确设置了环境变量?