重定向时,请求的资源(/xxx.html)不可用

时间:2014-07-26 04:23:46

标签: java html servlets web path

我真的做功课弄清楚原因,但我还在苦苦挣扎。请帮忙!

我有一个在今天之前没有任何页面运行良好的Servlet(tomcat 7& eclipse)

现在,我希望尝试添加一些页面并重定向到它们。我添加了一行

response.sendRedirect("/userhelp.html");

测试页面是否正常工作,但不是。

我将我的userhelp.html放在WebContent的下面。为了测试,我尝试将其复制到WEB-INF中,但它都不起作用。

如果我将“/userhelp.html”替换为“userhelp.html”,则它没有错误页面,但具有“递归重定向”。

以下是我的相对代码。

@WebServlet(name="core",urlPatterns={"/"})
public class CoreServlet extends HttpServlet {


protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    response.setCharacterEncoding("UTF-8");
    response.sendRedirect("/userhelp.html");    

1 个答案:

答案 0 :(得分:1)

您需要将sendrederct编辑为:

  

response.sendRedirect是(" /ProjectName/userhelp.html");

你有response.sendRedirect(" /userhelp.html");对你的sendRedirect的争论以正斜杠开头。这意味着对容器的根进行了反应。容器构建了相对于请求的原始URL的URL。

您的userhelp.html页面退出了项目的webcontent.It来自容器根目录的相对路径应该是/Projectname/userhelp.html。所以你需要编辑你的路径 response.sendRedirect是

编辑:问题在于你的servlet映射,因为@servletmapping(/)意味着任何为这个url模式(/)发送的东西都应该发送到这个servlet。所以真正发生的是当你的servlet第一次被调用时并且调用了response.sendredirect(),创建了一个新的请求对象,并且它的路径是/,所以再次调用你的servlet并开始这个递归过程。

因此,解决方法是将servlet映射更改为:@servletmapping(/ test),然后通过调用yourlocalhost / test / .So来调用此servlet,当这次重定向完成时,不会调用Servlet。