Java sendredirect vs requestdispatcher
我在以下URL下有一个Java应用程序服务器:- 登录到此页面的用户将被要求使用CAS服务器登录,URL将返回到 我已经实现了一个Servlet来处理这个URL-Java sendredirect vs requestdispatcher,java,servlets,Java,Servlets,我在以下URL下有一个Java应用程序服务器:- 登录到此页面的用户将被要求使用CAS服务器登录,URL将返回到 我已经实现了一个Servlet来处理这个URL- public class CasRedirectServlet extends HttpServlet{ public void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletEx
public class CasRedirectServlet extends HttpServlet{
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException{
//RequestDispatcher rd = req
// .getRequestDispatcher("/test.jsp");
RequestDispatcher rd = req.getRequestDispatcher("banana/index.html#/dashboard/file/t4.json");
rd.forward(req, res);
//res.sendRedirect("banana/index.html#/dashboard/file/t4.json");
}
}
因此,现在如果用户点击上述servlet,他将被重定向到另一个json文件:-
banana/index.html#/dashboard/file/t4.json
如果我执行sendredirect,但当我使用requestdispatcher时,它失败了,那么这就可以工作
message /gui/banana/index.html#/dashboard/file/t4.json
description The requested resource is not available.
我不知道为什么找不到上面的资源。它不起作用,因为您的路径包含URL标记(符号
后面的部分),这是一个仅由浏览器解释的客户端内容,而RequestDispatcher.forward()
执行服务器端内部转发,不将令牌发送到浏览器
如果您想以这种方式使用URL标记,您唯一的选择就是使用
sendRedirect()
。这会触发到浏览器的往返,并更新浏览器正在访问的实际URL,从而使浏览器能够访问URL标记。这只是因为转发和重定向根本不相同
重定向时,将URL传递回客户端浏览器。浏览器解释给定的URLbanana/index.html#/dashbord/file/t4.json
,并发出URL/gui/banana/index.html
请求,获取页面,并自动将其滚动到锚点/dashbord/file/t4.json
(如果找不到锚点,则仅显示)
但是在转发时,您要求servlet容器将当前请求传递给能够为给定URL提供服务的servlet,servlet容器无法处理用于浏览器的#
部分,这会给您一个错误