JSP로 URL에서 매개 변수를 얻는 방법


193

JSP에서 URL에서 매개 변수를 어떻게 얻습니까?

예를 들어 www.somesite.com/Transaction_List.jsp?accountID=5
5를 얻으려는 URL

이 있습니다. 세션이나 이와 유사한 것과 같은 request.getAttribute ( "accountID")가 있습니까?

답변:


178

GET 요청에서 요청 매개 변수는 쿼리 문자열 (URL의 물음표 다음 데이터)에서 가져옵니다. 예를 들어, URL http://hostname.com?p1=v1&p2=v2 에는 두 개의 요청 매개 변수 (p1 및 p2)가 있습니다. POST 요청에서 요청 매개 변수는 요청 본문에서 인코딩 된 게시 된 데이터와 쿼리 문자열 모두에서 가져옵니다.

이 예제는 생성 된 출력에 요청 매개 변수의 값을 포함시키는 방법을 보여줍니다.

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

URL로 페이지에 액세스 한 경우 :

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

결과 출력은 다음과 같습니다.

Hello <b>John Smith</b>!

쿼리 문자열에 name을 지정하지 않으면 출력은 다음과 같습니다.

Hello <b>null</b>!

이 예제는 스크립틀릿에서 쿼리 매개 변수의 값을 사용합니다.

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

97
스크립틀릿은 나쁜 습관으로 간주됩니다.
BalusC 2009

14
xmlEncode를 잊지 마십시오. 이것은 현재 반영된 xss에 취약합니다
Esailija

5
XSS 취약점의 경우 -1입니다. 두 번 투표 할 수 있다면 EL을 사용하여 작업을 수행 할 수있을 때 스크립틀릿을 사용할 경우 -1이됩니다. 진지하게, 이것을하지 마십시오 .
Jules

더 나은 솔루션이 존재할 때 스크립틀릿 사용을 제안하는 것은 코드 품질에 해 롭습니다.
Suketu Bhuta

2
"스크립틀릿은 나쁜 습관으로 간주됩니다."와 관련 하여 대안에 대한 다른 질문에서이 답변을 참조하십시오 .
Pixelstix

243

[정보 암시 적 객체통합 표현 언어자바 EE 5 자습서는 글을 참고하세요 :

암시 적 객체

JSP 표현식 언어는 내재 된 오브젝트 세트를 정의합니다.

  • pageContext: JSP 페이지의 컨텍스트 다음을 포함한 다양한 객체에 대한 액세스를 제공합니다.
    • servletContext: JSP 페이지의 서블릿 및 동일한 애플리케이션에 포함 된 웹 컴포넌트의 컨텍스트입니다. 웹 컨텍스트 액세스를 참조하십시오.
    • session: 클라이언트의 세션 객체. 클라이언트 상태 유지를 참조하십시오.
    • request: 요청이 JSP 페이지의 실행을 트리거합니다. 요청에서 정보 얻기를 참조하십시오 .
    • response: JSP 페이지에서 리턴 한 응답입니다. 응답 구성을 참조하십시오.
  • 또한 다음 객체에 쉽게 액세스 할 수있는 몇 가지 암시 적 객체가 제공됩니다.
    • param: 요청 매개 변수 이름을 단일 값으로 맵핑합니다.
    • paramValues: 요청 매개 변수 이름을 값의 배열에 맵핑합니다.
    • header: 요청 헤더 이름을 단일 값으로 맵핑합니다.
    • headerValues: 요청 헤더 이름을 값 배열에 맵핑합니다.
    • cookie: 쿠키 이름을 단일 쿠키에 매핑
    • initParam: 컨텍스트 초기화 매개 변수 이름을 단일 값으로 맵핑합니다.
  • 마지막으로 범위 개체 사용에 설명 된 다양한 범위 변수에 액세스 할 수있는 개체가 있습니다.
    • pageScope: 페이지 범위 변수 이름을 해당 값으로 맵핑합니다.
    • requestScope: 요청 범위 변수 이름을 해당 값에 맵핑합니다.
    • sessionScope: 세션 범위 변수 이름을 해당 값에 맵핑합니다.
    • applicationScope: 응용 프로그램 범위 변수 이름을 해당 값에 맵핑합니다.

흥미로운 부분은 굵게 표시되어 있습니다. :)

따라서 질문에 대답하려면 다음과 같이 (EL을 사용하여) 액세스 할 수 있어야합니다.

${param.accountID}

또는 JSP 스크립틀릿 사용 (권장하지 않음) :

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

EL을 활성화하기 위해해야 ​​할 일이 있습니까? jboss6을 사용하고 있으며 $ {param.accountID}를 사용하면 브라우저에서 일반 텍스트로 처리됩니다.
simgineer


81

EL (JSP Expression Language) 사용 :

${param.accountID}


1
URL 디코딩을 처리합니까?
vikingsteve

@vikingsteve 네, 그렇습니다
Neil McGuigan

2
그러나 재 인코딩은 HTML / XML 엔터티로 처리하지 않으며 XSS 방지에 필요합니다. JSTL <c:out value="${param.accountID}" />을 사용하십시오 .
Jules

21

여기에 의견을 추가 할 수 있다면 ...

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

나를 위해 작동하지 않습니다 (0을 인쇄합니다).

대신, 이것은 작동합니다 :

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


주의 할 사항 : param에는 URL 쿼리 인수보다 더 많은 값 (예 : 모델 맵의 값)이 포함됩니다. URL 쿼리 인수에 값이 있는지 여부를 구체적으로 확인해야하는 경우 (예 : 양식 제출의 일부로 제출 됨) $ {pageContext.request.queryString}을 살펴볼 수 있지만 값은 params와 같은 멋진지도입니다.
Paul



0

예를 들어 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");
}

그리고 매개 변수는 쿼리에 입력하는 데 사용됩니다

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

이를 위해 java에서 URL메소드 호출 이 있습니다. request.getParameter여기에 숫자를 캐스트하려면 int문자열 값을 캐스트하십시오 string. 귀하의 요구 사항을 위해 페이지의 아래 줄을지나 복사하십시오.

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

이제이 값 accountId을 전체 페이지에서 사용 하여 호출 할 수 있습니다 .

여기 accountId에 매개 변수의 이름이 있습니다.이 매개 변수를 사용하여 둘 이상의 매개 변수를 얻을 수도 있지만 작동하지 않습니다. 요청을 GET칠 경우 에만 메소드 와 함께 작동 POST하며 오류가 발생합니다.

이것이 도움이 되길 바랍니다.


0

page 1 : Detail page 2 : <% String id = request.getParameter ( "userid"); %> // 이제 hsql detail product의 SQL 쿼리에 id를 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.