2013-04-05 16 views
1

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

的.jsp(Timer.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“date”从javascript获取日期,而javascript将从java servlet获取值。

如果任何人都能指引我走向正确的方向,无论是资源,你有什么,这将是非常棒的。谢谢!

编辑:这是我使用的最终代码。经过数小时的试图找出什么是错的......在eclipse中没有提到右键单击HTML和运行方式在服务器上。一个侮辱性的错误,但我永远不会再忘记。

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

的.jsp(Timer.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"); 
    } 
+0

我已经为'servlets'添加了一个标签。你应该看看我们在SO的文档:http://stackoverflow.com/tags/servlets/info – 2013-04-05 14:51:29

+0

如果你想发送一个AJAX请求,那么你不想转发到一个jsp,你需要写直接到响应outputstream(可能是json)。 – 2013-04-05 14:52:24

回答

1

有在lea这两个问题。

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

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

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

第一:所以不要说 equest.getRequestDispatcher(“/ Timer。jsp“)。forward(request,response); 我想知道是什么试图做出请求,而不是发送回应给它? 第二:我一直在阅读很多关于jQuery的知识,而且更容易它使事情。有没有办法使用HttpRequest()来分配基于响应的值而不是我在做什么?或者这是唯一可能的jQuery? – Vernah 2013-04-05 15:53:06

+0

第一:如果URL的contratc是返回当前的日期,你只需要返回当前的日期,而不需要知道是什么试图做出请求。一个请求是一个请求,并且servlet应该总是做同样的事情。第二:当然可能没有jQuery没有比你自己编写的任何脚本更强大的功能,但它使事情变得更加简单和便携,而不是使用它自己拍摄 脚。 – 2013-04-05 16:02:10

+0

当我在做负载时,我使用什么地址?我遇到与使用HTTPRequest.open时相同的问题,它找不到CoopTimer文件。 [警告] SRVE0190E:找不到文件:/CoopTimer.java – Vernah 2013-04-05 20:57:36

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