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?

Josh Curren
fonte

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>!");
    }
%>
Sajad Bahmani
fonte
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");
%>
Pascal Thivent
fonte
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
@simgineer Primeiro, o arquivo DEVE ser JSP, não apenas HTML. Leia os seguintes tópicos: Linguagem de expressão, não mostra valor variável , expressões EL não são avaliadas no JBoss AS 4.2.2 , Linguagem de expressão em JSP não está funcionando .
informatik01
81

Use EL (linguagem de expressão JSP):

${param.accountID}

Taylor Leese
fonte
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>

Léa Massiot
fonte
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");
johannes
fonte
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);
}
Ainz Ooal Gown
fonte
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.

Jay Patel
fonte
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

nulo
fonte