java에서 Servlet 디코딩 처리 방법

7765 단어 Servlet뒤죽박죽
오늘 웹 서비스 프로그램을 배치할 때, 페이지에서 데이터를 가져오는 servlet에 디코딩 문제가 발생했습니다. servlet에서 리퀘스트를 했습니다.setCharacterEncoding("GB2312");이 단락의 문자를 코드에 넣었지만 여전히 난마 문제가 생겼다.인터넷에서 자료를 찾으면 다음과 같다. JAVA는 유니코드 인코딩이다. 당신은 먼저 ISO8859-1로 변환한 다음에 GBK 또는 GB2312로 변환한다.java 코드

request.setCharacterEncoding("ISO8859-1");   
ad=request.getParameter("name");   
byte[] temp3 = ad.getBytes("GBK");   
String str = new String(temp3);  
이게 중국어야!서버에 인코딩 변환을 직접 설정하는 더 간단한 방법도 있다.TOMCAT 5.0.28을 사용합니다.... 에서\Tomcat 5.0\conf 디렉토리에서 SERVER를 찾습니다.XML 파일, 글꼴로 열면 다음과 같이 설정합니다. 안에 속성을 추가하면 됩니다. URIENCODING = "GBK"테스트를 통과하고 그 다음에request입니다.setCharacter Encoding("GB2312")이라는 말이 도대체 무슨 작용을 하는지, 난마 문제를 해결하지 못하면 우리가 그것을 이용하여 어떤 작용을 하는지 정리한 자료는 다음과 같다. (1) JSP 페이지에는 중국어가 있지만 다음은 난코딩이다. 해결 방법은 JSP 페이지의 인코딩이 있는 곳이다. Jsp가 자바 파일로 바뀔 때의 인코딩 문제이기 때문에 기본적으로 어떤 서버는 ISO-8859-1이다. 만약에 JSP에 중국어를 직접 입력했다면,Jsp가 이를 ISO8859-1로 처리하는 것은 틀림없이 문제가 있을 것이다. 이 점은 Jasper가 생성한 자바 중간 파일을 보면 확인할 수 있다
(2) Request 대상으로 고객이 제출한 한자 코드를 가져오면 오류가 발생합니다. 해결 방법은 Filter, 즉 Servelet 필터를 설정하는 것입니다. 코드는 다음과 같습니다.

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("GBK");

//
chain.doFilter(request, response);
}

웹 설정.xml

<filter></filter>
<filter-name></filter-name>Set Character Encoding
<filter-class></filter-class>SetCharacterEncodingFilter

