Como obter parâmetros da URL com JSP


192

No JSP, como obtenho parâmetros da URL?

Por exemplo, eu tenho uma URL www.somesite.com/Transaction_List.jsp?accountID=5
que quero obter 5.

Existe um request.getAttribute ("accountID") como existe para sessões ou algo semelhante?

Respostas:


178

Em uma solicitação GET, os parâmetros de solicitação são obtidos da cadeia de consulta (os dados após o ponto de interrogação na URL). Por exemplo, o URL http://hostname.com?p1=v1&p2=v2 contém dois parâmetros de solicitação - - p1 e p2. Em uma solicitação POST, os parâmetros da solicitação são obtidos da cadeia de consulta e dos dados postados que são codificados no corpo da solicitação.

Este exemplo demonstra como incluir o valor de um parâmetro de solicitação na saída gerada:

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

Se a página foi acessada com o URL:

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

a saída resultante seria:

Hello <b>John Smith</b>!

Se o nome não for especificado na string de consulta, a saída seria:

Hello <b>null</b>!

Este exemplo usa o valor de um parâmetro de consulta em um scriptlet:

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>

96
Scriptlets são considerados más práticas.
BalusC

13
Não se esqueça xmlEncode .. isso é atualmente vulnerável a XSS refletido
Esailija

4
-1 para vulnerabilidade XSS. Também seria -1 para usar um scriptlet quando o trabalho puder ser feito usando EL se eu pudesse votar duas vezes. Sério, NÃO FAÇA ISTO .
Jules

Sugerir o uso de scriptlets quando existir uma solução melhor é prejudicial à qualidade do código.
Suketu Bhuta

2
Em relação a "Scriptlets são considerados más práticas", consulte esta resposta em outra pergunta para alternativas.
Pixelstix 7/12

242

Sobre os objetos implícitos da Unified Expression Language , o Tutorial do Java EE 5 escreve:

Objetos implícitos

A linguagem de expressão JSP define um conjunto de objetos implícitos:

  • pageContext: O contexto para a página JSP. Fornece acesso a vários objetos, incluindo:
    • servletContext: O contexto para o servlet da página JSP e quaisquer componentes da web contidos no mesmo aplicativo. Consulte Acessando o contexto da Web.
    • session: O objeto de sessão para o cliente. Consulte Manutenção do estado do cliente.
    • request: A solicitação que aciona a execução da página JSP. Consulte Obtenção de informações de solicitações .
    • response: A resposta retornada pela página JSP. Consulte Construindo respostas.
  • Além disso, estão disponíveis vários objetos implícitos que permitem fácil acesso aos seguintes objetos:
    • param: Mapeia um nome de parâmetro de solicitação para um único valor
    • paramValues: Mapeia um nome de parâmetro de solicitação para uma matriz de valores
    • header: Mapeia um nome de cabeçalho de solicitação para um único valor
    • headerValues: Mapeia um nome de cabeçalho de solicitação para uma matriz de valores
    • cookie: Mapeia um nome de cookie para um único cookie
    • initParam: Mapeia um nome de parâmetro de inicialização de contexto para um único valor
  • Por fim, existem objetos que permitem acesso às várias variáveis ​​de escopo descritas em Usando objetos de escopo.
    • pageScope: Mapeia nomes de variáveis ​​no escopo da página para seus valores
    • requestScope: Mapeia nomes de variáveis ​​com escopo de solicitação para seus valores
    • sessionScope: Mapeia nomes de variáveis ​​com escopo de sessão para seus valores
    • applicationScope: Mapeia nomes de variáveis ​​com escopo do aplicativo para seus valores

As partes interessantes estão em negrito :)

Portanto, para responder sua pergunta, você deve acessá-la desta maneira (usando EL):

${param.accountID}

Ou, usando Scriptlets JSP (não recomendado):

<%
    String accountId = request.getParameter("accountID");
%>

Há algo que você precisa fazer para ativar o EL? Estou usando o jboss6 e quando uso o $ {param.accountID}, ele é tratado como texto regular no navegador.
Simgineer


81

Use EL (linguagem de expressão JSP):

${param.accountID}


1
Isso lida com decodificação de URL?
vikingsteve

@vikingsteve sim ele faz
Neil McGuigan

2
Mas ele não lida com reencodificação como entidades HTML / XML, o que é necessário para a prevenção de XSS. Use JSTL <c:out value="${param.accountID}" />para fazer isso.
Jules

21

Se posso adicionar um comentário aqui ...

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

não funciona para mim (ele imprime um 0).

Em vez disso, isso funciona:

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


Vale ressaltar: param inclui mais valores do que apenas os argumentos de consulta da URL (por exemplo, os valores no mapa do modelo). se você precisar verificar especificamente se um valor está nos argumentos de consulta da URL (e, por exemplo, será enviado como parte de um envio de formulário), consulte $ {pageContext.request.queryString} - mas não será dividido em um bom mapa como params é.
Paul


4
String accountID = request.getParameter("accountID");

0

exemplo que você deseja excluir o registro de assunto com seu 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");
}

e o parâmetro será usado para entrada na sua consulta

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

0

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

Para isso, URLexiste uma chamada de método request.getParameterem java, se você quiser que um número seja convertido aqui int, da mesma forma que o valor da string convertido string. para sua exigência, basta copiar abaixo da linha na página,

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

agora você pode chamar esse valor usando accountIdna página inteira.

Aqui accountIdestá o nome do parâmetro, você também pode obter mais de um parâmetro usando isso, mas isso não funciona. Ele só funcionará com o GETmétodo se você pressionar a POSTsolicitação, e será um erro.

Espero que isso seja útil.


0

página 1: Detalhe página 2: <% String id = request.getParameter ("userid");%> // agora você pode usar o id para consulta sql do produto de detalhes hsql

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.