Posted
Filed under JSP, JAVA

[원문]http://lng1982.tistory.com/143



웹 애플리케이션을 개발할 때 세션을 이용하여 사용자 로그인 정보를 저장하고, 사용자의 로그인 상태를 유지할 수 있게 개발하는 방법은 많은 개발자가 알고 있다.

하지만 로그인 상태를 유지하기 위해서 서블릿 컨테이너인 tomcat이 내부적으로 어떻게 동작하는지 모르는 분들이 계셔서 이곳에 정리를 해보려고 한다.

 

  1. 로컬에 톰켓 설치 후 구동

  2. HTTP request, response 헤더를 확인해야 하기 때문에 크롬의 개발자 도구를 이용한다.

  3. 크롬 개발자 도구의 Network 탭을 선택한 후 http://localhost:8080/login.jsp 접속

  4. HTTP 헤더 정보를 보면 Response Headers에 쿠키 정보를 client로 전달한 것을 볼 수 있다. JSESSIONID 값이 톰켓에서 발급하는 쿠키 정보이다.

  5. 이와 같이 톰켓은 사용자가 로그인을 하지 않아도 최초 접속 시 JSESSIONID 쿠키 값을 브라우저에 내려주는 것을 알 수 있다. 그럼 왜 쿠키 값을 내려주는 걸까? HTTP 프로토콜은 stateless의 특징을 가지고 있기 때문에 사용자와 서버는 단 한번의 요청과 응답으로 연결이 끊어진다. 그렇기 때문에 서버에서는 사용자의 로그인 인증 여부를 확인할 수 있도록 key 값 처럼 사용할 수 있는 JSESSIONID 값을 클라이언트로 내려줌으로써 이를 이용하여 로그인 처리를 할 수 있는 것이다.

  6. http://localhost:8080/login.jsp 재요청
    재요청을 보내게 되면 client 브라우저는 로컬에 저장되어 있는 JSESSIONID 쿠키 값을 request header에 담아 서버로 전송한다. 톰켓은 client로부터 JSESSIONID 쿠키 값을 전달 받으면 response로 JSESSIONID 쿠키 값을 내려주지 않는다.

  7. 로그인 페이지에서 로그인 진행
    사용자가 아이디와 패스워드를 로그인 창에서 입력 후 서버로 전송을 하게 되면 웹 애플리케이션에서 사용자 인증 후 세션 객체에 JSESSIONID 쿠키 값을 키로 사용하는 사용자 정보를 메모리 영역에 저장하게 된다.
    이와 같이 키 값으로 사용되는 세션 아이디 값이 메모리에 저장 됨으로써 사용자는 로그인 상태를 유지하면서 여러 페이지를 이동하여도 로그인 상태를 유지할 수 있는 것이다.

 

여기까지 쿠키를 이용해서 어떻게 세션을 유지하는지에 대해서 알아봤다.

이처럼 동작 원리를 알고 있으면 다음과 같은 문제가 발생할 때 빠른 트러블슈팅이 가능하다.

 

개발 장비에 포트만 달리하는 3개의 어플리케이션이 적재되어 있다. (톰켓 instance 3개)

222.111.111.111:8001

222.111.111.111:8002

222.111.111.111:8003

하나의 애플리케이션에서 로그인 후 또 다른 어플리케이션에 로그인 하면 처음에 로그인 했던 어플리케이션의 세션이 사라져서 자동으로 로그아웃 처리 된 것을 확인할 수 있는데 이는 JSESSIONID 라는 쿠키 이름의 충돌 때문이다.

 

충돌이 발생하는 이유는 각 애플리케이션의 아이피가 같기 때문이다.

참고로쿠키는 포트를 구분하지 않기 때문에 8001, 8002, 8003 포트로 서비스를 분리하여도 동일 서비스로 인식하여 로컬에 저장되어 있는 쿠키를 서버로 전송한다.

이를 해결하기 위해서는 server.xml의 context에 다음을 추가하여 각 서비스를 구분하면 위의 문제를 해결할 수 있다.

sessionCookieName="ADMIN_JSESSIONID"

 

추가적으로 톰켓은 JSESSIONID 쿠키를 풀 도메인으로 셋팅한다. 즉, 서브 도메인이 서로 다르면 JSESSIONID 값도 달라진다는 것이다.

