자신의 시스템은 UTF-8인데 다른 시스템으로 form get 방식으로 데이터를 발송 하게 되면 한글이 깨져서 

상대방에게 전달 되는 경우가 생길수 있습니다. 이 경우 상대방의 시스템은 EUC-KR일 확률이 높습니다. 

전송하는 페이지의 ENCODING을 해당 페이지만 EUC-KR로 변경 해줘도 되지만 그렇게 안되는 경우 

URLEncoder.encode(str, "EUC-KR") or URLEncoder.encode(str, "UTF-8") 등을 이용해서 데이터를 전송 하면 됩니다.

이런 방식은 HttpURLConnection 을 이용해서 데이터를 전송 할때도 동일하게 사용 할 수 있습니다.

반응형
Posted by 질주하는구
,

가끔 jsp/jdbc를 이용하는 기본 소스 교육을 받지 못하고 오는 직원들을 위해서 만든 테스트용

jsp파일 입니다.



testDB.jsp



반응형
Posted by 질주하는구
,

http://www.javaservice.net/~java/bbs/read.cgi?m=resource&b=consult&c=r_p&n=1106977463

참고 하자고 올립니다.

반응형
Posted by 질주하는구
,

<%@ page contentType="application" pageEncoding="euc-kr" language="java" %>


<%@ page import="java.io.*" %>

<%@ page import="java.net.*" %>

<%@ page import="javax.servlet.http.*" %>

<%

java.util.Enumeration ee = System.getProperties().propertyNames(); 


while(ee.hasMoreElements()){ 

String obj = (String)ee.nextElement(); 


System.out.print(obj + " ===> "); 

System.out.println(System.getProperty(obj)); 

}

%>

반응형
Posted by 질주하는구
,

Response has already been committed

Response has already been committed, be sure not to write to the OutputStream or 

to trigger a commit due to any other action before calling this method.


위와 같은 경우는 (제 경험으로는) 통상적으로 JSP와 같은 애플리케이션 코드에서 다른 페이지로

forward() 후에 곧바로 return; 문을 기술하지 않은 경우에 종종 나타납니다.

forward()를 하면, JSP는 현재 outputstream을 reset하고, forward()를 수행하여 다른 페이지로의

전환을 하게 됩니다. 그런데, (개발자의 실수로) forward() 후에 return;문장을 삽입하지 않으면

그 다음 texture 문장을 실행하려하고, 그 texture 결과를 전송하려 할 때, "무슨 소리냐, 좀 전에

forward()하라고 해서 outputstream을 이미 다른 곳으로 돌렸다" 이런 이야기로 이해합니다.

반응형
Posted by 질주하는구
,

각 언어별로 HTTP_REFERER를 확인하는 방법은 아래와 같습니다. 리턴값은 스트링이구요.


ASP => Request.ServerVariables("HTTP_REFERER")

PHP => $_SERVER['HTTP_REFERER']

JSP => request.getHeader("REFERER")


HTTP_REFERER의 값의 유무와 각 웹서버의 로그파일을 이용해서

어떻게 방문했는지를 추출할 수 있습니다.


1. 주소창에 주소를 입력해서 들어오는 경우

- HTTP_REFERER의 값이 없음

ex)strReferPath = Trim(Request.Servervariables("HTTP_REFERER"))

strReferPath == null ?  1 : 0 -> 1이 반환


2. '즐겨찾기'를 이용해서 들어오는 경우(IE의 경우)

- HTTP_REFERER의 값이 없음

- 로그파일에 ..../favicon.ico로그가 먼저 남는다.

- 이는 IE가 즐겨찾기를 눌러서 사이트를 방문할 경우 favicon.ico 요청을 하고, 해당 URL의 요청을 하기때문입니다.


3. 링크를 통해서 들어오는 경우.(쉽게 말해서 <a>태그를 통해)

- HTTP_REFERER에 이전 URL정보가 들어있음.


자바스크립트로 location.href를 통해 설정된 주소로 들어왔을경우 이전 주소를 알 수 없기 때문에 프로그램 

작업시 가능하면 페이지 이동은 HREF를 통해서 이루어지게 작업 해야 합니다.

반응형
Posted by 질주하는구
,

현재는 struts2나 spring4 등을 사용하기 때문에 잘 쓰지 않지만 간혹 jsp 혹은 servlet만으로 구성된 사이트를 개발 하거나 유지보수 해야 하는 경우 jsp파일 업로드 구현시 가장 많이 사용하는 cos.jar에 대해서 알아 보자


-www.servlets.com 에 접속하여 왼쪽 메뉴중 com.oreilly.servlet 메뉴를 클릭한다.

-가장 최근에 배포된 버전을 다운로드 받는다.(cos-26Dec2008.zip)

-압축을 풀어 cos.jar 를 컨테이너의 WEB-INF/lib  폴더에 넣어두자 

-외부 라이브러리를 추가하였으므로 컨테이너를 재가동 한다.


MultipartRequest 클래스 사용

cos.jar 를 사용하는 경우 MultipartRequest 를통해서 파일 업로드를 구현 하게 된다.

해당 메소드는 아래의 생성자를 가지고 있다.


1.MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory) 


  - 요청객체와 저장경로를 인자로 갖는 생성자이다.

          

2.MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize) 


  - 요청객체와 저장경로 , 그리고 최대 파일 사이즈를 인자로 갖는 생성자

          

3.MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize, FileRenamePolicy policy) 

  - 요청 객체,저장경로,최대 파일 사이즈,그리고 중복파일 인터페이스를 사용할수 있는 생성자이다.


    참고로 , 중복파일 처리 인터페이스란 업로드시 파일의 이름이 중복되면, 내부적인 규칙에 의해 파일명을 임의로 부여해주는 편리한


    기능이다.