<filter-mapping></filter-mapping>
<filter-name></filter-name>Set Character Encoding
<url-pattern></url-pattern>/*

만약 당신의 것이 아직도 이런 상황이 발생한다면 당신은 네 번째 상황이 발생했는지, 당신의 Form이 제출한 데이터가 get으로 제출되었는지 아래를 보세요. 일반적으로post로 제출하면 문제가 없습니다. 만약 그렇다면 네 번째 중 해결 방법을 보십시오.그리고 한자 문자가 포함된 정보를 처리하는 코드는 다음과 같다.

public String toUni(String gbStr){
String uniStr = "";
if(gbStr == null){
gbStr = "";
}
try{
byte[] tempByte = gbStr.getBytes("GB2312");
uniStr = new String(tempByte,"ISO8859_1");
}catch(Exception ex){
}
return uniStr;
}
}
당신도 직접적인 변환을 할 수 있다. 먼저 얻은 문자열을 ISO-8859-1로 인코딩한 다음에 이 인코딩을 한 바이트 그룹에 저장한 다음에 이 그룹을 문자열 대상으로 바꾸면 된다. 예를 들어 Stringstr=request.getParameter(“girl”);Byte B[]=str.getBytes(“ISO-8859-1”);Str=new String(B);상술한 전환을 통해 제출한 모든 정보가 정확하게 표시됩니다.(3) Formget에서 서버에서 request를 요청합니다.getParameter ("name") 는 난수로 되돌아옵니다.tomcat의 방법으로 Filter를 설정해도 소용없거나 Request를 사용할 수 없습니다.setCharacterEncoding("GBK");문제가 되지 않는 것은 매개 변수 전달을 처리하는 방법에 있다. 만약에 servlet에서 DoGet(Http Servlet Request request, Http Servlet Response) 방법으로 처리한다면 앞에

request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
라고 쓰여도 소용이 없다. 되돌아오는 중국어는 난장이다!!!이 함수를 DoPost(HttpServletRequest request, HttpServletResponse response)로 바꾸면 모든 것이 OK입니다.마찬가지로 두 개의 JSP 페이지로 폼 입력을 처리하는데 중국어를 표시할 수 있는 것은post 방법으로 전달되었기 때문에 get 방법으로 바꾸는 것은 여전히 안 된다.이를 통해 알 수 있듯이 servlet에서 DoGet () 방법이나 JSP에서 get 방법으로 처리할 때 주의해야 한다.브라우저를 통해 매개 변수 정보를 전달해야 하기 때문에 자주 사용하는 문자 집합의 충돌을 일으키거나 일치하지 않을 가능성이 높습니다.//이곳은request로 이해됩니다.setCharacterEncoding("GBK");set는 Request의 body입니다. 헤더 부분이 아니라 get가 요청할 때 파라미터를 url 뒤에 놓고 body에 두지 않기 때문에 이때 Request입니다.setCharacter Encoding("GBK")은 작용하지 않습니다.post 제출로 바꾸면 문제가 없습니다.테스트 통과!!!
해결 방법: 1)tomcat의 서버를 엽니다.xml 파일, 블록을 찾아 다음 줄에 추가합니다: URIENCODING="GBK"온전한 것은 다음과 같습니다.

<connector uriencoding="GBK" maxthreads="150" debug="0" redirectport="8443" port="8080" enablelookups="false" maxsparethreads="75" minsparethreads="25" connectiontimeout="20000" disableuploadtimeout="true" acceptcount="100"></connector>
2) 토마토캣을 다시 시작하고 모든 것을 OK합니다.tomact.org에서 설명한 This specifies the character encoding used to decode the URI bytes, after% x decoding the URL.If not specified, ISO-8859-1 will be used. URI의 bytes, request를 변환한 것입니다.setCharacter Encoding("GBK")이 request도 바꾸면 문제가 ok됩니다!
(4) JSP 페이지에 중국어가 있고 단추 위에 중국어도 있지만 서버를 통해 페이지를 볼 때 혼란이 발생한다. 해결 방법은 우선 JSP 파일에 현지화된 메시지 텍스트를 직접 포함하지 말고 탭을 통해 Resource Bundle에서 텍스트를 얻어야 한다는 것이다.당신의 중국어 텍스트를 응용 프로그램에 두어야 합니다.properties 파일에 이 파일은 WEB-INF/classes/*에 놓여 있습니다. 예를 들어 저는 페이지에 이름, 나이 두 개의 label이 있습니다. 저는 먼저 응용 프로그램을 만들려고 합니다.properties, 안에 있는 내용은name='이름'age='나이'입니다. 그리고 이 파일을 WEB-INF/classes/properties/아래에 놓고 응용 프로그램에 따라 보겠습니다.properties 파일, 그를 인코딩하여 중국어 자원 파일을 만듭니다. 이름은 Application_cn.properties.JDK에서native2ascii 명령을 제공하여 문자 인코딩의 변환을 실현할 수 있습니다.DOS 환경에서 응용 프로그램을 설치하는 것을 찾습니다.properties의 이 파일의 디렉터리, DOS 환경에서 명령을 실행하면 GBK로 인코딩된 중국어 자원 파일을 생성합니다 Application_cn.properties:native2ascii ?encoding gbk Application.properties Application_cn.properties가 위 명령을 실행하면 다음과 같은 Application_cn.properties 파일:name=u59d3u540d age=u5e74u9f84, Struts-config.xml에서 설정: .이 단계에 이르러 거의 절반을 완성했다. 이어서 JSP 페이지에 써야 한다. 이름의 라벨은 을 써야 한다. 이렇게 하면 페이지에 나타날 때 중국어 이름이 나온다. 나이도 마찬가지다. 단추에 있는 한자 처리도 마찬가지다.(5) 데이터베이스에 쓰는 것은 난센스입니다. 해결 방법: Filter, 즉 Servelet 필터를 설정해야 합니다. 코드는 두 번째 때와 같습니다.JDBC를 통해 데이터베이스를 직접 연결할 때 설정된 코드는 다음과 같습니다. jdbc:mysql://localhost:3306/workshopdb?useUnicode=true &characterEncoding=GBK를 사용하여 데이터베이스에 있는 코드가 잘못된 코드인지 확인합니다.만약에 데이터 원본 링크를 통해 이런 식으로 쓸 수 없다면, 우선 프로필에 적어야 한다.tomcat 5.0.19에서 데이터 원본을 설정한 곳은 C:Tomcat 5.0confCatalinalocalhost 아래에 있다. 내가 세운 프로젝트는workshop이고 설치한 목록은 webapp 아래,workshop이다.xml 프로필은 다음과 같습니다.

<context debug="0" path="/workshop" docbase="workshop"></context>reloadable="true" >

<resource name="jdbc/WorkshopDB"></resource>auth="Container"
type="javax.sql.DataSource" />

<resourceparams name="jdbc/WorkshopDB"></resourceparams>
<parameter></parameter>
<name></name>factory
<value></value>org.apache.commons.dbcp.BasicDataSourceFactory

<parameter></parameter>
<name></name>maxActive
<value></value>100

<parameter></parameter>
<name></name>maxIdle
<value></value>30

<parameter></parameter>
<name></name>maxWait
<value></value>10000

<parameter></parameter>
<name></name>username
<value></value>root

<parameter></parameter>
<name></name>password
<value></value>

<parameter></parameter>
<name></name>driverClassName
<value></value>com.mysql.jdbc.Driver

<parameter></parameter>
<name></name>url
<value></value>

굵은 부분은 특히 주의해야 한다. JDBC와 직접 연결할 때와 다르다. 만약에 설정이 정확하다면 중국어를 입력할 때 데이터베이스에 들어가면 중국어가 된다. 한 가지 주의해야 할 것은 데이터를 표시하는 페이지에서도 이 코드를 사용해야 한다는 것이다.주의해야 할 것은 어떤 프론트 데스크톱의 사람들이 코드를 쓴 후에 Dreamver로 쓴 것이다. Form을 썼을 때 그를 jsp로 바꾸었다. 그러면 주의해야 할 점이 하나 있다. 바로 Dreamver에서 Action의 제출 방식은 Request이다. 너는 그를 와야 한다. 왜냐하면 jsp의 제출 과정에서 POST와 GET 두 가지 방식이 있기 때문이다.그러나 이 두 가지 방식으로 제출된 코드는 인코딩에 있어 크게 다르다. 이것은 뒤에 있는 곳에서 설명한다.

좋은 웹페이지 즐겨찾기