I got above PageNotFound (ERROR 404) message while loading home.html page in Spring Web MVC project with Google App Engine nature. But when I use home.jsp then it works fine.
Then I searched and analysed how the flow of servlet container goes through the request.
1. First the DispatcherServlet is invoked by the Servlet Container.
2. The DispatcherServlet finds a mapping which maps to the home method of the Controller and the home method returns a view name "home".
3.Now the DispatcherServlet uses a View Resolver (InternalResourceViewResolver) to find the View to render the model through, since the name is "home", this maps to the /WEB-INF/view/home.html view.
4. Now essentially a call is made to RequestDispatcher.forward("/WEB-INF/views/home.html")
5. The Servlet container at this point tries to find the servlet which can handle /WEB-INF/views/home.html uri - if it had been a .jsp there is a JSPServlet registered which can handle rendering the jsp, however for *.html there is no servlet registered, so the call ends up with the "default servlet", which is registered with a servlet-mapping of / which probably the DispatcherServlet is.
6. Now the Dispatcher servlet does not find a controller to handle request for /WEB-INF/views/home.html and hence the message that I saw during project run.
If you are also getting this type of error and you want this kind of a extension to be handled by the servlet container, say tomcat, you can register *.html extension to be handled by JSPServlet and then it should work cleanly. Or return forward:/resources/HelloWorld.html which will be considered a static file relative to your resources folder.
And one of my friend asked how he would register *.html extension to be handled by JSPServlet. So, I told him that it can be achieved in two simple steps.
1. By adding this servletmapping for the JSP servlet.
This tells the application container to use the the JSP servlet when serving html files.
2. Comment out the
Happy Debugging !
No comments:
Post a Comment