The JSP is not showing by giving the URL pattern to which it is mapped in DD.
I have made a very simple application ( It is for testing. )
The directory structure is
JspDemo <- project directory
-- First.jsp (This is in JspDemo.)
-- WEB-INF (This is in JspDemo.)
-- web.xml ( This is in WEB-INF.)
and First,jsp is a simple JSP which counts number of times it is opened i.e. hits.
And if i am manually calling the JSP by URL http://localhost:8080/JspDemo/First.jsp or loading it on startup by using
load-on-startup tag in DD then it is giving me the error.
Http 404 error with message "Servlet First is not available".
The issue is being caused by the metadata-complete="true" attribute on your web.xml.
If you remove that attribute from the web-app element of your web.xml file, it works.
I'm not 100% sure why this works like this. I have never seen this attribute before. According to the documentation:
The metadata-complete attribute defines whether this deployment descriptor and other related deployment
descriptors for this module (e.g., web service descriptors) are complete, or whether the class files available to this
module and packaged with this application should be examined for annotations that specify deployment
information. If metadata-complete is set to "true", the deployment tool must ignore any annotations that specify
deployment information, which might be present in the class files of the application. If metadata-complete is not
specified or is set to "false", the deployment tool must examine the class files of the application for annotations,
as specified by the specifications.
I guess it has something to do with whether or not Tomcat will invoke the translate/compile step for the JSP file.
ie if you are metadata-complete then you shouldn't have to compile anything - right?