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

Java 重定向时请求的资源(/xxx.html)不可用,java,html,servlets,web,path,Java,Html,Servlets,Web,Path,我真的在做功课来找出原因,但我仍然在努力。请帮忙 我有一个Servlet,它在今天之前运行良好,没有任何页面(Tomcat7和eclipse) 现在,我希望尝试添加一些页面并重定向到它们。我加了一行字 response.sendRedirect(“/userhelp.html”) 测试页面是否正常工作,但它没有工作 我将userhelp.html放在WebContent的文件夹下。为了测试,我尝试将其复制到WEB-INF中,但两种方法都不起作用 如果我将“/userhelp.html”替换为“u

我真的在做功课来找出原因,但我仍然在努力。请帮忙

我有一个Servlet,它在今天之前运行良好,没有任何页面(Tomcat7和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");    

您需要将SendRedRect编辑为:

sendRedirect(“/ProjectName/userhelp.html”)

您有response.sendRedirect(“/userhelp.html”);sendRedirect的参数以正斜杠开始。这意味着“reactive to root of container”。所以container构建相对于请求的原始URL的URL

您的userhelp.html页面存在于项目的webcontent中。它与容器根目录的相对路径应为/Projectname/userhelp.html。因此,您需要在中编辑路径 response.sendRedirect

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


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

递归重定向的意思是?对不起,因为我的chrome是一个中文verison,所以我只是翻译它,它的意思应该是PageA-->PageA-->PageA-->PageA-->PageA…类似这样,因为我看到我的tomcat在长时间运行时都是空白的,有一个绿色的进程条。但是我认为它应该适用于/userhelp.html,为什么是404?请帮助!这不适合我。当我使用project/userhelp.html时,我遇到了一个奇怪的情况,当我在enter doget()方法中记录“enter doget”时,它只是继续为您的解决方案打印“enter doget”,结果什么也没有!您是如何调用servlet的?请发布调用servlet的代码。您说的“调用”是什么意思?日志已打印,因此do get方法位于中。是的,它位于中,但为什么“连续”打印“enter doget”?您的servlet是否被重复调用?如果是,我认为这就是原因。即使您在问题中提到了递归页面a。我认为问题是其他问题,但问题是他重复的原因。如果我删除这个代码(重定向),一切都会好起来