2010-03-01 34 views
18

Tengo una clase java que realiza algunas operaciones en los archivos. Como el código de Java es enorme, no quiero escribir este código en jsp. Quiero llamar a los métodos en jsp cuando sea necesario.Llamando a un método java en jsp

Por favor, dime la ruta en la que necesito guardar este archivo. También sería útil algún código de ejemplo sobre cómo usarlo.

Respuesta

9

Creo que la pregunta es, ¿cómo hacer que el código Java esté disponible para un JSP? Lo pondría a disposición como cualquier otro código Java, lo que significa que debe compilarse en un archivo .class y colocarse en el classpath.

En las aplicaciones web, esto significa que el archivo de clase debe existir en WEB-INF/classes en el archivo o directorio .war de la aplicación, en la estructura de directorio habitual que coincida con su paquete. Por lo tanto, compile e implemente este código junto con todos los demás códigos Java de la aplicación, y debería estar en el lugar correcto.

Tenga en cuenta que tendrá que importar su clase en el JSP, o utilizar el nombre de clase completo, pero de lo contrario puede escribir el código Java que desee utilizando la sintaxis <%%>.

¡También podría declarar un método en alguna otra utilidad JSP, usando <%! %> sintaxis (observe el!), importe el JSP y luego llame al método declarado en dicho bloque. Sin embargo, este es un mal estilo.

+0

Gracias por su respuesta, he hecho lo que ha dicho importar clase Java y usarlo ... gracias una vez más a todos los que respondieron ... –

24

En el servlet (que se ejecuta antes de la JSP):

Person p = new Person(); // instantiate business object 
p.init(...); // init it or something 
request.setAttribute("person", p); // make it available to the template as 'person' 

En la plantilla se puede utilizar este:

your age is: ${person.age} <%-- calls person.getAge() --%> 
+1

No * tiene * que ejecutar un servlet por separado antes del JSP, aunque el archivo JSP mismo se compilará a un servlet sobre la marcha. – Rob

+2

sí, no es obligatorio, solo buenas prácticas – cherouvim

4

Aunque no te aconsejo que hacer ninguna llamada en java JSP, se puede hacer esto dentro de su JSP:

<% 
    //Your java code here (like you do in normal java class file. 
%> 

<!-- HTML/JSP tags here --> 

En caso de que se esté preguntando, la sección se llama <% ... %>scriptlet :-)

1

En realidad, jsp no es el lugar correcto para 'realizar algunas operaciones en los archivos'. ¿Has oído hablar del patrón MVC?

Si usted todavía está interesado en la llamada al método Java desde JSP se puede hacer, por ejemplo:
1. <% MyUtils.performOperation("delete") %> (scriptlet)
2. <my-utils:perform operation="delete"/> (etiqueta personalizada)

De todas formas yo recomiendo a google sobre scriptlets, etiquetas personalizadas jsp y patrón MVC.
Saludos cordiales, Gedevan

+0

patrón MVC necesita a veces tal complicado maneras, también, especialmente si la estructura de datos que se mostrará es compleja. – peterh

7

Según el tipo de acción que desee realizar, normalmente utiliza taglibs, funciones EL o servlets para. El código Java realmente no pertenece a los archivos JSP, sino a las clases de Java.

Si desea preprocesar una solicitud, utilice el método Servlet doGet(). P.ej.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Preprocess request here. 
    doYourThingHere(); 
    // And forward to JSP to display data. 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

Si desea post-procesamiento de una solicitud después de presentar alguna forma, utilice el método servlet doPost() lugar.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Postprocess request here. 
    doYourThingHere(); 
    // And forward to JSP to display results. 
    request.getRequestDispatcher("page.jsp").forward(request, response); 
} 

Si desea controlar el flujo de la página y/o salida HTML, utilice un taglib como JSTL core taglib o cree custom tags.

Si desea ejecutar funciones estáticas/auxiliares, use las funciones EL como JSTL fn taglib o cree custom functions.

Cuestiones relacionadas