Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs 500内部错误_Javascript_Java_Angularjs_Servlets - Fatal编程技术网

Javascript angularjs 500内部错误

Javascript angularjs 500内部错误,javascript,java,angularjs,servlets,Javascript,Java,Angularjs,Servlets,我正在编写一个简单的angularjs-J2EE应用程序,从mysql服务器获取数据并显示在html页面上。 我将表单submit上的角函数称为: <div id="register_form" ng-controller="MyDiaryLogin"> <form> <ul> <li><input type="text" name="firstname" ng-mode

我正在编写一个简单的angularjs-J2EE应用程序,从mysql服务器获取数据并显示在html页面上。 我将表单submit上的角函数称为:

<div id="register_form" ng-controller="MyDiaryLogin">
        <form>
            <ul>
                <li><input type="text" name="firstname" ng-model="user.firstname" /></li>
                <li><input type="text" name="lastname" ng-model="user.lastname" /></li>
                <li><input type="text" name="email" ng-model="user.email" /></li>
                <li><input type="password" name="password" ng-model="user.password" /></li>
                <li><input type="password" name="confpass" ng-model="user.confpass" /></li>
                <li><input type="text" name="age" ng-model="user.age" /></li>
                <li><input type="text" name="occupation" ng-model="user.occupation" /></li>
                <li><input type="button" name="register" ng-click="register()" value="REGISTER" /></li>
            </ul>
        </form>
        <p><h2>{{status}}</h2></p>
    </div>
我已经编写了一个servlet来从数据库中获取数据,但当我在servlet的控制台上打印一些文本时,错误出现在到达servlet之前。 当我单击“注册”按钮时,浏览器控制台显示一个错误,如下所示:

POST 500(内部服务器错误)

这个错误指向某个
xhr.send(…)
函数中的
angular.js
lib:

if (responseType) {
    try {
      xhr.responseType = responseType;
    } catch (e) {
      // WebKit added support for the json responseType value on 09/03/2013
      // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
      // known to throw when setting the value "json" as the response type. Other older
      // browsers implementing the responseType
      //
      // The json response type can be ignored if not supported, because JSON payloads are
      // parsed on the client-side regardless.
      if (responseType !== 'json') {
        throw e;
      }
    }
  }

  xhr.send(post || null);
}
请参考我的servlet类的doPost方法:

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
    try{
        System.out.println("CALLING THE METHOD");
        Class.forName("com.mysql.jdbc.Driver");
        cn = DriverManager.getConnection("jdbc:mysql://localhost/mydiary","root","");

        String query = "SELECT * FROM users";
        pstmt = cn.prepareStatement(query);
        rs = pstmt.executeQuery();

        String json = new Gson().toJson(rs);
        response.setContentType("text/html");
        out = response.getWriter();
        out.write(json);
    }
    catch(Exception e){
        e.printStackTrace();
    }
    try{
        try{}
        finally{
            if(rs!=null)
                rs.close();
            if(pstmt!=null)
                pstmt.close();
            if(out!=null)
                out.flush();
                out.close();
            if(cn!=null)
                cn.close();
        }
    }
    catch(Exception e1){
        e1.printStackTrace();
    }
}

请帮助我找到问题的根源,我所写的完整应用程序代码是否有任何问题?我不确定如何使用angular显示数据/从servlet返回json格式的数据?

为了让您了解如何将resultset转换为json,我在这里添加了这个类。您可以像这样使用它:jsonArr=ResultSetConverter.convert(result,“”)

这是一个非常通用的类,可以处理所有sql数据类型,所以选择您需要的

