1. 필터란? 


클라이언트와 서버 사이에 필터가 존재해서 들어오는 request와 response를 필터가 먼저 받아 사전작업/사후 작업 등 

공통적으로 수행되는 부분의 작업을 수행.


참고 및 출처: https://programmingsummaries.tistory.com/82


-필터의 흐름도


: 필터는 여러가지 기능에 쓰일 수 있다.(타이머 필터,인코딩 필터, 로그인 필터 등...) 

각 필터에서 작업을 수행하고 chain의 doFilter 메소드를 통해 다음 필터에서 넘겨준다. 

필터를 거쳐서 request를 통해 서버에 전해지고 다시 response를 통해 클라이언트에게 넘겨준다.


2. 한글 인코딩 해주는 필터 예시 


여러 종류의 필터 중에 한글 인코딩해주는 필터를 예시로 보겠다.


1) CharsetEncodingFilter.java 파일


2) web.xml에 필터 등록

: web.xml에 filter를 등록해준다. 변경 내용 적용시킬려면 톰캣 서버 리스타트.


3) 적용 모습 확인


- 각 서블릿 파일

req.setCharacterEncoding("UTF-8");

: 서블릿 파일에 이 코드가 있다면 지워주고(utf-8로 인코딩하는 코드), 

그리고 확인을 위해 필터도 주석처리 후 작동시키면 한글이 깨져나오게 된다.

왜냐하면 한글로 인코딩해주는 필터인데 현재는 사용 안해줬기 때문에 한글이 깨진다.


-한글이 깨지는 모습(study/bbs/list.do)


여기서 필터의 주석만 풀어주고 실행시켜 보면


-실행화면


한글이 깨지지 않고 잘 들어가는 것을 볼 수 있다.




-코드 압축파일




**Servlet 이용하여 파일업로드 구현 

-파일업로드,페이징과 검색기능까지 구현


1. 기본 Setting


-테이블 생성


-web.xml


저번에 했던 게시판만들기에서 추가된 내용만 포스팅 하도록 하겠다.

또한 저번 파일업로드에 했던 lib/cos.jar파일이 있어야한다.


저번 포스팅 : https://welcomto-dd.tistory.com/24



2. FileManger.java 생성


com.util에 파일 업로드를 위한 FileManager.java 파일을 생성한다.


1) 파일 다운로드


-파일 다운로드 흐름도

: 서버에서 파일에 내용을 생성하여 bis에 담아두고 client에서 bis에 있는 내용을 받아온다.


-bis에 담는 부분


-bis에서 가져오는 부분


2) 파일 삭제

: f.delete()로 서버 폴더에 있는 실제 파일을 물리적으로 삭제하는 코드.


※FileManager.java 전체 코드



3. FileTestServlet.java에서 경로 설정


-FileTestServlet.java

: 파일 클릭할때 다운로드해줄 download.do로 이동(삭제도 마찬가지)


: setAttribute로 list.jsp파일에 변수 넘겨준다.


-list.jsp

: 링크를 누를경우 이동하도록 써준다!


※서블릿에서 download.do, delete.do 코드


-실행화면




- 압축코드파일



'JSP, Servlet' 카테고리의 다른 글

[JSP] 메일 전송  (1) 2019.03.06
[JSP] 필터(Filter)  (2) 2019.03.05
[JSP] war파일로 서버 스타트하기  (0) 2019.03.04
[JSP] 쿠키(Cookie), 팝업, 파일업로드(JSP)  (2) 2019.02.28
[JSP Servlet] Servlet에서 Session사용하기  (2) 2019.02.27

**war파일로 서버 스타트하기 


1. war File 생성 및 경로


이클립스에서 최상위폴더(study)>export>war File을 선택하면 war File이 생성된다.

생성된 파일을 D:\java\apache-tomcat-7.0.92\webapps(자바 톰캣서버 디폴트 경로)에 저장해준다.




2. 서버 스타트


: D:\java\apache-tomcat-7.0.92\bin\startup.bat 

이 경로로 들어가서 startup.bat를 실행하면 서버가 start 된다.


그리고 http://192.168.16.12:8080/study/file/list.do에 들어가서 확인해보면 페이지가 뜨는 것을 확인 할 수 있다.


※페이지는 열리는데 DB데이터를 불러오지 못하는 에러

이 경우에는 DBConn으로 하면 잘되는데 DBCPConn으로 할 때 db를 못불러오는 경우가 생긴다.

그 이유는 톰캣서버의 context.xml에 이클립스에 전에 추가한게 동기화가 안되서 그렇다.

