레이블이 tomcat인 게시물을 표시합니다. 모든 게시물 표시
레이블이 tomcat인 게시물을 표시합니다. 모든 게시물 표시

2013년 3월 8일 금요일

한글 포함된 url 전송


환경
CentOS release 5.8 (Final)
apache-tomcat-7.0.35

현상
개발환경을 모두 utf-8로 맞추고 개발을 했지만 아무리 GET으로 api를 호출해도 한글만큼은 깨지는것이였다
물론 클라이언트에서는 utf-8로 인코딩후 요청

GET /list/?objectPath=/%ED%95%9C%EA%B8%80/ HTTP 1.1

서버는 아래처럼 spring을 사용했기 때문에 당연히 spring에서 처리해주는걸로 기대했지만 그게 아니였다 ㅡㅡ;;

org.springframework-version : 3.2.0.RELEASE
org.springframework.data-version : 1.2.0.RELEASE
org.springsecurity-version : 3.1.3.RELEASE

해결방법
처음엔 받아온 값을 utf-8로 변환시켰었다

String str = new String(value.getBytes("8859_1"), "utf-8");

당연히 잘되었음

하지만 먼가 소스상의 지저분함을 느꼈었고 다른 해결책을 알아보았다
당연히 간단한 방법이 있었음

tomcat의 server.xml에 설정만 해주면 되었다

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />

결론
한글은 위대하다

2013년 2월 4일 월요일

solaris10 + apache2 + tomcat6 설치 및 연동

*** 2010/07/29 15:13 작성한 내용 ***


환경
solaris10 / sparc
httpd-2.2.16
apache-tomcat-6.0.29
tomcat-connectors-1.2.30

solaris10은 처음 설치시 아파치와 톰캣이 설치가 되어 있다
하지만 시간이 많이 지난 지금 최신 버전을 설치를 하기 위해 과감히 삭제

패키지로 설치된 아파치같은 경우 해당 패키지를 찾아 모두 삭제를 한다

root$ pkginfo -i | grep -i apache
root$ pkgrm 패키지명

그리고 설치를 위해 아파치를 다운받는다
헌데 처음 sunfreeware에서 컴파일된 파일로 패키지 설치를 하니
나중에 tomcat 연동이 제대로 되지 않았다...
이유는 나도 잘 모르겠음......
설치는 DSO, static방식 이런게 있다던데 아마도 static방식이라 그렇다고 하더라..

그래서 http://httpd.apache.org/ 여기서 최신버전을 받는다
Unix Source: httpd-2.2.16.tar.gz 이걸받음

설치시에 root 계정으로 해야되며 gcc도 설치되어있어야 한다
gcc가 설치되어 있지 않다면 sunfreeware에서 받아 설치부터 하면 됨

root$ gunzip httpd-2.2.16.tar.gz
root$ tart xvf httpd-2.2.16.tar

해당폴더로 이동후에 configure를 실행하는데 DSO방식으로 설치해야하기 때문에 옵션을 준다

root$ cd httpd-2.2.16
root$ ./configure --enable-so --enable-mods-shared=most

머라고 막 checking하면서 뭔가 진행되고 나서 make 파일이 생성되었다고 나옴.. 다되면.....

root$ make

이것도 머라고 막 오랫동안 컴파일함....

root$ make install

이렇게 하면 디렉토리에 배포

대충 so를 가능하게하고, modsshared를 most하겠다는 말같음
저렇게 하면 DSO방식으로 설치하는 거라함
나도 잘 모르겠다........그냥 그렇다고들 하더라.....에효....
configure를 마치면 make를 실행해서 컴파일하고, make install을 해서 배포하는거임
default 폴더는 /usr/local/apache2/ 인데 변경할 수도 있다
그건 검색~~~ 왠만하면 안바꾸는게......ㅋㅋ

일단 설치가 완료되면 httpd.conf파일을 수정한다

그전에 /usr/local/apache2/bin/ 에 대해 PATH추가

root$ vi /usr/local/apache2/conf/httpd.conf

- User와 Group을 nobody로 설정
- ServerName에 서버 아이피 또는 도메인 설정
- DirectoryIndex 지시자에 index.jsp 추가
- <Directory />에 "Deny from all" 라인 주석 처리

저장후

root$ /usr/local/apache2/bin/apachectl start
root$ ps -ef | grep httpd