import org.json.JSONArray;
导入org.json.JSONObject;
导入org.json.JSONException;
导入java.sql.SQLException;
导入java.sql.ResultSet;
导入java.sql.ResultSetMetaData;
导入java.sql.Timestamp;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.TimeZone;
公共类结果转换器{
公共静态最终日历tzUTC=Calendar.getInstance(TimeZone.getTimeZone(“UTC”));
公共静态JSONArray转换(结果集rs,字符串freitextlabel)
抛出SQLException、JSONException
{
JSONArray json=新的JSONArray();
ResultSetMetaData rsmd=rs.getMetaData();
while(rs.next()){
int numColumns=rsmd.getColumnCount();
JSONObject obj=新的JSONObject();
对于(int i=1;i0&&column_name.equalsIgnoreCase(“freitext”))
对象put(freitextlabel,rs.getString(列名称));
其他的
object.put(column_name,rs.getString(column_name));
}
else if(rsmd.getColumnType(i)=java.sql.Types.TINYINT){
对象put(列名称,rs.getInt(列名称));
}
else if(rsmd.getColumnType(i)=java.sql.Types.SMALLINT){
对象put(列名称,rs.getInt(列名称));
}
else if(rsmd.getColumnType(i)=java.sql.Types.DATE){
obj.put(column_name.concat(“_js”)、rs.getDate(column_name));
}
else if(rsmd.getColumnType(i)=java.sql.Types.TIMESTAMP){
//obj.put(column_name.concat(“_js”)、rs.getTimestamp(column_name,tzUTC));
时间戳ts=rs.getTimestamp(列名称,tzUTC);
//obj.put(列名称,ts!=null?新日期(ts.getTime):null);
obj.put(column_name.concat(“_js”),ts!=null?新日期(ts.getTime()):null;
}
否则{
对象put(列名称,rs.getObject(列名称));
}
}
json.put(obj);
}
返回json;
}

}
为了让您了解如何将结果集转换为JSON,我在这里添加了这个类。您可以像这样使用它:jsonArr=ResultSetConverter.convert(result,“”)

这是一个非常通用的类,可以处理所有sql数据类型,所以选择您需要的

import org.json.JSONArray;
导入org.json.JSONObject;
导入org.json.JSONException;
导入java.sql.SQLException;
导入java.sql.ResultSet;
导入java.sql.ResultSetMetaData;
导入java.sql.Timestamp;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.TimeZone;
公共类结果转换器{
公共静态最终日历tzUTC=Calendar.getInstance(TimeZone.getTimeZone(“UTC”));
公共静态JSONArray转换(结果集rs,字符串freitextlabel)
抛出SQLException、JSONException
{
JSONArray json=新的JSONArray();
ResultSetMetaData rsmd=rs.getMetaData();
while(rs.next()){
int numColumns=rsmd.getColumnCount();
JSONObject obj=新的JSONObject();
对于(int i=1;i0&&column_name.equalsIgnoreCase(“freitext”))
对象put(freitextlabel,rs.getString(列名称));
其他的
object.put(column_name,rs.getString(column_name));
}
else if(rsmd.getColumnType(i)=java.sql.Types.TINYINT){
对象put(列名称,rs.getInt(列名称));
}
else if(rsmd.getColumnType(i)=java.sql.Types.SMALLINT){
对象put(列名称,rs.getInt(列名称));
}
else if(rsmd.getColumnType(i)=java.sql.Types.DATE){
obj.put(column_name.concat(“_js”)、rs.getDate(column_name));
}
else if(rsmd.getColumnType(i)=java.sql.Types.TIMESTAMP){
//obj.put(column_name.concat(“_js”)、rs.getTimestamp(column_name,tzUTC));
时间戳ts=rs.getTimestamp(列名称,tzUTC);
//obj.put(列名称,ts!=null?新日期(ts.getTime):null);
obj.put(column_name.concat(“_js”),ts!=null?新日期(ts.getTime()):null;
}
否则{
对象put(列名称,rs.getObject(列名称));
}
}
json.put(obj);
}
返回json;
}

}
您的doPost方法看起来非常难看。。。请正确执行try/catch子句!在调用postMethod之前,服务器上似乎发生了故障。doPost方法的类是否正在实例化?问题似乎不在你的angular代码上。@Juan:是的,我正在成功编译我的类。它似乎没有任何错误。没有编译。实例化。你能调试服务器吗?如果没有,请尝试在类构造函数上添加日志记录,并查看是否调用了它
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
    try{
        System.out.println("CALLING THE METHOD");
        Class.forName("com.mysql.jdbc.Driver");
        cn = DriverManager.getConnection("jdbc:mysql://localhost/mydiary","root","");

        String query = "SELECT * FROM users";
        pstmt = cn.prepareStatement(query);
        rs = pstmt.executeQuery();

        String json = new Gson().toJson(rs);
        response.setContentType("text/html");
        out = response.getWriter();
        out.write(json);
    }
    catch(Exception e){
        e.printStackTrace();
    }
    try{
        try{}
        finally{
            if(rs!=null)
                rs.close();
            if(pstmt!=null)
                pstmt.close();
            if(out!=null)
                out.flush();
                out.close();
            if(cn!=null)
                cn.close();
        }
    }
    catch(Exception e1){
        e1.printStackTrace();
    }
}