javaweb重定向

下面的代码为什么无法重定向呀

login.jsp页面路径为 ProjectRoot/web-inf/jsp/login.jsp

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.sendRedirect(request.getServletContext().getContextPath()+"/jsp/login.jsp");
    }
阅读 4.4k
5 个回答

WEB-INF目录应该是隐藏的啊,不能暴露给访问者

重定向属相对路径跳转,绝对路径会导致路径找不到,

WEB-INF目录下的资源通过response.sendRedirect是跳不到的吧?你可以试试request转发。另外,路径什么的试试就行了,不是问题

request.getServletContext().getContextPath()获取的是项目部署名,重定向默认是以项目部署名为起点,所有你只需要将重定向配置调整一下即可,改成如下:
response.sendRedirect("WEB-INF/jsp/login.jsp");


【纠正】
重定向不能直接访问WEB-INF下的资源,两种做法:
1、将login.jsp移到WEB-INF目录外,但仍保持在WebRoot目录下,比如WebRoot/jsp/login.jsp
2、重定向至一个URL资源,该URL指向服务器后台的一个方法,由该方法跳转访问WEB-INF/jsp/login.jsp,具体代码如下:(推荐)

String path = req.getServletPath();
if ("/toLogin.do".equals(path)) {
    //进入登录界面
    toLogin(res,req);
}

private void toLogin(HttpServletResponse res, HttpServletRequest req) 
        throws ServletException, IOException {
    req.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(req, res);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题