如何在javascript中嵌入JSP?

i3w*_*gyi 3 html javascript jsp

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

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

var a = <%=data %>
Run Code Online (Sandbox Code Playgroud)

我怎么能控制脚本(因为它是.js)和index.jsp?

谢谢

Lui*_*oza 5

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

var a = <%=data %>;
Run Code Online (Sandbox Code Playgroud)

假设data是a String且值为"Hello World",生成的HTML/JS将是:

var a = Hello World;
Run Code Online (Sandbox Code Playgroud)

哪会产生错误.所以,你需要引用变量:

var a = '<%=data %>';
Run Code Online (Sandbox Code Playgroud)

现在这会产生:

var a = 'Hello World';
Run Code Online (Sandbox Code Playgroud)

对于更复杂的通信,例如将列表或复杂结构或复杂结构列表从服务器传递到客户端,最好使用通用格式来交换数据,如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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的JSP中(使用Expression Language,因为你应该避免使用scriptlet):

<script type="text/javascript">
    var complexObjectList = JSON.parse('${complexObjectList}');
    //play with your new object in JavaScript side...
</script>
Run Code Online (Sandbox Code Playgroud)