【发布时间】:2015-11-27 13:57:17
【问题描述】:
我正在编写一个简单的 angularjs - J2EE 应用程序来从 mysql 服务器 获取数据并显示在 html 页面上。 我将表单提交上的角度函数称为:
<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}} 这是我的 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;
});
};
我已经编写了一个 servlet 来从数据库中获取数据,但是在到达 servlet 之前就出现了错误,因为我在 servlet 的控制台上打印了一些文本。 当我点击 REGISTER 按钮时,浏览器控制台显示 error 为:
POST http://localhost:9091/Angular1/getData 500(内部服务器错误)
这个错误指向angular.js lib 的某个xhr.send(...) 函数:
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();
}
}
请帮我找出问题的根源,我写的完整应用程序代码有什么问题吗?我不确定如何使用角度显示数据/从 servlet 返回 json 格式数据?
【问题讨论】:
-
你的 doPost 方法看起来很丑...请正确实现 try/catch 子句!
-
在调用 postMethod 之前,您的服务器上似乎发生了故障。你的 doPost 方法的类甚至被实例化了吗?问题似乎不在您的角度代码上。
-
@Juan:是的,我正在成功编译我的课程。它似乎没有任何错误。
-
未编译。实例化。可以调试服务器吗?如果没有,请尝试在类构造函数上添加日志记录并查看它是否被调用。
-
我创建了构造函数并在其中显示了一些文本,但它没有被调用...同样的错误
标签: javascript java angularjs servlets