하면 프로세스가 떠있으면 된거

웹에서 서버네임으로 접속해보자
It works! 라고 뜨면 오키

그리고 두번째로 톰캣을 설치한다

톰캣 설치는 그냥 압축풀면 끝

주의사항은 JDK가 깔려 있어야 한다는 겁니다. 솔라리스는 기본적으로 JDK5가 깔려있음
$ java -version 쳐서 확인하고, 안나오면 설치

그리고 다시 톰캣을 설치한다

위와 같은 방식으로 gunzip, tar 까지 벗겨낸다

다됐으면 좋은자리에 옮겨놓자

톰캣설치는 굳이 root 계정으로 안해도 된다

$ mv -r apache-tomcat-6.0.29 /usr/local/tomcat/

/usr/local/tomcat/ 디렉토리로 옮겨놓고
/usr/local/tomcat/bin 로 PATH를 잡아준다

그리고 실행

$ /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar

대충 이렇게 뜸...
웹에서 확인하면
http://ip주소:8080/ 해서 고양이가 나오면 정상

이렇게 아파치와 톰캣을 설치했다면 마지막으로 이 둘을 연동시키자

우선 http://tomcat.apache.org/download-connectors.cgi 에 접속을 하여 tomcat connector unix버전을 받는다

이것 역시 위와 같은 방식으로 gunzip, tar 을 벗겨낸다

압축을 풀었으면 해당 디렉토리의 native 안으로 들어간다
그리고, 아래와 같은 명령어를 쳐준다

아파치 설치할때와 과정이 똑같기 때문에 별 어려움은 없다

root$ ./configure --with-apxs=/usr/local/apache2/bin/apxs

머라 머라 나올꺼임....
처음 아파치를 패키지형식으로 설치를 했다면 저기서 no apxs given 라고 나오면서 에러가 발생된다
아마도 위에서 말한 static으로 설치해서 그럴꺼임
이걸 몰라서 3일동안 삽질을.............ㅡㅡ;;;
마지막에 no apache given이랑 no netscape given이라는게 뜨는데 이유는 몰겠지만 진행은 됨

make를 실행해서 컴파일하고, make install해서 해당 디렉토리로 mod_jk.so 파일을 배포
make install 이 끝나고 나면 /usr/local/apache2/modules 에 mod_jk.so 파일이 생성되어 있다

root$ make
root$ make install

여기까지 끝나면 아파치의 설정 디렉토리로 이동한다 ( /usr/local/apache2/conf/ )
그리고 workers.properties 파일을 생성한 뒤 아래 내용 작성

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/jdk1.6.0_03
ps=/
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

그리고 httpd.conf 파일을 수정

맨아래 그대로 붙여넣으면 됨...ㅋㅋ

#
# Mod_jk settings
#
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /examples/*.jsp worker1
Alias /examples "/usr/local/tomcat/webapps/examples/"
<Directory "/usr/local/tomcat/webapps/examples/">
Options FollowSymLinks
AllowOverride None
Allow from all
</Directory>
<Directory "/usr/local/tomcat/webapps/examples/WEB-INF/">
AllowOverride None
deny from all
</Directory>

맨위에 LoadModule에서 jk_module을 쓰겠다는 것 같고,
WorkerFile은 방금 작성한 걸로 쓰겠다는 것같고,
그다음은 다 로그에 관한거...
JkMount는 /examples/에서 jsp요청이 들어오는 것은 다 tomcat에서 처리하겠다는거고
마지막으로 중요한.....Alias 는
원래 http://서버주소/ 이렇게 하면 Document Root인 아파치경로/htdocs 여기를 가리키는 건데
하지만 http://서버주소/examples 로 요청이 들어오면 Document Root를 저걸로 바꾸겠다는거임
그리고 WEB-INF폴더는 보안상 열리면 안되니 막아줄려면 위처럼 해주면 되고
그러면 http://서버주소/examples/ 하면 jsp, servlet샘플이 열릴거임

이렇게 아파치와 톰캣을 연동시키면 톰캣은 jsp만 처리하고 그 나머진(html, image 등등) 다 아파치에서 처리를 하게 되는 것이다라는 말..ㅋㅋㅋ

ps.
위내용은 머드초보님의 블로그에서 100% 내용을 발췌하여
제가 작업한 대로 수정작성한것임을 밝히는 바입니다

출처 : 머드초보의 블로그