如何在javascript中嵌入JSP?

时间:2014-04-15 14:44:05

标签: javascript html jsp

我正在研究需要在JSP中读取数据库的项目,但是javascript使用这些数据来渲染谷歌地图(地图点)。我不知道如何通过javascript访问NoSQL数据库,所以我正在考虑在javascript中嵌入JSP来访问数据,并将其作为一种方式将它们提供给javascript。

我搜索了很多关于这些功能的内容,我希望有类似的代码:

var a = <%=data %>

我如何控制脚本(因为它是.js)和index.jsp?

由于

1 个答案:

答案 0 :(得分:5)

Java代码在服务器上运行,这意味着它在您的应用程序服务器上运行并有助于呈现视图(在本例中为JSP)。 JavaScript在客户端运行,这意味着它在客户端浏览器(Internet Explorer [ugh],Firefox,Chrome和on ...)上运行。因此,根据您当前的代码:

var a = <%=data %>;

假设dataString且值为"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>