728x90

HttpSession 객체의 주요 메소드


- setAttribute(String name, Object )

- getAttribute(String name)

- removeAttribute(String name)

- invalidate() : session 객체를 소멸시킨다. 로그아웃할때 많이 쓰이는듯 하다.

- setMaxInactiveInterval(int초) : 클라이언트가 마지막 요청을 한 뒤 인수로 받은 시간만큼 지나도 요청이 들어오지 않으면, 세션을 소멸시킨다.


등등...


추후 내용을 점점 더 보강하는 방향으로 가야할듯 싶다.


내용에 참고가 된 출처

http://stellan.tistory.com/entry/HttpSession%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Session-%EA%B4%80%EB%A6%AC

http://cozyplace.kr/entry/JSP-%EC%84%B8%EC%85%98


이외 세션을 이해하는데 도움이 될 사이트

http://mohwaproject.tistory.com/entry/HTTP-Session-%EC%9D%B4%EB%9E%80

http://egloos.zum.com/mars0717/v/1078685

728x90

'개발 > JAVA' 카테고리의 다른 글

JAVA에서 자주 쓰게 되는 형변환  (0) 2016.04.14
728x90

정말 간단한거지만..

그래도 나는 모르고 있었기에, 이번에 알았기에 메모한다.


예외처리를 할때 try-catch문을 쓰게되는데,

이때 catch문에서 잡힌 에러 메시지를 확인하고자 할땐

e.getMessage()를 이용하거나 e.toString()을 이용하여 확인할 수 있다.

728x90
728x90

나의 경우 톰캣 7.0.16버전을 설치했을때

전자전부프레임워크(스프링)이 부분적으로 정상적으로 구동되지 않아 애를 먹었다.


"Invalid byte tag in constant pool"같은 에러만 계속뜨고...
해서 2~3시간 동안 계속 삽질을 하다 혹시 톰캣 최신버전으로 깔아보자 해서 기존꺼 지우고 새로 설치했더니 말끔하게 구동되었다.

기존버전은 7.0.16버전이고, 이번에 새로 설치한 버전은 7.0.69버전이다.


728x90
728x90




개요. 

어노테이션에 대한 이해와 세션에 대한 이해가 부족하여 발생한 버그이다.


상황.

B수정페이지로 들어갔다가 바로 A수정페이지로 들어갔더니 A수정페이지에 없는 첨부파일이 보여지고 있었다.


원인.

1. 컨트롤러 상단에 @SessionAttributes으로 첨부파일에 대한 세션을 담아놓은 상태

2. 수정페이지를 보여주는 메소드 내에서는 첨부파일데이터가 null일때 모델에 아무것도 담지 않음.

3. 뷰단에서는 첨부파일 모델값이 비어있으니 세션에 있는 값이 보이게되었다.


해결.

컨트롤러의 수정페이지를 보여주는 메소드내에서 첨부파일 데이터가 null일때 빈 첨부파일VO를 모델에 담아 넘겨주었다.

아래는 해결소스의 일부를 각색하였다.

@SessionAttributes({"FileVo"}) 


    ---- 중간 생략 ----


FileVo fileVo = fileService.selectFile(컨텐츠idx);

if( fileVo!= null ) {

    model.addAttribute("FileVO",fileVo);                //fileVO값이 있으면 있는대로 데이터를 넣고,

} else {

    model.addAttribute("FileVO",new FileVo());        //없으면 없는대로 빈 객체를 넣어주었다.

}




728x90
728x90

이클립스를 쓰다보면 하나의 소스를 분할해서 봐야 할때가 있다.

해서 분할하는 법에대해 메모한다.


방법은 여러가지가 있는데,

1. Window > Editor > Clone을 클릭하면 아예 에디터가 복사되어 따로 떨어져 나온다.

이 에디터를 마우스로 드래그 하여 분할하며 보면 된다.


2. 단축키를 이용하는 방법

2-1. 세로분할

