jsp中的Servlet处理请求后一般都会做请求重定向或转发的处理,很多初学者会碰到很多问题,通过本人的总结,给出以下解决办法:
1.重定向:一般我们要根据我们的Web应用名称来写,如重定向到WebRoot根目录下的login.jsp,我们可以这么写,response.sendRedirect("/Web应用名称/login.jsp");但是,这样写有一个bug,就是当你改变Web应用名称的时候,跳转就失败了,所以Web应用名称不能写死,我们知道,request.getContextPath()能够获取到Web应用的名称,所以可以这样写response.sendRedirect(""+request.getContextPath()+"/login.jsp");
2.请求转发:请求重转发就比较简单,用
request.getRequestDispatcher("/index.jsp").forward(request, response);就行
3.还有一种情况,当一个Servlet处理请求后,我们可能还要让这个Servlet再连接到另外一个servlet,这时我们可以用javascript技术,例如:
response.setContentType("text/html;charset=utf-8");//
这里是防止出现乱码,很重要的
response.getWriter().print( " <script> location.href= '"+request.getContextPath()+"/servlet/xxxxxxServlet'; </script> ");
4.还有一种情况,当一个jsp页面是由一个servlet请求转发过来的,那么在这个jsp页面中如果想去访问另外一个servlet,此时,只需要这样写:
<script> location.href= 'xxxxxxServlet'; </script> "
这样就ok了。
这里还有很重要的一点,由于WEB-INF目录下的所有文件是受保护的,所以在WEB-INF目录下的文件要互访的话只能同过ssh中的技术实现,否则只能通过servlet来实现互访。