2011-05-27 24 views
5

Antecedentes:Enviando generado dinámicamente archivo javascript

Tengo un servlet en el que estoy generando dinámicamente javascript y puesta en una variable script. Entonces me puse el tipo de contenido que la respuesta text/javascript y enviar el guión a cliente:

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

Problema:

el navegador no descargar el archivo javascript pero que no reconoce las funciones en el interior el archivo. Si creo un archivo javascript estático y lo uso en su lugar, funciona bien.

Pregunta:

¿Qué debe hacerse para que el navegador trata respuesta del servlet como un archivo JavaScript regular?

Gracias por su ayuda.

+1

que debería funcionar bien. ¿Cómo exactamente lo estás incluyendo?¿Se ve bien la respuesta si la solicita directamente ingresando la URL del servlet en la barra de direcciones del navegador? – BalusC

+0

Parece que su problema podría estar en el lado del cliente, ¿cómo está incluyendo el script? –

+0

¿Es la respuesta válida JavaScript? Verifique el registro de errores de su navegador; Tiendo a tener pruebas unitarias que analizan scripts generados con Rhino solo como un chequeo de cordura. ¿Los clientes reciben el encabezado 'Content-Type'? Tuve situaciones en las que los administradores de recursos/VIP/proxies inversos reescribían mis encabezados cuidadosamente diseñados e inyectaban todo tipo de basura basada en reglas en ellos. Si es así, intente terminar el mapeo de servlet con '.js'. Mencionar el navegador, el contenedor de servlets, etc. podría ser útil. – McDowell

Respuesta

5

Debería funcionar bien. Sospecho que solo lo está incluyendo de la manera incorrecta o llamando a la función demasiado pronto o que el contenido de la respuesta está mal formado.

que acabo de hacer una prueba rápida:

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

con

@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'); }"); 
    } 

} 

y me sale

enter image description here

+0

¡Muchas gracias una vez más, @BalusC! – craftsman

+0

Cuando estoy usando una alerta simple como lo hizo entonces está funcionando, pero cuando escribo código javascript grande, entonces no está funcionando. Por favor, ayúdame. – snj

+0

@snj: si tiene una nueva pregunta, simplemente presione el botón Preguntar Pregunta en la parte superior derecha. – BalusC

0

Siempre puede escribir el guión 'en línea' en la página web.

1

¿Cómo se hace referencia a este servlet desde su navegador?

Si desea incluir esto con una página HTML (una existente), debe consultarla desde la etiqueta de su página.

Ej.

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

O si usted quiere que sea ejecutado como parte de una llamada Ajax, sólo tiene que pasar la respuesta a la función eval.

O bien, si solo desea enviar la salida y ejecutarla en el navegador, también debe enviar el segmento HTML. Luego incluya su JS en las etiquetas corporales, como una etiqueta de script.

ex. Su servlet envía el siguiente, el uso de contenidos de tipo 'text/html':

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

Creo que de esta manera es mejor.

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

Conjunto tipo de contenido en JSP:

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