Cómo obtener parámetros de la URL con JSP

192

En JSP, ¿cómo obtengo parámetros de la URL?

Por ejemplo, tengo una URL www.somesite.com/Transaction_List.jsp?accountID=5
que quiero obtener el 5.

¿Hay una request.getAttribute ("accountID") como la hay para las sesiones o algo similar?

Josh Curren
fuente

Respuestas:

178

En una solicitud GET, los parámetros de la solicitud se toman de la cadena de consulta (los datos que siguen al signo de interrogación en la URL). Por ejemplo, la URL http://hostname.com?p1=v1&p2=v2 contiene dos parámetros de solicitud: - p1 y p2. En una solicitud POST, los parámetros de la solicitud se toman tanto de la cadena de consulta como de los datos publicados que están codificados en el cuerpo de la solicitud.

Este ejemplo muestra cómo incluir el valor de un parámetro de solicitud en la salida generada:

Hello <b><%= request.getParameter("name") %></b>!

Si se accedió a la página con la URL:

http://hostname.com/mywebapp/mypage.jsp?name=John+Smith

el resultado resultante sería:

Hello <b>John Smith</b>!

Si no se especifica el nombre en la cadena de consulta, el resultado sería:

Hello <b>null</b>!

Este ejemplo utiliza el valor de un parámetro de consulta en un scriptlet:

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>
Sajad Bahmani
fuente
96
Los scriptlets se consideran una mala práctica.
BalusC
13
No olvides xmlEncode ... esto es actualmente vulnerable a xss reflejado
Esailija
44
-1 para vulnerabilidad XSS. También sería -1 por usar un scriptlet cuando el trabajo se puede hacer usando EL si pudiera votar dos veces. En serio, NO HAGAS ESTO .
Julio
Sugerir el uso de scriptlets cuando existe una mejor solución es perjudicial para la calidad del código.
Suketu Bhuta
2
Con respecto a "Los scriptlets se consideran una mala práctica", vea esta respuesta en otra pregunta para conocer las alternativas.
Pixelstix
242

Acerca de los objetos implícitos del lenguaje de expresión unificado , el Tutorial Java EE 5 escribe:

Objetos implícitos

El lenguaje de expresión JSP define un conjunto de objetos implícitos:

  • pageContext: El contexto para la página JSP. Proporciona acceso a varios objetos, incluidos:
    • servletContext: El contexto para el servlet de la página JSP y cualquier componente web contenido en la misma aplicación. Consulte Acceso al contexto web.
    • session: El objeto de sesión para el cliente. Consulte Mantenimiento del estado del cliente.
    • request: La solicitud desencadena la ejecución de la página JSP. Consulte Obtención de información de solicitudes .
    • response: La respuesta devuelta por la página JSP. Ver Construcción de respuestas.
  • Además, hay varios objetos implícitos disponibles que permiten un fácil acceso a los siguientes objetos:
    • param: Asigna un nombre de parámetro de solicitud a un valor único
    • paramValues: Asigna un nombre de parámetro de solicitud a una matriz de valores
    • header: Asigna un nombre de encabezado de solicitud a un valor único
    • headerValues: Asigna un nombre de encabezado de solicitud a una matriz de valores
    • cookie: Asigna un nombre de cookie a una sola cookie
    • initParam: Asigna un nombre de parámetro de inicialización de contexto a un valor único
  • Finalmente, hay objetos que permiten el acceso a las diversas variables de ámbito descritas en Uso de objetos de alcance.
    • pageScope: Asigna nombres de variables de ámbito de página a sus valores
    • requestScope: Asigna nombres de variables con ámbito de solicitud a sus valores
    • sessionScope: Asigna nombres de variable de ámbito de sesión a sus valores
    • applicationScope: Asigna nombres de variables con ámbito de aplicación a sus valores

Las partes interesantes están en negrita :)

Entonces, para responder a su pregunta, debería poder acceder a ella de esta manera (usando EL):

${param.accountID}

O, usando JSP Scriptlets (no recomendado):

<%
    String accountId = request.getParameter("accountID");
%>
Pascal Thivent
fuente
¿Hay algo que tienes que hacer para habilitar EL? Estoy usando jboss6 y cuando uso $ {param.accountID} se trata como texto normal del navegador.
simgineer
@simgineer Primero, el archivo DEBE ser JSP, no solo HTML. Lea los siguientes temas: lenguaje de expresión, no muestra el valor de la variable , las expresiones EL no se evalúan en JBoss AS 4.2.2 , el lenguaje de expresión en JSP no funciona .
informatik01
81

Utilice EL (lenguaje de expresión JSP):

${param.accountID}

Taylor Leese
fuente
1
¿Esto maneja la decodificación de URL?
vikingsteve
@vikingsteve sí, lo hace
Neil McGuigan
2
Pero no maneja la recodificación como entidades HTML / XML, lo cual es necesario para la prevención XSS. Use JSTL <c:out value="${param.accountID}" />para hacer eso.
Julio
21

Si puedo agregar un comentario aquí ...

<c:out value="${param.accountID}"></c:out>

no funciona para mí (imprime un 0).

En cambio, esto funciona:

<c:out value="${param['accountID']}"></c:out>

Léa Massiot
fuente
Vale la pena señalar: param incluye más valores que solo los argumentos de consulta de URL (por ejemplo, los valores en el mapa del modelo). si necesita verificar específicamente si hay un valor en los argumentos de consulta de URL (y, por ejemplo, se enviará como parte de un envío de formulario), puede mirar $ {pageContext.request.queryString}, pero no se desglosa en un bonito mapa como params es.
Paul
4
String accountID = request.getParameter("accountID");
johannes
fuente
0

ejemplo que desea eliminar el registro de asunto con su subject_id

@RequestMapping(value="subject_setup/delete/{subjectid}",method = RequestMethod.GET)
public ModelAndView delete(@PathVariable int subjectid) {
    subjectsDao.delete(subjectid);
    return new ModelAndView("redirect:/subject_setup");
}

y el parámetro se usará para ingresar su consulta

public int delete(int subjectid) {
    String sql = "update tbl_subject set isdeleted= '1' where id = "+subjectid+"";
    return template.update(sql);
}
Vestido Ainz Ooal
fuente
0

www.somesite.com/Transaction_List.jsp?accountID=5

Para esto, URLhay una llamada al método request.getParameteren Java, si desea que se introduzca un número aquí int, de manera similar para el valor de cadena emitido string. así que para su requerimiento, simplemente copie más allá de la línea en la página,

int  accountId =(int)request.getParameter("accountID");

ahora puede llamar a este valor utilizando accountIden toda la página.

aquí accountIdestá el nombre del parámetro, también puede obtener más de un parámetro con esto, pero esto no funciona. Solo funcionará con el GETmétodo si aciertas la POSTsolicitud, entonces será un error.

Espero que esto sea útil.

Jay Patel
fuente
0

página 1: Página de detalle 2: <% String id = request.getParameter ("userid");%> // ahora puede usar la identificación para la consulta sql del producto hsql detail

nulo
fuente