简体   繁体   中英

Cannot handle POST request with this servlet

this is my servlet

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//import org.json.JSONObject;
import org.json.simple.JSONObject;

import com.mysql.jdbc.Statement;
/**
 * Servlet implementation class Login
 */
@WebServlet("/Login")
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private Connection connection;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

    public void init(ServletConfig config) throws ServletException {
        ServletContext context = config.getServletContext();
        String url = context.getInitParameter("dbUrl");
        String dbUser = context.getInitParameter("dbUser");
        String dbPassword = context.getInitParameter("dbPassword");
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url, dbUser, dbPassword);
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void destroy() {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
            }
        }
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("plain/text");

        JSONObject json = new JSONObject();
        PrintWriter out = response.getWriter(); 
        String usernameV = request.getParameter("usernameV");
        String passwordV = request.getParameter("passwordV");

        json.put("ris", 0);
        try {
            String sql = "SELECT * FROM user WHERE username = ? AND password = ? ";         
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, usernameV);
            stmt.setString(2, passwordV);
            json.put("password", usernameV);
            json.put("username", usernameV);

            out.print(json.toJSONString());
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                json.replace("ris", 1);
                out.print(json.toJSONString());
                stmt.close();
                rs.close();
                return;
            }
            stmt.close();
            rs.close();
        } catch (SQLException e) {
            json.replace("err", e.getMessage());
            out.print(json.toJSONString());

        }


        out.print(json.toJSONString());``
    }

    }

and here's my javascript

 $(document).ready(function() { $(window).keydown(function(event){//impedisco l'invio del form premendo invio if(event.keyCode == 13) { event.preventDefault(); return false; } }); $("#bottone").click(function(){ $("#risultato").attr("style", "color: black;"); $("#risultato").html("Caricamento..."); var username = $("#username").val(); var password = $("#password").val(); $.ajax({ type: "POST", url: "Register", //data: {"username" : username, "password": password}, data: "username=" + username + "&password=" + password, dataType: "text", success: function(msg) { var result = $.parseJSON(msg); if(result.error){ switch (result.error) { case 1: Step(); break; default: $("#risultato").html(msg); break; } }else{ $("#bottone").prop('disabled', true); $("#risultato").attr("style", "color: black;"); $("#risultato").html("Benvenuto " + username + "!"); } }, error: function() { $("#risultato").attr("style", "color: red;"); $("#risultato").html("Errore di connessione!"); } }); }); }); function Step() { $("#risultato").attr("style", "color: red;"); $("#risultato").html("Username gi&agrave; esistente!<br>"); $("#risultato").append("<p>Inserisci la tua password : <input type='password' name='passwordV' id='passwordV'> <input type='button' id='bottone1' value='Login'> </p>"); $("#bottone1").click(function(){ $("#res").attr("style", "color: black;"); $("#res").html("Caricamento..."); var username = $("#username").val(); var password = $("#passwordV").val(); $.ajax({ type: "POST", url: "Login", data: "usernameV=" + username + "&passwordV=" + password, dataType: "text", success: function(msg) { var resulto = $.parseJSON(msg); if(resulto.ris){ switch (resulto.ris) { case 1: $("#res").attr("style", "color: red;"); $("#res").html("Benvenuto " + username + "!"); break; default: $("#res").html(msg); break; } }else{ $("#bottone1").prop('disabled', true); $("#res").attr("style", "color: black;"); $("#res").html("password errata:"+ password); $("#stack").attr("style", "color: black;"); $("#stack").html(msg); } }, error: function() { $("#res").attr("style", "color: red;"); $("#res").html("Errore di connessione!"); } }); }); } 
if it helps, i post also the default.jsp page:

package it.marco.chat.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//import org.json.JSONObject;
import org.json.simple.JSONObject;

import com.mysql.jdbc.Statement;

/**
 * Servlet implementation class Register
 */
@WebServlet("/Register")
public class Register extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private Connection connection;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Register() {
        super();
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        ServletContext context = config.getServletContext();
        String url = context.getInitParameter("dbUrl");
        String dbUser = context.getInitParameter("dbUser");
        String dbPassword = context.getInitParameter("dbPassword");
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url, dbUser, dbPassword);
        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
            }
        }
    }

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

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("plain/text");

        JSONObject json = new JSONObject();
        PrintWriter out = response.getWriter();
        json.put("error", 0);


        String username = request.getParameter("username");
        String password = request.getParameter("password");


        try {
            String sql = "SELECT * FROM user WHERE username = ?";           
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, username);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                json.replace("error", 1);
                out.print(json.toJSONString());
                stmt.close();
                rs.close();
                return;
            }
            stmt.close();
            rs.close();
        } catch (SQLException e) {
        }


        int uid = -1;

        try {
            String sql = "INSERT INTO user(username,password) VALUES(?,?)";
            PreparedStatement stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            stmt.setString(1, username);
            stmt.setString(2, password);
            stmt.execute();
            ResultSet rs = stmt.getGeneratedKeys(); 
            if (rs.next()) {
                uid = rs.getInt(1);
            }
            stmt.close();
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }


        json.put("uid", uid);

        out.print(json.toJSONString());
    }

}

i add also the Register.java servlet.. This one does work, and, as you can see, it is almost the same as the login one.

 package it.marco.chat.servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //import org.json.JSONObject; import org.json.simple.JSONObject; import com.mysql.jdbc.Statement; /** * Servlet implementation class Register */ @WebServlet("/Register") public class Register extends HttpServlet { private static final long serialVersionUID = 1L; private Connection connection; /** * @see HttpServlet#HttpServlet() */ public Register() { super(); } /** * @see Servlet#init(ServletConfig) */ public void init(ServletConfig config) throws ServletException { ServletContext context = config.getServletContext(); String url = context.getInitParameter("dbUrl"); String dbUser = context.getInitParameter("dbUser"); String dbPassword = context.getInitParameter("dbPassword"); try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(url, dbUser, dbPassword); } catch (ClassNotFoundException | SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @see Servlet#destroy() */ public void destroy() { if (connection != null) { try { connection.close(); } catch (SQLException e) { } } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("plain/text"); JSONObject json = new JSONObject(); PrintWriter out = response.getWriter(); json.put("error", 0); String username = request.getParameter("username"); String password = request.getParameter("password"); try { String sql = "SELECT * FROM user WHERE username = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, username); ResultSet rs = stmt.executeQuery(); if (rs.next()) { json.replace("error", 1); out.print(json.toJSONString()); stmt.close(); rs.close(); return; } stmt.close(); rs.close(); } catch (SQLException e) { } int uid = -1; try { String sql = "INSERT INTO user(username,password) VALUES(?,?)"; PreparedStatement stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); stmt.setString(1, username); stmt.setString(2, password); stmt.execute(); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()) { uid = rs.getInt(1); } stmt.close(); rs.close(); } catch (SQLException e) { e.printStackTrace(); } json.put("uid", uid); out.print(json.toJSONString()); } } 

i cannot understand why the servlet is not able to handle the POST request.. I mean, i have already set up one servlet that hanldles the register part and it works perfectly. I have tried all the evening to make it work, and i am pretty sure there's a stupid mistake i am not able to see, that's why i have come here. I hope that someone is able to help me. Thank you

change this :

@WebServlet("/Login")

to

@WebServlet(name = "Login", urlPatterns = { "/Login" })

it will work believe me

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM