我正在研究需要在JSP中读取数据库的项目,但是javascript使用这些数据来渲染谷歌地图(地图点)。我不知道如何通过javascript访问NoSQL数据库,所以我正在考虑在javascript中嵌入JSP来访问数据,并将其作为一种方式将它们提供给javascript。
我搜索了很多关于这些功能的内容,我希望有类似的代码:
var a = <%=data %>
我如何控制脚本(因为它是.js)和index.jsp?
由于
答案 0 :(得分:5)
Java代码在服务器上运行,这意味着它在您的应用程序服务器上运行并有助于呈现视图(在本例中为JSP)。 JavaScript在客户端运行,这意味着它在客户端浏览器(Internet Explorer [ugh],Firefox,Chrome和on ...)上运行。因此,根据您当前的代码:
var a = <%=data %>;
假设data
为String
且值为"Hello World"
,则生成的HTML / JS将为:
var a = Hello World;
哪会产生错误。因此,您需要引用变量:
var a = '<%=data %>';
现在这将产生:
var a = 'Hello World';
对于更复杂的通信,例如将列表或复杂结构或复杂结构列表从服务器传递到客户端,最好使用通用格式来交换数据,如JSON。您可以将数据从服务器(最好是在Servlet中)编组为JSON字符串,然后轻松地将其传递给JavaScript端。例如,使用Jackson Library for Java:
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
List<ComplexObject> complexObjectList = ... //get your data
request.setAttribute("complexObjectList", OBJECT_MAPPER.writeValueAsString(complexObjectList));
//forward to the desired view...
request.getRequestDispatcher("/WEB-INF/theView.jsp").forward(request, response);
}
}
然后在你的JSP中(使用Expression Language因为you should avoid using scriptlets):
<script type="text/javascript">
var complexObjectList = JSON.parse('${complexObjectList}');
//play with your new object in JavaScript side...
</script>