我有jquery脚本,它将一些数据发布到servlet。脚本调用成功函数,如果servlet只有一个代码串 - response.getWriter().print("message");
。如果我尝试设置响应内容类型或刷新输出流,其他任何东西,脚本调用错误函数。为什么呢?
这是脚本代码
$(document).ready(function () {
$("#login-button").click(function () {
var userPassword = $("input#userPassword").val();
var userLogin = $("input#userLogin").val();
$.ajax({
type: "POST",
url: "login",
dataType: "text",
data: {login: userLogin, password: userPassword},
success: function (data) {
alert("Successful request! Data is " + data.toString());
},
error: function (jqXHR) {
console.log(jqXHR);
}
});
});
});
console.log(jqXHR)
的结果如果我向servlet添加任何代码总是相同的 - Object {readyState: 0, responseText: "", status: 0, statusText: "error"}
。
这是servlet的代码
public class LoginServlet extends HttpServlet {
public static final Logger LOGGER = Logger.getLogger(LoginServlet.class);
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
LOGGER.info("Start calling safe service");
safeService(request,response);
LOGGER.info("End calling safe service");
} catch (Exception e) {
LOGGER.info("Error while processing loginServlet ",e);
LOGGER.error("Error while processing loginServlet ",e);
}
}
protected void safeService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// If I add this code, script calls error function
/*response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");*/
response.getWriter().print("welcome.html");
// Or even this code.
/*response.getWriter().flush();
response.getWriter().close();*/
}
}
日志很干净,没有任何运行时异常。