2017-04-16 4 views
0

Hallo Ich habe eine Embedded Tomcat Java-Anwendung. Der Tomcat startet und die index.jsp wird angezeigt.Java Servlett-Mapping

Jetzt habe ich eine Ein Ajax-Anfrage, die wie folgt aussieht:

function auth(){ 
username = document.getElementById('login_username').value; 
password = document.getElementById('login_pw').value; 

if(username.length > 0 && password.length > 0){ 
    $.ajax({ 
     method: "POST", 
     url: '/login', 
     data: 'username=' + username + '&password=' + password 
    }).done(function(response){ 
     console.log(response); 
     response = response.split(','); 
     if(response.length == 2){ 
      window.location = response[1]; 
     } 
    }); 
} 

}

Die Auth() funktioniert. Aber jedes Mal bekomme ich einen 404 Fehler.

Das Servlet, das die Anforderung erhalten sollte wie folgt aussieht:

@WebServlet(
     name="login", 
     urlPatterns = {"/login","sites/login","login"} 
) 
public class LoginServlet extends HttpServlet{ 
    private static final long serialVersionUID = 1L; 
    private ServletContext context; 

    public LoginServlet(){ 
     super(); 
    } 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     Log.log("get"); 
     resp.setContentType("text/html"); 
     PrintWriter out=resp.getWriter(); 
     Page p = new Page(); 
     p.getBody().setContent("GET"); 
     out.print(p.create()); 
    } 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     Log.log("Post"); 
     resp.setContentType("text/html"); 
     PrintWriter out=resp.getWriter(); 
     Page p = new Page(); 
     p.getBody().setContent("POST"); 
     out.print(p.create()); 
    } 

    public void init(ServletConfig config)throws ServletException{ 
     this.context = config.getServletContext(); 
     Log.log("Login servlet Initialized"); 
    } 
} 

Meine Frage ist, warum ist dies nicht funktioniert. Muss ich das servlett dem Tomcat mit der Methode tomcat.addServlet (string, string, string) hinzufügen ?;

Es funktioniert, wenn ich eine login.jsp im Basisordner meiner Webapp erstellen und wenn ich die URL der Ajax-Anfrage zu login.jsp ändere.

Dank

+0

Überprüfen Sie die URL in der Browser-Konsole von Ajax angefordert. Versuchen Sie die gleiche URL im Browser für mögliche Fehlerprotokolle –

Antwort

0

Das Problem ist, mit dem Parameter url: '/login' im $.ajax() Aufruf, der die Anforderung in http://localhost:8080/login wegen des / (Schrägstrichs) am Anfang macht.

Sie erwarten sehr wahrscheinlich, dass es so etwas wie http://localhost:8080/MyServletApp/login ist. Um dies zu erreichen, entfernen Sie die / aus der url.

Die Ajax-Funktionsaufruf würde wie folgt aussehen:

$.ajax({ 
    method: "POST", 
    url: 'login', 
    data: 'username=' + username + '&password=' + password 
}).done(function(response){ 
    console.log(response); 
    response = response.split(','); 
    if(response.length == 2){ 
     window.location = response[1]; 
    } 
}); 
+0

Leider hat diese Lösung nicht funktioniert. Ich habe es vorher und jetzt wieder versucht. Ich habe auch die Mapping-URLs geändert, aber ich bekomme immer noch den 404-Fehler. Und ich bekomme keinen Logeintrag. – Firesnake

0

Problem sovled Zuerst habe ich herausgefunden, dass die Annotation Arbeit mit einer Web.xml Version über 3,0. Also habe ich versucht, die Version meiner Web.xml auf 3.1 zu setzen. Tomcat weigerte sich zu akzeptieren, also habe ich das Servlet-Mapping in der web.xml