자바스크립트가 서블릿에 데이터 던져주기에 대한 질문입니다

ntwiz의 이미지

안녕하세요. 이 마을에 종종 들러 정보를 얻지요 @_@

헌데 지금 제가 봉착한 문제는

자바스크립으로 encodeURIComponent()로 만든 파라메타값을

서블릿에서 받아 더떻게 하든 디코드된 정상적인 원래 값으로 인식하려는데요.

거참...

encodeURIComponent()안쓰고 넘긴값은 new String(text.getBytes("Cp1252"), "UTF-8")으로 해결되더군요

그런데... 자바스크립으로 encodeURIComponent()을 써서 서블릿으로 넘겼을땐 ????로 도배되어집니다.

gg선언입니다;;;

dormael의 이미지

서버쪽에서 ecnodeURIComponent() 의 디코딩에 해당하는 함수 decodeURIComponent()같은것을 통해 변환한 후에 문자열의 인코딩값을 위의 방식으로 변경하시면 될 듯 한데요.
^^

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

ntwiz의 이미지

자바스크립으로 다시 받아서 서블릿에 다시 넣을수 없지않나요?;;; -_-a 긁적긁적;

서블릿 자체에서 get 이나 post로 받아서 자바로 변환을 해줘야 할거같은데요..

ㄷㄷㄷ...이걸 모르겠네요;

dormael의 이미지

네 서버에서 받은것을 서버내에서 디코딩 해주어야 합니다.
제가 이해하기 어렵게 설명을 한것 같네요. ㅡ,.ㅡ

아무튼 클라이언트에서 인코딩 해서 보낸 내용을 서버에서 적절히 디코딩 해서 써야 합니다.

그 부분이 없어서 다 깨져 보이는게 아닌가요?

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

ntwiz의 이미지

자바스크립트으로 text = encodeURIComponent(text); 했답니다.

submit() 날려서
------------------------------------------------------------------------

자바서블릿 페이지에서 String text = req.getParameter("text"); 로 받았답니다.

out.print(text); 했더니 페이지에는 ??????로 찍히는군요.
------------------------------------------------------------------------

서블릿페이지에서 자바스크립트의 decodeURIComponent()처럼 깔끔하게 처리해줄 수 있는 방법을 찾습니다 ㅡ,ㅢ

배는 고프고.. 압박은 깊어지고;;; 쩝쩝;;

cleol의 이미지

이 부분에 대해서 서블릿 스펙에 제대로된 언급이 없기 때문에 항상 문제가 발생합니다. 우선 post 요청에 대해서는 request.setCharacterEncoding("UTF-8") 같은 방식으로 처리해줄 수 있습니다. 필터를 하나 만들어서 모든 요청에 대해 인코딩을 명시해주는 것도 좋은 방법입니다. 그런데 문제는 get 요청입니다. 서블릿 컨테이너마다 처리 방식이 다릅니다. 톰캣 5.x 의 경우 get 에 대해서는 server.xml 에서 인코딩을 설정해줘야 합니다. URIEncoding="UTF-8" 과 같은 방식으로 속성을 줘야 합니다. 아마 connector 정의에 속성으로 줘야했던거 같은데 확실치는 않습니다. 검색해보시기를... 또는 get 요청도request.setCharacterEncoding 에서 정해준 인코딩을 따르도록 설정해줄 수도 있는데 마찬가지로 설정 방법은 잘 기억이 나지 않는군요^^; 역시 구글링을 한번 해보시면 쉽게 찾으실 수 있을겁니다.

ntwiz의 이미지

대략 무슨말씀하시는지는 알겠네요.

그.러.나. 정작 실 코딩에서는 안되는 안습이;;;큭

값넘겨주는 html페이지의 자바스크립트 encodeURIComponent()는 하지 않고 원래 값 그대로 서블릿에 던져줍니다.

그리고 받는 서블릿에서는 String text = new String(req.getParameter("text").getBytes("Cp1252"), "EUC-KR"); 로 받아와서 한글 표기는 임시방편으로 해결했습니다.
(출처: http://www.jkkang.net/cgi-bin/CrazyWWWBoard.cgi?db=servlet&mode=read&num=49&page=8&ftype=6&fval=&backdepth=2 )

URL에는 한글로 나오는게 흠이지만 ;;;; 여튼 이렇게라도 음.....

get방식에 관해 server.xml의 설정을 어떻게 하는지 모르는지라(봐도 몰겠음;;) 무식하게

doGet(HttpServletRequest req, HttpServletResponse resp){doPost(req, resp);} 해버렸습니다

프하하;; 이래도 되는건지 안되는건지는 모르겠으나, 돌아가긴합니다;; (모르면 무식하다란 말이 픗;)

좀더 상세히 가르쳐주신다면 감사 듬뿍 드리지요 허헛;

cleol의 이미지

(중복 포스팅 됐습니다. 삭제합니다.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.