我在以下URL下有一个Java应用程序服务器:
http://t4-dev.pta.com/gui
登录到此页面的用户将被要求使用CAS服务器登录,网址将返回给http://t4-dev.pta.com/gui/ReturnLoginViaMax。
我已经实现了一个Servlet来处理这个URL -
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.我不确定为什么找不到上面的资源。
发布于 2015-05-05 02:07:06
它不起作用,因为您的路径包含一个URL令牌( #符号后面的部分),这是一个仅由浏览器解释的客户端内容,而RequestDispatcher.forward()执行服务器端内部转发,不将令牌发送到浏览器。
如果你想以这种方式使用URL令牌,你唯一的选择就是使用sendRedirect()。这将触发到浏览器的往返,并更新浏览器正在访问的实际URL,从而使浏览器能够访问URL令牌。
发布于 2015-05-05 02:09:16
这很简单,因为转发和重定向根本不是一回事。
当您重定向时,您会将URL传递回客户端浏览器。浏览器解释给定的URL并发出对URL/gui/banana/index.html的请求,获取页面,并自动将其滚动到锚点/dashbord/file/t4.json (如果找不到锚点,则只显示该页面)。
但是在转发时,您要求servlet容器将当前请求传递给能够为给定URL提供服务的servlet,并且servlet容器无法处理用于浏览器的#部件,并给出一个错误。
https://stackoverflow.com/questions/30036691
复制相似问题