2015-12-14 52 views
1

这是我的路错误与诠释的servlet 3.X

<welcome-file>home</welcome-file> 

和我的servlet,我宣布URLPATTERN初级讲座

@WebServlet(urlPatterns="/home") 

并转发到文件homeview.jsp

 RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/SimpleWebApp/WebContent/WEB-INF/views/homeview.jsp"); 
dispatcher.forward(request, response); 

但是当我运行我的web应用程序它与htttp状态404 anyboby错误,帮我解决它吗?谢谢alt

+1

什么是整个404错误? – Perdomoff

+0

请求的资源不可用。 –

+0

你能解决这个问题吗? – Perdomoff

回答

2

您的代码运行正常。但是,

像项目结构中的以下内容一样,您可以通过这种方式访问​​它。

的HomeController(yourServlet)

request.getRequestDispatcher("/WEB-INF/views/homeview.jsp").forward(request, response); 

结构

WebContent 
     | 
     |__static 
     | 
     |__WEB-INF 
       |__lib 
       |__views/homeview.jsp 
       |__web.xml 
+0

你是对的。我尝试一下,它可以在Jetty上运行。我说一点英语。写作更糟:)对不起。我没有写信自己去尝试。 –

+0

谢谢,但我不使用码头,我只是几天学习servler和jsp,我不知道如何使用jetty.and我想要使用批注 –

+0

感谢批评。 @BalusC –

0

欢迎文件只能是一个静态文件,因此,例如JSP或HTML文件,它不能指定一个servlet。

如果你想让一个servlet充当一个欢迎页面,你应该将它的映射设置为/ *,这使得它成为一个默认的servlet。因此,在您注释:

@WebServlet(URL模式=“/ *”)

这样每当接收到一个请求servlet将被称为不映射到任何其他资源。

此外,您还需要修复您的转发请求,以指定相对于应用内容根的url,如其他答案中所示。

供参考,这是映射的工作原理根据Servlet规范(本文从Servlet 3.0规范的第12.1节取):

  1. 容器将尝试找到的路径的精确匹配请求到servlet的路径。成功的匹配选择servlet。

  2. 容器将递归地尝试匹配最长的路径前缀。这是通过一次将路径树降级到一个目录来完成的,使用'/'字符作为路径分隔符。最长的匹配决定了所选的servlet。

  3. 如果URL路径中的最后一个段包含扩展名(例如.jsp),那么servlet容器将尝试匹配处理扩展请求的servlet。扩展名被定义为最后'。'字符后的最后一个段的一部分。

如果前三条规则都不会导致servlet匹配,那么容器将尝试为请求的资源提供适合的内容。如果为应用程序定义了“默认”servlet,它将被使用。许多容器为提供内容提供了一个隐式的默认servlet。

+0

我修正了done.error没有在代码和结构project.I检查我的homview.jsp,并发现它在这里的错误(我包括_fooder和_header homeview,但它错误)。谢谢大家! –