首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sendredirect vs requestdispatcher

sendredirect vs requestdispatcher
EN

Stack Overflow用户
提问于 2015-05-05 01:56:23
回答 2查看 149关注 0票数 0

我在以下URL下有一个Java应用程序服务器:

http://t4-dev.pta.com/gui

登录到此页面的用户将被要求使用CAS服务器登录,网址将返回给http://t4-dev.pta.com/gui/ReturnLoginViaMax

我已经实现了一个Servlet来处理这个URL -

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
banana/index.html#/dashboard/file/t4.json

如果我执行sendredirect,但当我使用requestdispatcher时,它会失败

代码语言:javascript
复制
message /gui/banana/index.html#/dashboard/file/t4.json

description The requested resource is not available.

我不确定为什么找不到上面的资源。

EN

回答 2

Stack Overflow用户

发布于 2015-05-05 02:07:06

它不起作用,因为您的路径包含一个URL令牌( #符号后面的部分),这是一个仅由浏览器解释的客户端内容,而RequestDispatcher.forward()执行服务器端内部转发,不将令牌发送到浏览器。

如果你想以这种方式使用URL令牌,你唯一的选择就是使用sendRedirect()。这将触发到浏览器的往返,并更新浏览器正在访问的实际URL,从而使浏览器能够访问URL令牌。

票数 0
EN

Stack Overflow用户

发布于 2015-05-05 02:09:16

这很简单,因为转发和重定向根本不是一回事。

当您重定向时,您会将URL传递回客户端浏览器。浏览器解释给定的URL并发出对URL/gui/banana/index.html的请求,获取页面,并自动将其滚动到锚点/dashbord/file/t4.json (如果找不到锚点,则只显示该页面)。

但是在转发时,您要求servlet容器将当前请求传递给能够为给定URL提供服务的servlet,并且servlet容器无法处理用于浏览器的#部件,并给出一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30036691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档