Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java sendredirect vs requestdispatcher_Java_Servlets - Fatal编程技术网

Java sendredirect vs requestdispatcher

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

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

登录到此页面的用户将被要求使用CAS服务器登录,URL将返回到

我已经实现了一个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.

我不知道为什么找不到上面的资源。

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


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

这只是因为转发和重定向根本不相同

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

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