在jsp中写java代码,如<% System.out.println(System.currentTimeMillis()); %>;如果是用ajax从后台中得到时间(也是用System.currentTimeMillis();),两个时间是不同的,jsp里得出的时间戳会早于从后台得到的时间戳。
下面是jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>这是一个测试的页面</title>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
</head>
<script type="text/javascript">
$(function () {
$.ajax({
type:"post",
url:"testServlet",
dataType:"text",
success:function (result) {
$("p").html("这是从Servlet传过来的时间:"+result);
var t = <%=System.currentTimeMillis()%>/*注意这里时间是后台传过来后才获取的时间,按理说应该要大一点*/
$("span").html("这是在jsp用System.currentTimeMillis()获取的时间:"+t);
}
})
})
</script>
<body>
<div align="center">
<p></p>
<span></span>
</div>
</body>
</html>
下面是用来和上面的jsp交互的servlet
package com.my.controller;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
PrintWriter pw = res.getWriter();
pw.write(String.valueOf(System.currentTimeMillis()));
}
}
运行之后
如果是想到得到真正的时间,就要在ajax成功回调函数中new Date(),这才是现在的真正时间。
所以如果是想要在jsp中获取后台会改变的通用类的属性时,就用ajax重新发出一个请求,在Servlet中把通用类的属性打包发回jsp,而不是直接用<%%>的方式在jsp中直接拿出通用类的属性,这样就不会出现因为时间而导致拿出的属性出错。