发送动态生成的javascript文件

时间:2011-05-27 18:14:19

标签: java javascript servlets

背景

我有一个servlet,我在其中动态生成javascript并放入变量script。然后我将响应内容类型设置为text/javascript并将脚本发送到客户端:

resp.setContentType("text/javascript");
resp.getWriter().println(script);

问题:

浏览器确实下载了javascript文件但它无法识别文件中的函数。如果我创建一个静态javascript文件并使用它,它可以正常工作。

问题:

应该做什么以便浏览器将来自servlet的响应视为常规javascript文件?

感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

应该可以正常工作。我怀疑你只是以错误的方式包含它或过早地调用函数或者响应内容格式错误。

我刚做了一个快速测试:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 6156155</title>
        <script src="javaScriptServlet"></script>
        <script>test()</script>
    </head>
    <body>
    </body>
</html>

@WebServlet(urlPatterns={"/javaScriptServlet"})
public class JavaScriptServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/javascript");
        response.getWriter().write("function test() { alert('peek-a-boo'); }");
    }

}

我得到了

Screenshot of browser alert showing "peak-a-boo" message in it.

答案 1 :(得分:1)

如何从浏览器中引用此servlet?

如果您想将此页面包含在HTML页面(现有页面)中,则应从页面标记中引用它。

实施例。

<html>
<head>
<script type='text/javascript' src='URL_TO_YOUR_SERVLET'></script>
</head>
</html>

或者如果您希望它作为Ajax调用的一部分执行,只需将响应传递给eval函数。

否则,如果您只想发送输出并在浏览器中执行它,您还需要发送HTML段。然后将你的JS包含在body标签中,作为脚本标签。

离。您的servlet使用内容类型“text / html”发送以下内容:

<html>
<body>
 <script type='text/javascript'>
     <!-- write your generated JS here -->
 </script>
</body>
</html>

答案 2 :(得分:0)

您始终可以将“脚本”内容写入网页。

答案 3 :(得分:0)

我认为这种方式更好。

<%@ page language="java" contentType="text/javascript; charset=UTF-8" pageEncoding="UTF-8"%>
alert('Pure JavaScript right here!');

在JSP中设置内容类型:

contentType="text/javascript; charset=UTF-8"