1

我正在尝试在 eclipse 中做一个简单的 web 项目。我的目标是让 .jsp/html 文件成为表示层,用 javascript 处理逻辑,用 Java 处理服务器端的东西。对于我的简单测试,我只想让我的 JavaScript 代码能够联系 Web 服务器并让 Java 代码返回一个日期。这是我现在所拥有的(注意我只显示“麻烦”部分)

.jsp(定时器.jsp):

<div ><h2 id="date" class="main"></h2></div>

JavaScript (timer.js):

var xhr = new XMLHttpRequest();
    document.getElementById("date").innerHTML = xhr.responseText;
    xhr.open("GET", "CoopTimer", true);
    xhr.send();

爪哇:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();

    request.setAttribute("date", dateFormat.format(date).toString());

    request.getRequestDispatcher("/Timer.jsp").forward(request, response);

}

我确信 JavaScript 是错误的,可能是问题所在。所以本质上,我的目标是让标头 id“日期”从 javascript 中获取日期,而 javascript 将从 java servlet 中获取值。

如果有人能指出我正确的方向,无论是资源,你有什么,那就太棒了。谢谢!

编辑:这是我使用的最终代码。经过数小时试图找出问题所在...... eclipse 中没有提到右键单击 HTML 并在服务器上运行为。一个可耻的错误,但我永远不会忘记。

这是我用来返回简单日期字符串的代码:

.jsp(定时器.jsp):

<div ><h2 id="date" class="main"></h2></div>

Javascript (timer.js)

$("#date").load("http://127.0.0.1:14949/CoopTimer/CoopTimer");

爪哇:

/**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();

        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        response.getWriter().write(date.toString());

        //System.out.println("PING");
    }
4

2 回答 2

1

至少有两个问题。

首先:servlet 的结果是 Timer.jsp 呈现的结果。Timer.jsp 不对 servlet 请求中存储的日期做任何事情。如果您只希望 servlet 返回格式化的日期,则不需要转发到 JSP。只需将日期写给回复的作者即可。

第二:您的 JavaScript 代码在发送请求之前尝试使用响应内容更改标头的 innerHTML。这是行不通的。我的建议是使用 jQuery 及其 AJAX 函数,以使您的 JS 代码更易于编写、理解和在浏览器之间移植:

$('#date').load('CoopTimer');
于 2013-04-05T14:57:17.057 回答
0

使用 jquery 进行 ajax 调用,这本身非常简单。这是javascript代码片段

function pullResultFromServlet() {
  var url = 'servletURL';
  $.ajax({
    url: url,
    dataType: 'json',
    data:{
      "dateValue: $('#date').val(),
    },
    type: 'POST',
    success: function(responseFromServlet) {
      // further processing
      }


    },
    error: function(jqXHR, textStatus, errorThrown) {
    }
  });
}
于 2013-04-05T15:01:46.650 回答