简体   繁体   English

angularjs 500内部错误

[英]angularjs 500 internal error

I am writing a simple angularjs - J2EE application to fetch data from mysql server and display on the html page. 我正在编写一个简单的angularjs-J2EE应用程序,以从mysql服务器获取数据并显示在html页面上。 I am calling the angular function on form submit as: 我在表单提交时将角度函数称为:

<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>

{{status}} here is $scope property from my angular script.js: {{status}}这是我的angular script.js中的$ scope属性:

mydiary.controller('MyDiaryLogin', function($scope, $http){
$scope.user = {};
$scope.register = function(){
    $http({
          method: 'POST',
          url: 'http://localhost:9091/Angular1/getData',
          header: {'Content-Type': 'application/json'},
          data: $scope.user
    }).success(function(data){
        $scope.status = data;
    });
};

I have written a servlet to get data from database but the error comes before reaching to the servlet as I am printing some text on console in servlet. 我已经编写了一个servlet从数据库中获取数据,但是由于在servlet的控制台上打印了一些文本,所以在到达servlet之前出现了错误。 When I click on REGISTER button browser console shows an error as: 当我单击注册按钮时,浏览器控制台显示如下错误

POST http://localhost:9091/Angular1/getData 500 (Internal Server Error) POST http:// localhost:9091 / Angular1 / getData 500(内部服务器错误)

and this error points to angular.js lib at some xhr.send(...) function: 并且此错误指向某个xhr.send(...)函数处的angular.js库:

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

For your reference my servlet class's doPost method : 供我参考的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();
    }
}

Please help me find the root of the problem and is there anything wrong with the complete application code I have written? 请帮助我找到问题的根源,我编写的完整应用程序代码有什么问题吗? I am not sure about how to use angular to display data/ return json format data from servlet? 我不确定如何使用angular显示数据/从servlet返回json格式的数据?

To give you an idea of how you could convert a resultset into JSON, I added this class here. 为了让您了解如何将结果集转换为JSON,我在这里添加了此类。 You use it like: jsonArr = ResultSetConverter.convert(result,""); 您可以像这样使用它:jsonArr = ResultSetConverter.convert(result,“”);

This is a very general class that can handle all sql data types, so pick what you need. 这是一个非常通用的类,可以处理所有sql数据类型,因此请选择所需的类。

 import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class ResultSetConverter { public static final Calendar tzUTC = Calendar.getInstance(TimeZone.getTimeZone("UTC")); public static JSONArray convert( ResultSet rs, String freitextlabel ) throws SQLException, JSONException { JSONArray json = new JSONArray(); ResultSetMetaData rsmd = rs.getMetaData(); while(rs.next()) { int numColumns = rsmd.getColumnCount(); JSONObject obj = new JSONObject(); for (int i=1; i<numColumns+1; i++) { String column_name = rsmd.getColumnName(i); if(rsmd.getColumnType(i)==java.sql.Types.ARRAY){ obj.put(column_name, rs.getArray(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){ obj.put(column_name, rs.getInt(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){ obj.put(column_name, rs.getBoolean(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){ obj.put(column_name, rs.getBlob(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){ obj.put(column_name, rs.getDouble(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){ obj.put(column_name, rs.getFloat(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){ obj.put(column_name, rs.getInt(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){ obj.put(column_name, rs.getNString(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){ if (freitextlabel.length()>0 && column_name.equalsIgnoreCase("freitext")) obj.put(freitextlabel, rs.getString(column_name)); else obj.put(column_name, rs.getString(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){ obj.put(column_name, rs.getInt(column_name)); } else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){ obj.put(column_name, rs.getInt(column_name)); } 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)); Timestamp ts = rs.getTimestamp(column_name,tzUTC); // obj.put (column_name, ts !=null ? new Date(ts.getTime) : null); obj.put(column_name.concat("_js"), ts != null ? new Date(ts.getTime()) : null); } else{ obj.put(column_name, rs.getObject(column_name)); } } json.put(obj); } return json; } } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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