2011-08-24 17 views
10
<% 
    String fname=request.getParameter("fname"); 
    String username=getVal("lname"); 
%> 
<%! 
    private String getVal(String param){ 
     return request.getParameter("fname"); 

} 
%> 
/* 

--err 



org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP 

PWC6197: An error occurred at line: 5 in the jsp file: /register.jsp 
PWC6199: Generated servlet error: 
string:///register_jsp.java:12: cannot find symbol 
symbol : variable request 
location: class org.apache.jsp.register_jsp 
/* 

Respuesta

21

JSP pasa por un compilador JSP que convertirá la página JSP en un servlet, autogenerando el código java.

Las directivas JSP instruyen al compilador JSP dónde colocar cada cosa. Todo lo que está dentro de <% %> (llamado scriptlets JSP) se colocará dentro del método service() del servlet generado. Todo dentro de <%! %> (llamado declaraciones JSP) se convertirá en parte de la clase real del servlet generado, por lo que su getVal() se convertirá en un método de instancia.

El estándar request (y session y pageContext etc) instancias de objeto se definen dentro del método service() por lo que son, en efecto, sólo está disponible dentro de secciones scriptlet JSP.

Si está ejecutando en Tomcat, por ejemplo, puede ver el código Java generado para sus páginas JSP si mira dentro del directorio "trabajo" en la instalación de Tomcat. Puede ser interesante, si no puede obtener una mejor imagen de lo que está sucediendo "debajo del capó".

14

solicitud es accesible dentro de las expresiones scriptlet, porque es un argumento del método en el que se evalúan estas expresiones (_jspService). Pero si quieres que esté disponible en sus propios métodos, debe declarar como argumento:

<% 
    String fname = request.getParameter("fname"); 
    String username = getVal("lname", request); 
%> 
<%! 
    private String getVal(String param, HttpServletRequest request) { 
     return request.getParameter("fname"); 
    } 
%> 

Tenga en cuenta que no debe utilizar scriptles y obtener parámetros de la petición de JSP en el primer lugar. Las JSP deben usarse para generar marcado. Realice su procesamiento en un servlet/acción, prepare los datos que JSP mostrará al crear y rellenar beans en el alcance de la solicitud, y luego envíelos a un JSP, que debe usar JSP EL, JSTL y otras etiquetas personalizadas exclusivamente.

Cuestiones relacionadas