(이클립스의 context.xml에는 추가가 됬지만 톰캣서버파일의 context.xml에는 추가가 안된 경우)



3. context.xml에 추가


:D:\java\apache-tomcat-7.0.92\conf\context.xml 

이 경로에 있는 context.xml파일에 위의 Resoure~코드 추가해준다.


추가해주고 다시 startup.bat 실행해주면 잘 작동한다.


※ 실행 후 전에 있던 파일을 다룰 때 오류가 나는 경우

실행 후 이미 들어가 있는 데이터를 눌러서 동작시키면 에러가 나는 경우가 있는데,

그 경우는 전에 넣어놓은 데이터의 경우에 그렇고 새로 다시 데이터를 넣고 삭제하면 정상적으로 잘 작동한다.


-파일저장 폴더 생기는 경로

*이클립스로 서버 시작시
D:\java\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\study\pds\saveFile

*start.bat파일로 서버 시작시
D:\java\apache-tomcat-7.0.92\webapps\study\pds\saveFile


1. 쿠키(Cookie) 


1) 쿠키(Cookie)란?


인터넷 사용자가 웹사이트를 방문할 경우 웹사이트의 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 말한다. 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다. 많은 서버 및 웹사이트들이 브라우저의 신속성을 위해 즐겨 쓰고 있다.


2) 쿠키 사용 예제


① 쿠키 사용법


**쿠키 만들기

Cookie c= new Cookie("productName1",URLEncoder.encode("냉장고","UTF-8"));//encoder로 한글 인코딩

c.setMaxAge(10);//쿠기 시간 설정


//쿠키보내기

response.addCookie(c);


**쿠키 받아서 뿌려주기

Cookie[] ck=request.getCookies();//쿠키를 배열로 받아온다.


<%

if(ck!=null){

//쿠키를 받아온 배열을 돌려준다.

for(int i=ck.length-1;i>=0;i--){

if(ck[i].getName().indexOf("productName")!=-1){

%>

<%=URLDecoder.decode(ck[i].getValue(),"UTF-8")%><br>

<img src="./image/<%=URLDecoder.decode(ck[i].getValue(),"UTF-8")%>.jpg" width="100" height="100"/><br>

<% 

}

}

}

%>


② 예제(최근 내가 본 목록 만들기)


-흐름도

-shop.jsp

: shop.jsp는 실행할 때마다 쿠키를 받아와준다.

받아온 다음, 현재 살아있는 쿠키들을 배열에서 꺼내 보여준다.


-p1.jsp

: p1,p2,p3 총 3개의 jsp 파일이 있는데, 각각의 쿠키이름은 productName1, productName2, productName3로 지정해준다.

setMaxAge()는 쿠키가 살아있는 시간을 지정해주는 메소드고, response.addCookie()로 쿠키를 보내준다.

밑에 '돌아가기' 링크를 누르면 shop.jsp로 쿠키가 전달된다.


-실행화면

:링크를 누르면 쿠키가 10초동안 살아있게되고 shop.jsp에서 그 목록들을 볼 수 있게된다.

그리고 10초가 지나면 자동으로 삭제된다.




2. 팝업(Popup) 


1) '오늘 하루동안 보지않기' 예제 


-main.jsp


-popup.jsp

: setMaxAge(60)(현재는 60초)으로 쿠키가 살아 있는 시간을 지정해준다.


-실행화면





3. 파일 업로드(cos.jar 이용)


-파일업로드를 위해 http://www.servlets.com/cos/ 들어가서 파일을 다운로드해준다.

여기서 다운 받은 cos~.zip파일을 이클립스 lib폴더에 넣어줘야한다.

zip파일 안에 cos.jar를 lib에 추가시켜준다.


이렇게 셋팅해주면 파일업로드를 간편하게 사용 가능해지게 된다.

이제 코드로 가면,


-test1.jsp (파일 업로드해주는 부분)

: enctype을 "multipart/form-data"로 보내줘야한다.


-test3.jsp (파일을 받아서 서버에 전송하는 부분)

: Path를 root/pds/saveData 라는 폴더로 만들어주었다.(여기에 파일들을 저장)

(여기서 Path의 File.seperator는 "\\"(역슬래시 2개)로 대체 가능하다.)

root는 defalut위치인데 D:\java\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\study 이 경로이다.

만약 사용자들이 같은 파일명의 파일을 올린다면, 파일명이 중복되서 저장 될 수는 없기때문에,

서버 폴더에는 파일명 뒤에 숫자가 붙어 저장되게 된다.

따라서 서버에 저장된 파일명과 업로드한 파일명의 관계를 매핑해서 가져오게된다.

