2012-06-26 3 views
0

데이터베이스를 쿼리하고 결과를 JSP로 반환하는 Java Servlet을 작성했습니다. 위의 URL 표시를 URL에서 매개 변수로 HashMark를 읽는 방법

= 테스트 사용자 ID \ \ testenv.com 이후 올바른 결과를 타나

을 : HTTP : 가 나는 URL

//Reading Parameter 
String User = request.getParameter("userid"); 

//Executing the SQL 
String sqluser = "SELECT 1 FROM <table name> WHERE username = ? 

pstmt = con.prepareStatement(sqluser); 
pstmt.setString(1, User); 
rset = pstmt.executeQuery(); 

샘플 URL에서 전달 된 매개 변수를 기반으로 SQL 문을 실행하고 user = 'tana'.

하지만 사용자 이름에 "#"이있는 사용자가 있습니다. HTTP : 예를 들어

? \ testenv.com 테스트 \ 사용자 ID = 라 # URL이 "라 위의 경우에 사용자 = '라'에도 불구하고 있기 때문에 SQL 문은 값을 반환하지 않습니다

NA #na ". getParameter를 사용하여 "la # na"값을 얻을 수 있습니까? 그렇다면 무엇을해야합니까?

감사합니다.

답변

1

해시 문자는 일반적으로 내부 링크로 사용되므로 올바르게 인코딩해야합니다.

http://testenv.com/test?userid=la%23na 
+0

입력 해 주셔서 감사합니다. –

+0

안녕하세요. 모든 것이 제대로 작동하면 답변으로 표시해야합니다.) –

0

'#'은 URL에서 역할을 가지며 일반 문자가 아닙니다. 이것은 앵커라고 부르며 요청 된 페이지 내의 특정 위치를 표시합니다. 앵커 뒤 부분은 브라우저에서만 사용되므로 쿼리 문자열의 일부가 아니므로 서버로 보내지지 않습니다. 따라서 서버는 la이되고 na은 브라우저에 남습니다.

보낸 URL을 제어 할 수 있으면 인코딩하도록하십시오. 그렇지 않으면 할 수있는 일이별로 없습니다.

+0

답장을 보내 주셔서 감사합니다. URL을 제어 할 수 있습니다. 자바 서블릿에서 URL 인코더/디코더를 사용할 수 있습니까? –

+0

URL 인코딩을 사용하면 '#'이 URL의 합법적 인 부분이기 때문에 문제가 해결되지 않을 것입니다 (동일한 이유로 '/', '?'등은 인코딩되지 않습니다). 단순한 문자열 교체를 사용하고 "#"을 "% 23"으로 변환하십시오. – eran

+0

내가 할 계획은 param1 = encodeURIComponent ("userid")입니다. URL을 작성하십시오. url = "http://testenv.com/test?userid="+param1="생성 된 전체 URL은 http://testenv.com/test?userid=la%23na이어야합니다. 자바 서블릿의 Getparameter는 userid = la # na에 대한 userid. –

관련 문제