web-dev-qa-db-fra.com

Statut HTTP [404]? [Introuvable] (le serveur d'origine n'a pas trouvé de représentation actuelle)

J'ai créé un projet de servlet avec (jsp, servlet, Apache Tomcat 9, Eclipse neon, Oracle 11g). J'ai créé index.jsp (pour récupérer les informations de connexion et les rediriger vers LoginServlet pour les validations de nom d'utilisateur et de mot de passe dans la table de base de données. Dans index.jsp, j'ai même mentionné un lien "register.jsp" pour s'inscrire si c'était le premier utilisateur). Lorsque j'exécute le projet index.jsp, la page s'ouvre.

Lorsque je fournis des informations d'identification d'utilisateur et de mot de passe (les informations de nom d'utilisateur et de mot de passe saisies manuellement dans la base de données), il me redirige avec succès LoginServlet et ainsi de suite sur les servlets. 

Mais lorsque je clique sur le lien "enregistrer", l'erreur ci-dessus apparaît ( État HTTP [404]? [Introuvable] Type Etat Rapport Message /TodayServlet/register.jsp Description Le serveur Origin n'a pas trouvé de connexion actuelle. Apache Tomcat/9.0.0.M20 ) Représentation de la ressource cible ou refusant de divulguer celle qui existe.

Mon problème vient de index.jsp, je ne parviens pas à ouvrir "register.jsp" ("register.jsp fourni par la balise anchor dans index.jsp).

Veuillez trouver mes pièces jointes pour la structure de répertoire et les principaux fichiers jsp et servlets et le code web.xml.

index.jsp (code principal):

<%@ 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 (code principal):

<%@ 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 (code principal):

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();
        }
    }

}

Je n'ai aucun problème avec les autres servlets (LoginServlet, WelcomeServlet ...)

LoginServlet.Java (code entier):

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>

Structure du répertoire:

  1. TodayServlet (nom du projet)> src> com.pack> servlets
  2. web-inf> (fichiers web.xml et jsp)

directory structure

2
jahnavi

Bien que les ressources devant être protégées contre l’accès HTTP soient placées sous WEB-INF . Normalement, jsps sert à la présentation pour l’utilisateur, c’est pourquoi elles sont placées en dehors de WEB-INF . raisons, si vous insistez pour conserver le fichier jsp dans le dossier WEB-INF plutôt que de créer un servlet, .__ et d’appeler ce servlet à partir de votre lien d’enregistrement.

Dans le servlet, vous devez utiliser requestdispatcher pour rediriger vers votre register.jsp.

Gardez votre code Servlet comme ceci: (Je suppose que votre register.jsp est disponible directement dans le dossier WEB-INF)

@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);
    }

}

Ajoutez ce mappage dans votre web.xml:

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

Et dans votre index.jsp, gardez comme ceci:

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

Pour plus d’informations, merci de bien vouloir lire ceci explication attentivement ... Si vous avez besoin d’éclaircissements, merci de me le faire savoir.

1
Shailesh Saxena

J'ai lutté avec ce problème plusieurs fois.

La solution que j'utilise actuellement est de savoir si l'application Web (ou le dossier dans lequel vous avez conservé les vues, comme jsp) est sous déploiement Assembly.

Essaye ça:

Faites un clic droit sur le projet > Build Path > Configure Build path > Deployment Assembly > Add(right hand side) > Folder > (ajoutez votre dossier jsp, par défaut c'est src/main/webapp)

2
Swaruuu

J'ai eu ce problème, et cela a été résolu en ajoutant une nouvelle source précise:

Deployment Assembly source

0
Candy