Servlet处理请求后,一般情况下,请求重定向或转发处理。
(dispatcher)请求转发:也被称为服务器端重定向,是指服务器在处理多个request请求的过程中,先后委托多个JSP
接替处理的过程。用dispatcher的方法来实现,通过RequestDispatchers来实现,一个是forward,另一个是include。相应的JSP里实现dispatch的标签也有两个:<jsp:forward/>和<jsp:include/>
Servlet跳转到JSP, request到reponse始终期间传递,这是关键。可以把request和reponse看作是一种资源,一系列的servlet和jsp都是在基于同一份资源完成它们职责范围之内的计算。
常使用:request.getRequestDispatcher("/xxxx.jsp").forward(request, response); 来处理转发
(Redirect)重定向:被称为客户端重定向,是指HTTP重定向。当client给server发送一个请求,要求获得一个资源。在server接收到这个请求后发现请求的这个资源实际存放在另一个位置,于是server在返回的response中写入那个请求资源的正确的URL,并设置reponse的状态码为301(表示这是一个要求浏览器重定向的response),当client接受到这个response后就会根据新的URL重新发起请求。重定向有一个典型的特症,即,当一个请求被重定向以后,最终浏览器上显示的URL往往不再是开始时请求的那个URL了。这就是重定向的由来。
常用:一般我们要根据我们的Web应用名称来写,如重定向到WebRoot根目录下的login.jsp,我们可以这么写,response.sendRedirect("/Web应用名称/login.jsp");但是,这样写有一个bug,就是当你改变Web应用名称的时候,跳转就失败了,所以Web应用名称不能写死,我们知道,request.getContextPath()能够获取到Web应用的名称,所以可以这样写response.sendRedirect(""+request.getContextPath()+"/login.jsp");
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来实现互访。
|