2012-03-21 2 views
1

요청 매개 변수의 순서는 Tomcat 서블릿 컨테이너 (다른 컨테이너가 같은 문제를 공유하는 것 같음)에서 유지되지 않습니다.서블릿 컨테이너의 요청 매개 변수 순서

이것은 매우 잘못되었습니다.

HttpServletRequest에서 요청 매개 변수의 실제 순서를 어떻게 복원합니까?

편집 사이의 차이가 중요하지 않습니다 요청 매개 변수의 순서를 생각하는 사람들을 위해 BTW :

http://blah?a=1&a=2 

http://blah?a=2&a=1 

그래서 위해 수행 중복 요청 매개 변수에 대한 문제 (다행히도 Java는이 권리를 처리합니다.)

+2

왜 매개 변수의 순서가 필요합니까? 이름이 –

+0

인 모든 사용자가 액세스 할 수 있습니다. 매개 변수의 순서를 사용하여 목록의 순서 즉 sorted/linkedhashmap을 나타낼 수 있기 때문입니다. 한 번 정렬 된 튜플이 필요하다고 확신합니까? 나는 주문을하기 위해 요청 매개 변수를 맹 글링하는 이름에 의존하기를 원하지 않았다. –

+0

나는 고객으로부터 무엇이든 의지하는 것이 나쁜 생각이라는 개념을 두 번째로 사용한다. 잘못 될 수있는 방법이 너무 많습니다. –

답변

3

일반적으로 매개 변수의 순서에 의존해서는 안됩니다. 이 필요한 정말 확실하다면, 당신은 할 수 있습니다

  • 사용 request.getQueryString()GET 매개 변수
  • 원시 요청 (request.getInputStream())를 얻을 제출 POST PARAMS를 읽어 볼 수 있습니다.
+0

요청을 시도 했어요.getInputStream() 및 작동하지 않았다 (일부 필터 업스트림은 상품을 먹었 음에 틀림). 나는 게으르므로 요청 순서에 의존하고 있었고 이것에 대해 알아 내기 위해 충격을 받았습니다. –

+0

필터 일 필요는 없습니다. getParameter()를 호출하자마자 POST 매개 변수를 파싱 할 때 입력 스트림을 소비하는 서블릿 엔진 자체가 될 것입니다. 적어도 한 번. [servlet api doc] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter (java.lang.String)) 인용 : _ 매개 변수 데이터가 (예 : HTTP POST 요청과 함께 발생하는 요청 본문) getInputStream() 또는 getReader()를 통해 본문을 직접 읽으면이 메서드의 실행을 방해 할 수 있습니다 ._ –

0

아마도 getRequestURL : http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getRequestURL()을 사용하고 매개 변수를 구문 분석 할 수 있습니다.

하지만 댓글에 "매우 틀린 것 같습니다."라고 생각하면 자세를 재고해야합니다.

매개 변수를 주문하는 것은 의미가 없습니다. 예를 들어, 매개 변수를 기반으로 자동차 목록을 요구하고 있다고 가정 해 보겠습니다. 초록색 목초지 목록이나 녹색 초록색 목차 목록을 요구하는 것은 중요하지 않습니다.

+0

아니요, 원했던 TODO 목록을 만들었다 고 할 수 있습니다. 한 번에 모두 업데이트 (나는이 BTW하지 않을거야). 각 매개 변수 이름은 항목의 ID 일 수 있습니다. 값은 설명이됩니다. 매개 변수의 순서가 우선 순위가됩니다. 나는 그것의 견고한 말은 아니지만 ... 나는 이것에 대해 처음 알게 된 빠른 해킹을 기대하고 있었다. –