无法访问Java Servlet虽然它在NetBeans IDE中可用

时间:2016-02-12 13:37:30

标签: javascript java ajax servlets netbeans

虽然我知道答案很简单,但我已经把我的头发拉出来做了我能想到的一切 - 所以这是我在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名称等等 - 没有任何作用。我知道当有人向我展示我忽略的东西时,我会亲自动手。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果你正在使用Chrome并尝试从本地文件到某个地方进行AJAX,那么你运气不好,请参阅this ticket

一般来说,我建议不要尝试从本地文件开发AJAX,有很多毛茸茸的案例。使用本地Tomcat / Jetty / Glassfish。