4.MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize, java.lang.String encoding) 


  - 요청객체,저장경로,최대 파일 사이즈,파일의 인코딩 방식을 지정할 수 있는 생성자


    만일 파일명이 한글이라면 이 생성자의 사용은 매우 유용하겠다.

          

5.MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize, java.lang.String encoding, FileRenamePolicy policy) 

  - 요청객체,저장경로,최대 파일 사이즈,인코딩방식,중복처리 인터페이스 사용 가능 생성자


          

6.MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, java.lang.String encoding) 

  - 요청객체,저장경로,인코딩 방식 지정 가능 생성자          



7.MultipartRequest(javax.servlet.ServletRequest request, java.lang.String saveDirectory) 

  - HTTP기반이 아니라 일반 프로토콜 기반에서 요청 객체,저장경로를 인자로 갖는 생성자



8.MultipartRequest(javax.servlet.ServletRequest request, java.lang.String saveDirectory, int maxPostSize)  

  - HTTP기반이 아니라 일반 프로토콜 기반에서 요청객체,저장경로,최대 파일 크기를 인자로 갖는 생성자


각각의 생성자를 이용해서 파일 업로드 관련 메소드를 구현 하면 된다.

반응형
Posted by 질주하는구
,

아래와 같은 문제는 가끔 정상적인 파일 업로드 소스에서도(자신의 로컬) 발생 할 수 있는데 이 경우

form 안에서 submit이 2번 이루어 지고 있는건 아닌지 확인 할 필요가 있습니다.

간혹 form 과 submit 이벤트의 발생에 대해서 혼동하여 submit 이벤트가 2번 발생하게

작업 하는 경우도 있으니.. 먼저 그 부분을 체크


ERREXP(ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error)

클라이언트에서 엑셀 파일을 업로드 시킬 때 이런 메세지가 발생했다.

내 pc가 서버이자 클라이언트 일때는 이런 에러가 발생하지 않는다.

그러나 다른 pc에서 내pc로 접근해서 업로드 할 경우 이런 에러가 발생한다.


System Exception : 

ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error

Send Exception Info : ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error


해당 문제가 발생하는 경우에 대한 okjsp에서의 답변 모음


•  Remote Client Aborted Request, IOException: Connection reset 

클라이언트쪽에서 요청을 중지해서 연결이 다시 시작되었다는 것 같습니다. 

rmi 호출하는 부분이나 파입 업로드 다운로드를 체크해보는것이 좋을듯 합니다. 


Servlet.service() for servlet default threw exception 

ClientAbortException: java.net.SocketException: Connection reset 

또한 이것은 톰캣 자체에서 커넥션이 원할하지 않을때 나타납니다.-0-; 

 

 

•  리프레쉬를 하거나 취소를 했을경우 기존의 요청이 채 끝나기전에 취소가 되는것에 대한 에러입니다. (비단 엑셀다운로드 뿐만이 아니라 페이지 로딩이 길어질때 완료되지못하고 취소되는 경우 빈번히 발생하는 에러입니다.) 

jxl로 엑셀파일을 만드는 경우 의외로 메모리를 많이 잡아먹습니다. 엑셀파일을 만들때 중간중간 쓰는식이 아니라 메모리에 생성했다가 한꺼번에 파일로 만드는것같습니다. (30m가 채 안되는 엑셀파일을 만들때 vm의 메모리를 128m까지 확보했던 경험이있습니다.--;) 아마 poi도 마찬가지 방식이 아닐까한데... 

엑셀다운로드 방식을 바꿔보시는것이 좋을듯합니다. (배치를 돌리거나, application에 쓰레드방식으로 처리해서 반복요청이 안이루어지도록...) 

 

•  웹에서 클라이언트는 얼마든지 다운로드를 취소할 권리가 있으므로 ClientAbortException 가 나는것은 당연합니다. 

ClientAbortException 가 안나게 하는 방법을 찾는 것보단, 얼마든지 있을수 있는 상황이니 try,catch 를 써서 리소스를 반환하는 등의 대처 코드를 구현하는게 더 낫지 않을까요 

 

 

해당 페이지에 Client가 요청후 요청처리가 완료되기전에 요청을 끊는경우 (즉 다른 페이지로 이동을 한다거나 하는..) 나타납니다.

반응형
Posted by 질주하는구
,

java.lang.IllegalStateException: getOutputStream() has already been called for this response

JSP파일에서 getOutputStream 관련 위의 에러가 발생하는 경우

getOutputStream()을 대신해서 getWriter() 호출 해주면 해결 됩니다.

jsp는 servlet으로 변환될 때 자동적으로  write객체가 존재하는데 OutputStream 그냥 사용하는 경우 정상적으로

인식 하지 못하는 문제가 있어서 가능 하면 getWriter()을 사용하는게 좋습니다.

getOutputStream의 경우 servlet에서 사용할 수 있습니다.


유지보수 등으로 부득이 하게 해당 메소드를 사용해야 하는 경우

jsp페이지에서 

아래와 같이 처리를 해주면 됩니다.


response.getWriter()

try {

out.clear(); //out--> jsp자체 객체

out=pageContext.pushBody(); //out--> jsp자체 객체

OutputStream out = response.getOutputStream(); 

}

이렇게 outputstream을 생성하기 전에 jsp자체의 out객체를 비워주고 사용해야 합니다.



반응형
Posted by 질주하는구
,

jsp에서 캐쉬 관련 부분을 수정해야 하는 경우


response.setHeader("Pragma","cache");

response.setDateHeader("Expires", 0);

response.setHeader("Cache-Control", "cache"); 



반응형
Posted by 질주하는구
,