SaveFileName서버에 저장된 파일명.

OriginalFileName은 업로드 할때 사용자가 입력한 파일명.


위에서 보듯 파일 전송부분은 아까 lib폴더에 넣어준 cos.jar로 인해 간단하다. 한 줄이면 끝난다.

//파일전송

MultipartRequest mr=new MultipartRequest(request,path,maxFileSize,encType, new DefaultFileRenamePolicy());



-서버폴더




-위 코드들 압축파일



**Servlet에서 Session 사용법 


**세션 기본 사용법

Servlet에서 HttpSession객체를 얻기 위하여 request.getSession()함수를 이용한다.

(JSP에서는(<%%>) 객체를 선언해주지 않아도 사용가능하지만 Servlet(JAVA파일)에서는 선언해줘야 사용가능하다.)

HttpSession session = request.getSession();    //세션 객체 만들기


세션 영역에 속성 값을 설정할 때 setAttribute()함수를 이용한다.

session.setAttribute("속성명",속성값);    //세션 생성


세션 영역에 저장된 속성값을 이용할 때 getAttribute() 함수를 이용한다.

세션은 리턴값이 Object형이므로 다운캐스팅 시켜준다. 

String ses=(String) session.getAttribut("속성명");    //세션 받아오기




**세션을 class로 만들고 객체로 받아오기


1) CustomInfo.java 클래스 파일 생성

: 세션을 담을 클래스


2) MemberServlet.java(서블릿 파일)에서 세션 사용


①세션에 담기

CustomInfo info=new CustomInfo(); //객체 생성


info.setUserId(dto.getUserId());

info.setUserName(dto.getUserName());


HttpSession session=req.getSession();    //세션 객체 생성

session.setAttribute("customInfo", info);  //세션에 값 담기


②세션에서 값 받아오기

HttpSession session=req.getSession();


CustomInfo info=(CustomInfo)session.getAttribute("customInfo");    //세션에서 값 받아옴

MemberDTO dto=dao.getReadData(info.getUserId());

req.setAttribute("dto", dto);




**세션 풀기

HttpSession session=req.getSession();

session.removeAttribute("customInfo");

session.invalidate();//변수도 지움


출처 : https://oyeahhh.tistory.com/91

1. 회원가입을 서블릿으로 만들기(member폴더) 


1) 기본 Setting

-member 테이블 생성


-web.xml


-MemberServlet.java의 기본구조


-경로

실제 경로 : study/member/login.jsp

서블릿 경로 : study/join/login.do




2)로그인(아이디 패스워드 일치하는지 확인)


-웹 화면


-멤버서블릿파일에서 login_ok.do부분


-login.jsp



첫번째 tr이 메세지 '아이디 또는 패스워드를 정확히 입력하세요' 부분이 보여지는 것이고

세번째 tr은 비밀번호 찾기,

두번째 네번째 tr은 선을 그려준다.




3) 회원정보 수정하기


① 세션으로 먼저 아이디값 담아놓기

-MemberServlet.java

: 로그인이 성공할때 그 아이디를 현재 세션에 올려놓는다.



② index.jsp에서 '정보수정'을 누르면  study/join/updated.do로 이동



③ MemberServlet.java파일에서 세션값을 받아와서 그 아이디에 맞는 정보를 dto에 담아서 updated.jsp로 넘겨줌


-실행화면(updated.do)



④ 그럼 다시 updated.do화면에서 수정하기 버튼을 누르면 updated_ok.do로 가게 되고



⑤ 그럼 수정기능이 잘 작동한다.




-압축코드파일




1. JSP 파일과 HTML 파일 구분해서 쓰기 


JSP와 HTML을 한 파일에 같이 쓰게되면 의존성이 커지게 된다.

-->그래서 따로 class파일(java)을 만들어서 jsp는 그 곳에 다 코딩 해준다.

보통 서블릿을 상속받아 java파일로 저장해 놓는다.

이 과정에서 servlet-api.jar를 못 불러와 에러가 생기는 경우가 있으므로 추가해준다.


*servlet-api 추가 방법

여기 경로에 있는 파일을 웹 프로젝트 폴더(study)>Build Path>Configure Build Path 클릭

Add External JARs>sevlet-api.jar 해서 추가해준다.



-서블릿(Servlet) : JSP를 java영역에 코딩해놓은 파일


: web.xml 파일에서 설정해줄 수 있다.

/hello는 파일경로이고 com.svt.Test1은 실행시킬 자바파일(JSP가 쓰여있는)이다.

보통 서블릿은 HTTPServlet을 상속받아 사용한다!

