Javascript 到 Java Web 应用程序

Posted

技术标签:

【中文标题】Javascript 到 Java Web 应用程序【英文标题】:Javascript to Java Web Application 【发布时间】:2013-03-28 01:06:16 【问题描述】:

我正在尝试在 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();

Java:

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");

Java:

/**
     * @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");
    

【问题讨论】:

我为servlets 添加了标签。您应该查看我们在 SO 上的文档:***.com/tags/servlets/info 如果要发送AJAX请求,然后又不想转发到jsp,需要直接写入响应输出流(可能是json)。 【参考方案1】:

至少有两个问题。

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

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

$('#date').load('CoopTimer');

【讨论】:

第一:所以不要说 equest.getRequestDispatcher("/Timer.jsp").forward(request, response);我会弄清楚是什么试图发出请求,然后将响应发送给它?第二:我已经阅读了很多关于 jQuery 的内容,并且它使事情变得更容易。有没有办法使用 HttpRequest() 根据响应而不是我在做什么来分配值?还是只有 jQuery 才能做到这一点? 第一:如果URL的合同是返回当前日期,你只需要返回当前日期,而不必弄清楚是什么试图发出请求。一个请求就是一个请求,servlet 应该总是做同样的事情。第二:当然,没有 jQuery 也是可能的。 jQuery 没有比您自己编写的任何脚本更强大的功能。但它让事情变得如此简单和便携,以至于不使用它是在自取其辱。 当我在做加载时,我使用什么地址?我遇到了与使用 HTTPRequest.open 时相同的问题,它找不到 CoopTimer 文件。 [警告] SRVE0190E:找不到文件:/CoopTimer.java 您需要使用 servlet 映射到的 URL。这应该包含在有关 servlet 的最基本教程或书籍中。 我的 Javascript 现在将成功联系服务器,但是我不认为 Java 没有正确返回字符串,或者我的 Javascript 没有正确接收值。当我在 Eclipse 中对此进行测试并运行该页面时,Servlet 地址 /CoopTimer 将显示该字符串。但是,如果我转到 Timer.jsp,它不会显示字符串。相反,它显示 Object Object。【参考方案2】:

使用jquery进行ajax调用,本身就很简单 .这是javascript代码sn-p

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) 
    
  );

【讨论】:

以上是关于Javascript 到 Java Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Here Map:使用 JavaScript 在 iOS 应用程序和 Web 中为相同的起始位置和目的地绘制不同的路线

java Android将自定义内容分享到不同的应用程

Java Web入门(初识 ‍ JSP)

通过 Ajax Javascript 调用 SAP SOAP Web 服务——绕过跨域策略

java web须知细节

JavaScript如何从小仙飞升到上神