Ctrl + Shift + { 


2-2. 가로분할

Ctrl + Shift + _


둘 중 편한것으로 선택하여 사용하면 된다.

728x90
728x90

php에서 java로 넘어가니 형변환을 해야 할 일이 많아졌다..

근데 하도 자주 쓰던 것들이 아니다보니 계속 까먹는다.

해서 메모한다.


String to int

String str = "123";

int num = Integer.parseInt(str);  

int to String

int num = 111;

String str = Interger.toString(num); 


이외 float, double, long등등도 있긴한데,

생각보다 자주 안써서 추후..


혹시 다른 자료형을 형변환 해야 한다면  http://theeye.pe.kr/archives/457 여기를 참고한다.

728x90

'개발 > JAVA' 카테고리의 다른 글

Session 관련 - HttpSession  (0) 2016.04.26
728x90

이전동안 주로 쓰던 데이터베이스가 오라클이어서 새로 이직한 회사에서 실수가 잦은것 같다..

이곳에서는 오라클, MYSQL, MSSQL등등 다 쓴다.



이번에는 MSSQL에 대해서 자동증가값과 관련한 실수였다.

보통 오라클의 경우

INSERT INTO 컬럼명 VALUE 시퀀스.NEXTVAL();

의 쿼리를 써서 IDX를 준다.

하지만 MSSQL에서는 컬럼 자체에 자동증가설정을 한뒤, 쿼리부분에서 그 컬럼 부분을 빼버린다.

만약 테이블의 컬럼이 IDX, MY_NAME두개인 테이블에 데이터를 INSERT한다고 한다면,

INSERT INTO 테이블명 (MY_NAME) VALUES ('YJ')

라고 하면 되는것이다.



728x90
728x90

이클립스에서 톰캣서버를 구동시키려고 했는데 자꾸 구동이 안된다..

에러메시지는 겁나 간단하게 '안됩니다.'이런식으로 뜨고...

콘솔창에 뜬 로그들 살펴보다가 'Invalid byte tag in constant pool'이런 부분이 있어

구글에 검색해서 해결했다.


하여 일단 하단 해결방법의 출처는 http://dalkongmin.tistory.com/16 여기다.


해결방법

WEB-INF의 web.xml에다가 metadata-complete="true"을 널어주는것.

* 근데 구글에다가 metadata-complete="true"를 검색하면 어노테이션을 쓸 수 없게 되버리기 때문에 쓰지말라는 블로그 글이 있는데

일단 한번 써보니 별 방해없이 돌아가는것 같다.



 
    



728x90
728x90

개요.

스프링에 대한 이해가 현저이 떨어질때, 혹은 자바에 대한 기본이해가 많지 않아 발생시킨 버그다(...)


상황.

리스트의 날짜 검색부분에서 검색버튼을 클릭하면 결과는 목록에 표시가 되는데, 내가 검색했던 날짜값이 없어진다.


원인.

뷰에서 컨트롤러안으로 리퀘스트를 받아오는 VO가 있었다. (이 VO를 A_VO라 하겠다.)

이 A_VO는 검색한 결과값을 가지고 다니다가 목록에 표시할 작업이 완료되면 그 값을 다시 A_VO에 담아 뷰페이지에 리스폰스를 하는 역활이다.

이 컨트롤러에 새로운 기능을 추가해야 해서 리턴값이 A_VO형태인 새로운 메소드를 만들었다.

그리고 나는 A_VO에 그 새로운 메소드의 결과값을 덮어씌워버렸다.(...)

이게 말로는 설명이 조금 애매하고... 예를 들어서 소스를 코딩하자면,

 
 @RequestMapping("/dir1/mappingTxt.do")
 public mappingTxt(HttpServletRequest request, @ModelAttribute("searchVO") A_VO a_VO,ModelMap model) throws Exception {
    //exMethod의 리턴형이 A_VO형이어서 그냥 파라메터로 들어온 a_VO에 넣어버렸다..
    a_VO = exService.exMethod();

    //그리고 그것을 다시 모델에 담아 뷰페이지로 보냈다.(...)
    model.addAttribute("searchVO", a_VO);

    return "dir/mappingTxt";
 }

이런식으로 작업을 해버린것이다.


해결.

이는 아래의 방법으로 버그를 처리했다.

 
 @RequestMapping("/dir1/mappingTxt.do")
 public mappingTxt(HttpServletRequest request, @ModelAttribute("searchVO") A_VO a_VO,ModelMap model) throws Exception {
    //새로이 A_VO형 객체 a_VO2에 exMethod메소드의 결과를 담았다.
    A_VO a_VO2 = exService.exMethod();

    //그리고 a_VO2의 get메소드로 결과데이터를 가져와서 파라메터 a_VO객체의 set메소드로 데이터를 넣어주었다.
    a_VO.setParameter(a_VO2.getParameter());

    model.addAttribute("searchVO", a_VO);
    return "dir/mappingTxt";
 }





728x90
728x90

4.권한변경, 소유권 변경 - chmod, chown


리눅스를 사용하면서 root권한으로 작업을 해야할 때가 있는데, 그 횟수가 너무 많으면 그냥 사용자를 root로 변경해서 사용하곤 한다.

중요한건 그 이후다.

사용자를 root로 바꾸었다는 점을 잊어버리고 root권한으로 폴더나 파일을 생성해버리는 것이다.

이후 다른 사용자로 그 폴더나 파일작업을 하려고 하면 퍼미션 에러가 난다.

이때! 권한과 소유자를 바꾸는 명령어가 필요하다. (는 방금 나의 상황이었다..ㅋㅋ)


4-1. 권한변경

권한변경 명령어에 대해 알아보기 전에 터미널에서 권한을 확인하는 법을 먼저 알아보자.

현재 위치에서 'ls'라는 명령어를 치면 현재 위치에 있는 디렉토리 및 파일의 이름목록만 도르륵 나열된다.

이때 'ls -l'이라는 명령어를 입력하면 현재 디렉토리안에 있는 폴더와 파일들의 권한, 소유자, 소유자그룹 등등을 볼 수 있다.


ls -l이라는 명령어를 입력하면

drwxr-xr-x 2 yj yj 4096  4월  5 23:12 dir1

화면에 이런식으로 내용이 나오는데, 여기서 맨앞의 'drwxr-xr-x'부분이 권한을 표시하는 부분이다.

다소 암호문같이 생겨서 '저게 뭔가...' 싶을테지만 권한값을 읽는 방법이 따로있다.

1,3,3,3자리씩 끊어 읽으면 되는데 순서대로 [디렉토리][소유자권한][그룹권한][전체권한]을 의미한다.

(ex.d rwx r-x r-x)


첫글자가 d일경우 '디렉토리'라는 의미이고(일반 파일은  -으로 표시된다.)

그 뒤로

r : 읽기권한 (4)

w : 쓰기권한(2)

x : 실행권한(1)

을 의미한다.


rwx는 읽기, 쓰기, 실행권한이 모두 있다는것을 나타내며 각 권한의 숫자를 더해서 7로 읽는다.

r-x는 읽기, 실행권한만 있다는것을 나타내며 읽기권한과 실행권한의 숫자를 더해 5로 읽는다.

이를 토대로 위의 예제인 dir1의 권한을 살펴보면  소유자권한(7), 그룹권한(5), 전체권한(5)이므로 권한을 755로읽는다.


그럼 이제 권한이 어떻게 부여되어있는지 확인을 하였으니 권한변경 방법을 알아보자.

먼저 권한변경 명령어를 알아보자.

chmod [권한값] [파일명]

위의 dir1의 권한이 755였는데 이 권한을 만약 777로 바꾸고 싶다면!?

간단히 'chmod 777 dir1'이라고 명령어를 입력하면 된다.

권한바꾸기 명령어 끝!ㅋㅋ


4-1. 소유자 변경

소유자 변경도 간단하다.

chown [옵션] [소유권자:그룹식별자] [파일명]

위의 명령어만 입력하면 끝이다.

위의 예제가 dir의 소유자가 yj인데 만약 aaa소유로 바꾸고 싶다면!?

'chown aaa:aaa dir1'을 입력하면 끝이다.


그런데 말입니다. 만약 dir1안에 말입니다.

하위 디렉토리가 있지 말입니다.

이런상황에서 그냥 'chown aaa:aaa dir1'라고 입력하면 dir1안의 하위 디렉토리의 소유자까지 모두 바뀌지 않는다.(dir1만 변경된다.)

이럴때 쓰는 옵션이 -R옵션이다.

'chown -R aaa:aaa dir1'이라고 입력하면 dir1안의 하위 디렉토리까지 모두 소유권이 변경된다.



728x90

+ Recent posts