Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中嵌入JSP?_Javascript_Html_Jsp - Fatal编程技术网

如何在javascript中嵌入JSP?

如何在javascript中嵌入JSP?,javascript,html,jsp,Javascript,Html,Jsp,我正在做一个需要用JSP读取数据库的项目,但是javascript使用这些数据来呈现google地图(地图点)。我不知道如何通过javascript访问NoSQL数据库,所以我正在考虑在javascript中嵌入JSP来访问数据,并将其作为一种方式提供给javascript 我已经搜索了很多关于这些功能的信息,我希望有如下代码: var a = <%=data %> var a= 如何控制脚本(因为它是.js)和index.jsp 感谢Java代码在服务器上运行,这意味着它在您的

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

我已经搜索了很多关于这些功能的信息,我希望有如下代码:

var a = <%=data %>
var a=
如何控制脚本(因为它是.js)和index.jsp


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

var a = <%=data %>;
这将产生一个错误。因此,您需要引用变量:

var a = '<%=data %>';

对于更复杂的通信,如从服务器向客户端传递列表或复杂结构或复杂结构列表,最好使用通用格式来交换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);
    }
}
@WebServlet(“/MyServlet”)
公共类MyServlet扩展了HttpServlet{
私有静态最终ObjectMapper对象_MAPPER=新ObjectMapper();
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException{
List complexObjectList=…//获取数据
setAttribute(“complexObjectList”,OBJECT_MAPPER.writeValueAsString(complexObjectList));
//前进到所需的视图。。。
getRequestDispatcher(“/WEB-INF/theView.jsp”).forward(请求,响应);
}
}
然后在JSP中(使用原因):


var complexObjectList=JSON.parse(“${complexObjectList}”);
//在JavaScript端玩你的新对象。。。

您的想法是错误的。将服务器端代码和前端代码这两件事情看作是并行的“事情”。JSP将包含数据库逻辑。您可以将其提供给javascript,因为服务器端代码首先触发。或者,您可以将JSP/DB代码设置为接受异步调用。如果您在等待某人提交某个内容,而没有发回邮件,则会将其发送到服务器端代码。在这里分离您的关注点,这意味着找出服务器端代码需要处理的DB内容,然后处理前端代码以与之交互。您可以将JS嵌入返回数据的JSP中。谢谢,使用json是一个不错的选择,但是从数据库读取数据然后将其写入json会有很大的开销,再次被javascript读取?@user3307896这并没有那么多开销。首先尝试一下,然后测量一下。我曾经看到很多QN试图将JSP和JS结合在一起。很好的解释,如果我遇到下一个类似的qn,我将转到这个解释。好+1.
var a = 'Hello World';
@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);
    }
}
<script type="text/javascript">
    var complexObjectList = JSON.parse('${complexObjectList}');
    //play with your new object in JavaScript side...
</script>