我正在使用一个连接到数据库并输出是否登录的servlet,当使用printWriter.write(JsonObject)时,我得到了其余的错误(意外 token L)。我正在使用tomcat服务器托管数据。

public class Login extends HttpServlet {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost/employeedatabase";
   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   static Connection conn = null;
   static Statement stmt = null;
   static ResultSet rs;
   static PrintWriter out;
private static final long serialVersionUID = 1L;

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

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("application/json; charset=UTF-8");
    out = response.getWriter();
    String email = request.getParameter("username");
    String password = request.getParameter("password");
    String result = "";

    if(Validation.validateNull(email) && Validation.validateNull(password)){
    if(!Validation.validateEmail(email))
    {

        result = "Invalid email";
    }
    if(databaseFuctions.Login(email,password))
    {

        result = "Login accepted";
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
             conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();
            getFromDatabase("manager",email,request,response);
        //  getFromDatabase("qa",email,request,response);
        //  getFromDatabase("developer",email,request,response);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
         System.out.println(e1.getMessage());
        }

    }
    else if(!databaseFuctions.Login(email, password))
    {
        result = "Login invalid";
    }}
    else{
        result = "No login/password entered";
    }
    out.write(result);


}
public static void getFromDatabase(String table,String email,HttpServletRequest request, HttpServletResponse response){
    JSONObject JObject = new JSONObject();

    ResultSet ds;
    try {

        ds = stmt.executeQuery("SELECT * from "+table+" where email = '"+email+"'");
        while(ds.next())
        {
            int id = ds.getInt("id");
            int salary = ds.getInt("salary");
            String name = ds.getString("name");
            String role = ds.getString("role");
            String emailAddress = ds.getString("email");
            String phone = ds.getString("phone");
            JObject.put("id", id);
            JObject.put("salary", salary);
            JObject.put("name", name);
            JObject.put("role", role);
            JObject.put("email", emailAddress);
            JObject.put("phone", phone);

        }

}
    catch (Exception e)
    {
        System.out.println(e.getMessage());
    }

    out.print(JObject.toString());
    out.flush();
    System.out.println(JObject.toString());
}

在系统中打印时,我会获取所有正确的数据,或者从静止状态检查原始数据后会得到正确的数据。但是我不太明白为什么打印机会抛出异常,但任何帮助都是惊人的

最佳答案

好的,如果由于客户端错误而导致,则返回的是格式错误的JSON值,因此返回的内容如下:{ id: 13, name: "Name"}Login invalid,则第一个字符L对于JSON语法无效。
这是因为您在响应中编写了getFromDatabase out.print(JObject.toString());方法的json字符串,并且在方法调用之后,将响应字符串result = "Login invalid"; out.write(result);添加到响应中,导致您的JSON无效。

解决此问题的一种方法是从方法getFromDatabase返回JSONObject,然后将result方法放入此对象JObject.put("result", result)中,然后将该对象写入响应中。

09-30 15:13
查看更多