a.test.com <-- JSESSIONID : 11114B1E761B88562A923438B1DA2F17

b.test.com <-- JSESSIONID : 22224B1E761B88562A923438B1DA2F17

c.test.com <-- JSESSIONID : 33334B1E761B88562A923438B1DA2F17

 

만약 여러 도메인의 세션을 공유하기 원한다면 server.xml에 다음을 추가해 주면 된다.

<Context sessionCookieDomain=”.test.com”>

2014/12/18 16:12 2014/12/18 16:12
Posted
Filed under JSP, JAVA
Using like statement in mybatis mysql

mysql에서
name like CONCAT('%',#{username},'%')
2014/11/17 17:08 2014/11/17 17:08
Posted
Filed under JSP, JAVA
eclipse 설정시 jvm 경로 설정

openFile
-vm
C:\Program Files\Java\jdk1.7.0_01\jre\bin\server\jvm.dll

eclipse.ini 파일에 설정 한다.
2014/11/12 15:53 2014/11/12 15:53
Posted
Filed under JSP, JAVA
jstl c:if 공백처리

==> 공백이면
<c:if test="${!empty view.fscastfrontimage}"></c:if>

==>공백이 아니면
<c:if test="${empty view.fscastfrontimage}"></c:if>
2013/11/21 15:47 2013/11/21 15:47
Posted
Filed under JSP, JAVA
[원문]http://blog.naver.com/genesis1343?Redirect=Log&logNo=90151827084

public Class testClass {

    String a;

    int b;

}

모델을 만들었으면 아래와 같이 사용합니다.

@RequestMapping("/test/abc")

@ResponseBody

public Object test(@ModelAttribute testClass test) {

   return "";

}

testClass에 멤버로 String a, int b가 있기 때문에,

파라미터로 a, b에 값을 담아서 보내면, test라는 클래스변수에 자동으로 값이 세팅되는 편리한 기능입니다.

게시판 같은 경우 Model단위로 파라미터를 넘기고 받는 경우가 많기 때문에, 유용할 것입니다.

2013/10/30 17:11 2013/10/30 17:11
Posted
Filed under JSP, JAVA
[원문] : http://blog.naver.com/PostView.nhn?blogId=zino1187&logNo=110026018352



Java 메일 서버(james) 설치 및 환경 구축 Apache Project

2008/01/01 23:16

복사 http://blog.naver.com/zino1187/110026018352

전용뷰어 보기

----------------------------------------------------

1단계 : 메일 서버 다운로드

----------------------------------------------------

자바의 메일서버는 아파치에서 제공하는 james(Java Apache Mail Enterprise Server) 서버를 이용할 수 있다

서버 다운로드 ==> http://james.apache.org


----------------------------------------------------

2단계 : 메일 서버 설치

----------------------------------------------------

설치방법은 간단하다,

다운로드 받은 파일의 압축을 풀면되는데, 주의 할점은 바탕화면에 압축을 풀면 가동되지 않는다.

필자의 경우 C:\james-2.3.1 에 위치 시켰다.


----------------------------------------------------

3단계 : 메일 서버 환경 설정

----------------------------------------------------

james 서버의 환경설정은 config.xml 파일로 제어한다.

파일의 경로는 /app/james/SAR-INF 에 있다.

config.xml 을 연후 다음과 같이 수정해준다.

1.사용자의 암호 지정 (설정이 끝나면 이 암호로 서버에 접속할 것이다.)

  <account login="root" password="내 암호"/>


2.메일서버 지정하기

  servername 태그안에 자신의 아이피 혹은 호스트명을 적는다.

  <servername>127.0.0.1</servername>


3.DNS서버 지정하기

  ipconfig로 자신의 DNS서버를 찾아서 다음과 같이 기재한다.

   <dnsserver>
      <servers>
          <server>DNS서버 주소</server>
      </servers>
      <autodiscover>true</autodiscover>
      <authoritative>false</authoritative>

      <maxcachesize>50000</maxcachesize>
   </dnsserver>

------------------------------------------------------------

4단계: james 서버 실행 및 접속하기

------------------------------------------------------------

/bin/ 디렉토리의 run.bat 파일을 실행시킨다.

이로써 모든 설정을 다 마쳤다.



------------------------------------------------------------

james 서버 접속 및 관리

------------------------------------------------------------

1단계 : 커맨드창에서 (cmd) 다음과 같이 명령어를 입력하여 텔넷으로 서버에 접속해 보자

C:/> telnet   localhost  4555

 

2단계 :  root계정으로 로그인 한다.

아이디 - root,

패스워드-  config.xml 에서 지정한 비밀번호

3단계 : help 라고 입력하여 명령어 정보를 확인한다.

2013/08/13 21:50 2013/08/13 21:50
Posted
Filed under JSP, JAVA

[원문] : http://pridesky.tistory.com/6


파일 업로드 기능을 사용하기 위해선 2가지의 jar 파일 필요


* commons io
* commons fileupload
1. MultipartResolver 설정

* 파일 업로드 빈등록 (commonsContext 같은 공용 Context.xml 설정파일이 적당)


<property> = maxUploadSize : 최대 업로드 가능한 바이트 크기
maxInMemorySize : 임시파일 생성전 메모리에 보관할수있는 최대바이트 크기
defaultEncoding : 요청을 파싱할 때 사용할 캐릭터 인코딩(기본값 : ISO-8859-1)
2. 웹 설정 부분

* 업로드 기능이 들어가는 폼은 enctype="multipart/form-data" 속성을 넣어줘야 함.



3. 업로드 파일 접근

* 어노테이션을 이용한 업로드 파일 접근
- MultipartFile 내장 객체가 업로드하려고하는 파일을 담고있음


* 이외 HttpServletRequest 를 이용한 방식과
Command 객체를 이용한 방식이 있다.
2013/03/04 17:55 2013/03/04 17:55
Posted
Filed under JSP, JAVA

eclipse에서 wsdl client를 구현하기 위해서는 간단하다.
웹서비스를 추가 하면서 wsdl주소를 넣어 준다 .

그러면 알아서 wsdl과 관련된 정보들을 자동으로 생성 해준다.

생성된 자바 객체 중 proxy로 끝난 객체를 생성 하여 사용하면된다.

wsdl클라이언트는 쉽게 개발 할 수 있다.

2013/02/07 14:47 2013/02/07 14:47
Posted
Filed under JSP, JAVA
[원문] : http://it-box.tistory.com/11

:: 증상 ::
org.apache.axis.utils.JavaUtils isAttachmentSupported
경고: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.

:: 설명 ::
activation.jar와 mail.jar 파일이 없어서 발생하는 경고이다.
경고가 나도 프로그램 실행은 되나 찜찜하다.

:: 해결책 ::
이 jar 파일은 J2Enterprise Edition 포함되어 있는 API이기 때문에 j2ee 버전을 설치하면 해결된다.
첨부된 j2ee.jar
jdk설치폴더\jre\lib\ext 안에 넣어주면 에러가 잡힌다.
2013/02/07 14:44 2013/02/07 14:44
Posted
Filed under JSP, JAVA
[원문] http://www.vogella.com/articles/JavaDateTimeAPI/article.html


DateFormat df = new SimpleDateFormat("dd/MM/yy");
String formattedDate = df.format(new Date()); 

DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); String formattedDate = df.format(theDate);



package conversion; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class ConversionExamplesDate { // Convert from String to date private void stringToDate() { try { Date date1; date1 = new SimpleDateFormat("MM/dd/yy").parse("05/18/05"); System.out.println(date1); Date date2 = new SimpleDateFormat("MM/dd/yyyy").parse("05/18/2007"); System.out.println(date2); } catch (ParseException e) { e.printStackTrace(); } } // Convert from millisecs to a String with a defined format private void calcDate(long millisecs) { SimpleDateFormat date_format = new SimpleDateFormat("MMM dd,yyyy HH:mm"); Date resultdate = new Date(millisecs); System.out.println(date_format.format(resultdate)); } private void writeActualDate(){ Calendar cal = new GregorianCalendar(); Date creationDate = cal.getTime(); SimpleDateFormat date_format = new SimpleDateFormat("MMM dd,yyyy HH:mm"); System.out.println(date_format.format(creationDate)); } public static void main(String[] args) { ConversionExamplesDate convert = new ConversionExamplesDate(); convert.stringToDate(); convert.calcDate(System.currentTimeMillis()); convert.writeActualDate(); }
2013/02/05 21:57 2013/02/05 21:57