HTTP Status [404] ? [Not Found] (The origin server did not find a current representatio)

42,390

Solution 1

Though the resources which need to be protected from Http access are placed under WEB-INF. Normally jsps serves the purpose of presentation to the user, that is why they are placed outside WEB-INF. But due to some reasons, if you insist of keeping jsp file under WEB-INF folder than create one servlet, and invoke that servlet from your registration link.

In the servlet, you need to use requestdispatcher to redirect to your register.jsp

Keep your Servlet code like this :(I assume that your register.jsp is availabe directly under WEB-INF folder)

@WebServlet("/ControlFlowServlet")
public class ControlFlowServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher("/WEB-INF/register.jsp");
        dispatcher.forward(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

Add this mapping in your web.xml:

 <servlet-mapping>
    <servlet-name>ControlFlowServlet</servlet-name>
    <url-pattern>/register</url-pattern>
  </servlet-mapping>

And in your index.jsp keep like this:

<a href="${pageContext.request.contextPath}/register">New User Register here...!!!</a><br>

For more information kindly read this explanation carefully. If you need any clarification, kindly let me know.

Solution 2

I struggled with this problem many times.

The solution I am currently using is whether the webapp (or the folder where you kept the views like jsp) is under deployment assembly.

Try this:

Right click on the project > Build Path > Configure Build path > Deployment Assembly > Add(right hand side) > Folder > (add your jsp folder, by default it is src/main/webapp)

Share:
42,390
jahnavi
Author by

jahnavi

Updated on July 09, 2022

Comments

  • jahnavi
    jahnavi almost 2 years

    I have created one servlet project using (jsp,servlet,apache tomcat 9, eclipse neon,oracle 11g). I have created index.jsp (to take login details and redirect to LoginServlet for username and password validations in database table. In index.jsp I even mentioned a "register.jsp" link to register if first time user). When I run project index.jsp page opens.

    When I provide user id and password details (manually entered username and password details in database), it's successfully redirecting me LoginServlet and then so on servlets.

    But when I click on the link for "register", I am getting above mentioned error (HTTP Status [404] ? [Not Found] Type Status Report Message /TodayServlet/register.jsp Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Apache Tomcat/9.0.0.M20)

    My problem is from index.jsp, I am unable to open "register.jsp" ("register.jsp provided through anchor tag in index.jsp).

    Please find my attachments for directory structure and main jsp and servlets and web.xml code.

    index.jsp (main code):

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <center>
    <form action="LoginServlet" method="post">
    enter name:<input type="text" name="name"><br>
    enter pass:<input type="password" name="pass"><br>
    
    <a href="register.jsp">New User Register here...!!!</a><br>
    <input type="submit" value="login"><br>
    </form>
    </center>
    </body>
    </html>
    

    register.jsp (main code):

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <center>
    <form action="RegisterServlet" method="post">
    enter name:<input type="text" name= "name1"> <br>
    enter pass:<input type="text" name= "pass1"><br>
    enter email:<input type="text" name="email1"><br>
    <input type="submit" value="register"><br>
    </form>
    </center>
    </body>
    </html>
    

    RegisterServlet.java (main code):

    package com.pack;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class RegisterServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            res.setContentType("text/html");
            PrintWriter out=res.getWriter();
            String uname1=req.getParameter("name1");
            String upass1=req.getParameter("pass1");
            String uemail1=req.getParameter("email1");
            req.setAttribute("username", uname1);
            try{
            Connection conn=DbConnection.getConnection();
            PreparedStatement ps=conn.prepareStatement("insert into register_table values(?,?,?)");
            ps.setString(1, uname1);
            ps.setString(2, upass1);
            ps.setString(3, uemail1);
            int i=ps.executeUpdate();
            if(i>0){
                req.getRequestDispatcher("WelcomeServlet").forward(req, res);
            }
            else{
                out.print("try registering again ");
                req.getRequestDispatcher("register.jsp").include(req, res);
            }
            }
                catch(Exception e){
                e.printStackTrace();
            }
        }
    
    }
    

    I am facing no problem with other servlets (LoginServlet, WelcomeServlet...)

    LoginServlet.java (whole code):

    package com.pack;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        RequestDispatcher rd= null;
            res.setContentType("text/html");
        PrintWriter out=res.getWriter();
        String upassword=req.getParameter("pass");
        out.println(upassword);
    
        String uname2=req.getParameter("name");
        out.println(uname2);
        try{
            Connection con=DbConnection.getConnection();
            out.println("conection established");
            PreparedStatement ps=con.prepareStatement("select * from register_table where username=? and password=?");
            ps.setString(1, uname2);
            ps.setString(2, upassword);
            ResultSet rs= ps.executeQuery();
    
            if(rs.next()){
                out.println("username is "+rs.getString(1)+" and pwd is "+rs.getString(2));
                req.setAttribute("uid", uname2);
                req.getRequestDispatcher("MainServlet").forward(req, res);
            }else{
                out.println("user name or password incorrect.Check and login again or register");
                req.getRequestDispatcher("index.jsp").include(req, res);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    
        }
    
    }
    

    web.xml (code):

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>TodayServlet</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <description></description>
        <display-name>LoginServlet</display-name>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.pack.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
      </servlet-mapping>
      <servlet>
        <description></description>
        <display-name>RegisterServlet</display-name>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>com.pack.RegisterServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/RegisterServlet</url-pattern>
      </servlet-mapping>
      <servlet>
        <description></description>
        <display-name>WelcomeServlet</display-name>
        <servlet-name>WelcomeServlet</servlet-name>
        <servlet-class>com.pack.WelcomeServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>WelcomeServlet</servlet-name>
        <url-pattern>/WelcomeServlet</url-pattern>
      </servlet-mapping>
      <servlet>
        <description></description>
        <display-name>MainServlet</display-name>
        <servlet-name>MainServlet</servlet-name>
        <servlet-class>com.pack.MainServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>MainServlet</servlet-name>
        <url-pattern>/MainServlet</url-pattern>
      </servlet-mapping>
    
    </web-app>
    

    Directory structure:

    1. TodayServlet( project name)>src>com.pack>servlets
    2. web-inf> (web.xml and jsp files)

    directory structure

  • jahnavi
    jahnavi almost 7 years
    Thank you Shailesh, I understood now.Thanks for your prompt and kind response.
  • JavaYouth
    JavaYouth almost 6 years
    this has the similar answer - stackoverflow.com/questions/47585068/…
  • JavaYouth
    JavaYouth almost 6 years