虽然我知道答案很简单,但我已经把我的头发拉出来做了我能想到的一切 - 所以这是我在Stackoverflow上的第一篇文章。
我在NetBeans中构建了一个servlet,它在NetBeans IDE中运行时运行良好。一个Html页面(index.htm)有一些Javascript调用 - POST和GET(Javascript中的Ajax调用 - 如下所示)。 JSON对象被发送到Servlet - 它包含访问MySQL数据库的参数(用户名,模式等)。然后,Servlet的doGet方法访问数据库,并在“GET”Ajax调用调用时返回JSON数据字符串 - 数据通过就好了。通过“警报”调用将其转储到屏幕上,我知道这不是正确的方法 - 只是出于调试目的而进行。
Output after Servlet has been run
以下是我的NetBeans设置:NetBeans Setup
所以我想做的是使用Javascript调用(就像在IDE中)启动另一个Html页面(比如我的桌面)来调用Servlet并获取数据。但它不起作用。这是Javascript代码(在IDE中测试时有效):
function sendAjax()
{
// MySQL Data Request
var jsonObj =
{
"parameters":
{
"requesting":
{
"application": "mysql",
"properties":
{
"password": "tridvola",
"db_name": "mysql",
"tb_name": "flightdata1",
"user": "root"
}
},
"destination": "localhost",
"format": "json"
}
}
$.ajax(
{
url: "jsonservlet",
type: 'POST',
dataType: 'json',
data: JSON.stringify(jsonObj),
contentType: 'application/json',
mimeType: 'application/json',
success: goodData,
error: error_m
});
}
function error_m(data,status,er)
{
// alert("error: "+data+" status: "+status+" er:"+er);
// alert("sendAjax error!!");
}
function goodData(data2)
{
// alert("inside goodData!!");
// var jsonServlet = data;
// alert("after variable declaration");
// var content = $(data2).text();
// alert(content);
}
function getJsonData()
{
$.ajax(
{
type: "GET",
url: "jsonservlet",
dataType: 'text',
success : recData,
error: badData
});
}
function recData(vars)
{
var info = vars;
alert(info);
}
function badData()
{
alert("error from call to receive data from Servlet!!");
}
以下是web.xml内容:
<display-name>Java Servlet JSON</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>jsonservlet</servlet-name>
<servlet-class>JSONServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jsonservlet</servlet-name>
<url-pattern>/jsonservlet</url-pattern>
</servlet-mapping>
</web-app>
以下是Html文件的内容:
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<meta charset="utf-8">
<title>Servlet MySQL Tester</title>
<script src="jquery-1.12.0.js"></script>
<script src="jsfunctions.js"></script>
</head>
<body>
<script>
sendAjax();
</script>
<h1 style="text-align:left">MySQL Retrieval Web Page<br></h1>
<h3 style="text-align:left">=> retrieving MySQL data ...<br></h3>
<script>
getJsonData();
</script>
</body>
</html>
重要说明:要从浏览器启动servlet,我必须使用“BServlet” - 项目名称。这很奇怪,因为它是项目的名称,但与web.xml文件中的servlet名称不匹配。
额外信息 - Tomcat被设置为NetBeans中的一个服务器。我还使用.war文件(在执行“清理和构建”之后)并将其存放在Tomcat webapps文件夹中,但它不会改变任何内容。还看了Catalina目录,但那里已经有了servlet文件夹。还添加了指向JDK的JAVA_HOME环境变量。
再次 - 我只想在Html文件(IDE外部)中运行Javascript代码 - 并调用Servlet(发送JSON数据结构)并接收MySQL数据。我在桌面上运行相同的html文件,它不会调用servlet - 尝试过项目名称,servlet名称等等 - 没有任何作用。我知道当有人向我展示我忽略的东西时,我会亲自动手。非常感谢任何帮助。
答案 0 :(得分:0)
如果你正在使用Chrome并尝试从本地文件到某个地方进行AJAX,那么你运气不好,请参阅this ticket。
一般来说,我建议不要尝试从本地文件开发AJAX,有很多毛茸茸的案例。使用本地Tomcat / Jetty / Glassfish。