**web.xml은 처음 시작할때 한번만 읽어오기 때문에 수정했을때는 톰캣서버를 껏다가 다시 켜줘야 적용된다.



web.xml에서 변수전달이 가능하다.

web.xml에서 변수전달해주는 방식 2가지.


1. ServletConfig 인터페이스 : 해당 Servlet에서만 사용가능

2. ServletContext 인터페이스 :  동일 웹프로그램안에 모든서블릿 또는 JSP에서 사용 가능


1) ServletConfig 인터페이스


-web.xml


2) ServletContext 인터페이스


-web.xml


-Test2.java 



2. 변수전달 방식 


변수를 전달해주는 방식 4가지!

1. getParameter(getParameterValues()-배열일 경우 사용)

2. hidden 속성으로 숨겨서 넘겨주기

3. session


4번째 방법은 request.setAttribute


흐름(TimeLine)에 따라

getAttribute > EL(Expression Language) > JSTL(JSP Standard Tag Library) 로 변하게 된다.


1) setAttribute, getAttribute


-com.svt 패키지의 Test3.java



-test3_ok.jsp

: EL을 사용하여 간편하게 받아주었다.


2) EL(Express Language)


-getAttribute보다 더 간편하게 데이터를 받아올 수 있다.

-getAttribute 방식보다 null이나 데이터형에 관해 관대하다.



3) JSTL(JSP Standard Tag Library)


-사용자가 자주쓰는 태그들을 라이브러리화 해놓은 것

-EL을 사용할때 HTML문에 자연스럽게 같이 사용할 수 있게 해준다.


-다운로드 링크

http://tomcat.apache.org/taglibs/standard/

:여기서 가운데 1.1 ver 다운


-이클립스 셋팅


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

//이 태그 추가해줘야 JSTL lib 사용가능!


-test5.jsp


3. DBCP(Database Connection Pool) 

: DB를 연결할때 네트워크상으로 시간이 오래걸리기 때문에

톰캣이 DBConn을 가지고 있게해서 시간을 단축시킨다.


**연결방법


-context.xml에 추가

-web.xml에 추가


-DBCPConn.java

-board/list.jsp

:board/list.jsp파일을 예제로 바꿔보면


-board/list.jsp에 conn부분 수정

Connection conn=DBCPConn.getConnection();

DBCPConn.close();


-실행화면(board/list.jsp)



-위의 예제 코드




1. 데이터 넘겨 주고 받기 


**JSP 데이터 넘겨주고받기 방법에는 3가지가 있다.

1) getParameter

2) session

3) hidden 속성으로 getParameter


**데이터 넘겨줄 때!

: ex1에서 ex2로 getParameter로 넘겨준 값을 ex3에 까지 넘겨 줄수 없다.

(getParameter는 1대1관계기 때문)


ex3에 까지 2번 걸쳐 데이터를 넘겨주려면 방법이 2가지가 있다.


① session 사용

--넘겨주는 곳에서

--받는 곳에서


② input태그를 만들어 놓고 hidden속성 줘서 안보이게 한 다음 넘겨주기



**배열일때 getParameterValues()메소드로 받기


-test5.jsp 파일


-test5_ok.jsp 파일





2. jsp 부분 따로 java파일로 만들어서 불러오기 


-파일 경로


-CalcVO.java


-calc_ok.jsp 


**자바빈즈(JavaBeans)


-위에 코드를 간단하게 쓰기!(중요***)

:vo의 변수이름과 jsp의 이름만 맞춰주면 저렇게 써주면 알아서 다 정보 세팅한다.

엄청 편해서 개발자들이 많이 사용!!!


**값이 배열일 경우엔?


-FriendVO.java

: type(이상형)이 중복 체크 가능해서 배열로 받아줘야한다.


-frend_ok.jsp




3. 이클립스(jsp)-오라클db 연결 


-ojdbc6.jar 파일 위치(오라클 설치폴더안에)


-이클립스의 WEB-INF/lib 폴더에 넣어주면 된다.


-DBConn.java


-jsp4/dbtest.jsp 파일

:jsp로 메소드 호출해주면 연결 된다.


-퀀텀 db 설치

https://sourceforge.net/projects/quantum/files/quantum-plugin/3.3.10/

최신버전 3.3.10 설치.


그리고 이클립스에서 

window>open perspective>quantum DB 클릭해서 연결.



-그리고 퀀텀 db다운받은 파일의 features, plugins 폴더를 이클립스 폴더에 복사 붙여넣기 해준다.

그 뒤 이클립스를 껐다가 다시 실행.


-퀀텀 db에서 new bookmark 누르고 ojdbc6.jar 연결





+ Recent posts