我想将jsp1.jsp中的值发送到jsp2.jsp,但是将jsp1.jsp重定向到jsp3.jsp。我在servlet中为jsp1使用了以下代码
response.sendRedirect("welcome1.jsp");
request.setAttribute("usern",user);
RequestDispatcher rd = request.getRequestDispatcher("afterlogin.jsp");
rd.forward(request,response);
但它继续给出这个错误“org.apache.jasper.JasperException:PWC6033:JSP的Javac编译错误”。
答案 0 :(得分:1)
你可以在这种情况下使用会话的可能性,这样你就可以访问jsp2中的参数并将jsp 1重定向到3
https://www.javatpoint.com/servlet-http-session-login-and-logout-example http://java.candidjava.com/tutorial/Servlet-Jsp-HttpSession-Login-logout-example.htm
答案 1 :(得分:0)
您可以将HttpSession对象用作用户会话,或使用ServletContext对象共享全局应用程序信息。然后使用方法getAttribute(String attb)和setAttribute(String attb,String value)在JSP中共享信息。使用请求时的问题是请求的域限制您仅在收到此请求时才使用此信息。
您还可以使用JavaBeans在JSP中共享信息
编辑:您是否已将Java代码包含在scriptlet中?在这里使用<%代码%>答案 2 :(得分:0)
当您使用sendRedirect函数时,它会立即重定向到该页面,它不会读取下一行代码。
因此,根据您的代码,您的编译器足够聪明,可以检查它,因此它会给您一个错误。
请参阅下文
1)SendRedirect():
此方法在HttpServletResponse接口中声明。 签名:void sendRedirect(String url)
1)如果sendRedirect请求被转移到另一个资源到不同的域或不同的服务器进行进一步处理。 2)当您使用SendRedirect容器将请求传输到客户端或浏览器时,sendRedirect方法中给出的URL作为对客户端的新请求可见。 3)如果SendRedirect调用旧请求和响应对象丢失,因为它被浏览器视为新请求。 4)SendRedirect较慢,因为需要一次额外的往返,因为创建了全新的请求并丢失了旧的请求对象。需要两个浏览器请求。 5)但是在sendRedirect中,如果我们想要使用,我们必须将数据存储在会话中或传递URL。
2)转发():
此方法在RequestDispatcher接口中声明。 签名:转发(ServletRequest请求,ServletResponse响应)
1)当我们使用转发方法时,请求转移到同一服务器内的其他资源以进行进一步处理。 2)如果转发Web容器在内部处理所有进程并且不涉及客户端或浏览器。 3)当在requestdispather对象上调用forward时,我们传递请求和响应对象,因此我们的旧请求对象出现在将要处理我们请求的新资源上 4)使用forward()方法比发送重定向更快。 5)在使用向前重定向的时候,想在新资源使用相同的数据的时候能使用请求。 setAttribute()因为我们有可用的请求对象。
更多信息:https://www.javatpoint.com/q/3577/difference-between-requestdispatcher-and-sendredirect