JSP in /WEB-INF returns "HTTP Status 404 The requested resource is not available"

Solution 1:

404 simply means "Not Found".

Either the URL is wrong (note: case sensitive!), or the resource is not there where you think it is.

Just verify the URL and/or verify if the resource is there where you'd expect it to be. You placed sample.jsp in /WEB-INF folder. This way it is not publicly accessible without calling through a front controller servlet.

Put it outside /WEB-INF.

samplejsp
 `-- WebContent
      |-- WEB-INF
      `-- sample.jsp

If you want to keep it in /WEB-INF, then you need to create a front controller servlet which forwards to it in doGet() method as below.

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

Finally "open" the JSP by just calling servlet's actual URL instead of JSP's fictive URL.

See also:

  • What is WEB-INF used for in a Java EE web application?
  • Calling servlet from JSP
  • doGet and doPost in Servlets

Solution 2:

It's mostly related to your directory structure or packaging.
Can you please add your directory structure?

Similar to below -

src 
|-html\
|-jsp\

Perhaps this should do it

<form action="sample.jsp" method=get>
      <input type =submit value="submit">
</form>

Edit - WEB-INF does not allow direct access to JSP.

Solution 3:

In my spring boot web application with JSP it didn't worked until I have added this dependency

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

even after configuring view resolver

spring.mvc.view.prefix: /WEB-INF/views/ 
spring.mvc.view.suffix: .jsp

If you find why this worked please comment.