본문 바로가기

Foundation/- JSP

EL, Servlet의 개념, 게시판

Servlet이란 ??

자바를 사용하여 웹 페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바코드 안에 HTML을 포함하고 있다는 차이점이 이다.

[출처 : 위키백과]

 

 

 

[그림 출처: Head First Servlets & JSP]

 

 

# 컨테이너(톰켓)은 멀티 스레드를 지원합니다. 컨테이너는 서블릿 하나에 대한 다수 요청을 처리하기 위해서 다수의 스레드를 실행합니다. 위의 그림 Client A 와 Client B의 각 요청에 따라 하나씩 스레드를 가지고, 이 스레드 마다 request와 response객체를 생성하여 응답을 클라이언트에게 돌려줍니다.

스레드란 하나의 프로세스를 말합니다. 즉, 웹컨테이너는 멀티 스레드를 지원하기 때문에 다수의 클라이언트 요청에도 무리없이 다같은 결과를 한번에 보여줄 수 있습니다.

 

 

 

 


실습] JSP(15~20)에서 만든 게시판은 JSP내에서 모든 개발이된 방식이다. 따라서 중복된 소스로 소스가 길어진 경우가 많다. 이러한 문제를 해결하기위해 완벽한 방법은 아니지만, EL과 Servlet을 이용하여 코드를 변경해보자.

- delete.jsp, insert.jsp, list.jsp, update.jsp, selectOne.jsp 5개의 JSP파일을 Servlet으로 바꾸고 deleteView.jsp, detailView.jsp, insertView.jsp, updateView.jsp를

자바코드를 이용하지않고 el을 이용하여 바꾼다.

 

※comment와 관련된 코딩부분은 다음 게시물에서 설명하니 무시.

 

전체흐름을 그림으로 표현하자면 다음과 같다.

exec는 문자열로 2=update, 3=delete, 4=comment로 했음.

작업 순서 !

1. db 테이블
2. VO 클래스 생성 : db 테이블 컬럼과 동일하게.
3. DAO클래스 : 각각의 SQL 명령 정의
4. Service 클래스 : DAO 클래스 메소드 실행에 필요한 작업을 수행.
5. Servlet or JSP : Service 클래스 메소드를 실행
0. View : 사용자 입력을 받거나 처리 결과를 출력하는 웹페이지


list.jsp(기존) --> ListServlet.java

 

# board 프로젝트의 list.do가 서블렛이름으로 설정된다. 즉 사용자가 list.do url 요청이 있으면 실행된다.

# RequestDispatcher dispatcher = request.getRequestDispatcher("/board2/listView.jsp"); : PageContext.forward("listView.jsp")의 역할을 한다.

# get방식으로 Attribute를 list, plist를 넘겨준다.


listView.jsp

※ 기존과 달리 getAttribute아닌 el방식이다. 지시자나, head부분은 동일하니 body부분만 캡쳐하겠습니다.

# 표준 태그 라이브러리를 위한 지시자만 추가 됐습니다.

# 기존에 있던 getAttribute없이, plist.totalCount를 화면에 출력하고 있다.

# <c:forEach var="vo" items="${list}"> 표준 태그 라이브러리를 통해 반복문을 구현하고 있다. ListServlet에서 넘겨준 list배열 객체를 vo객체에 하나씩 담아 출력한다.

# 이 전 게시물에서 배운 useBean을 이용해서 현재시간과 vo의 wdate를 바로 비교하고 있다.

 # 비교문과 el을 이용한 것을 제외하면 다를 것이 없다.

 

#결과.

 


insert.jsp(기존) --> InsertServlet.java

# 위의 listView.jsp에서 글쓰기를 클릭하면 insert.do로 get방식으로 요청을하게 되는데, RequestDispatcher dispatcher = request.getRequestDispatcher("/board/insertView.jsp") 응답을 /board/inserView.jsp로 넘겨준다.

 

insertView.jsp

# 위의 입력값을 getPost로 insert.do로 넘겨준다.

# 넘겨받은 값을 변수에 담고 vo객체를 생성해서 BoardService의 board객체의 메소드 insert에 넣어주면 sql이 실행된다.

 

 

#결과.

 

 


SelectServlet.java

 

# listView.jsp의 제목 부분의 링크를 클릭하면 넘어가는 부분이다. 파라미터 값으로 idx와 page를 가져온다.

# Cookie c = new Cookie("idx" + idx, String.valueOf(idx)); : 클릭된 idx값의 쿠키를 저장하다.

# Board vo = board.getSelectOne(idx);를 검색 후 그값을 setAttribute로 넘겨준다.

# exec가 현재 null이므로 detailView.jsp로 넘어간다.

 

 


detailView.jsp

style 부분은 생략한다.

# SelectSelect.java에서 setAttribute("rn","\n")을 했는데, 그 이유는 66번째 줄에 value부분에 \n가 그대로 들어갈 순 없기 때문이다. (예약어)

사용자 입력시에는 엔터가 개행(\n)으로 입력되지만 출력시엔 <br>로 출력해주어야 하기때문에 다음고괕이 replace를 이용해 대체해 준다.

# 글 수정, 글 삭제 부분은 idx와 exec 와 page 를 함께 파라미터로 넘겨준다.

 

 

# 결과.

 

 

 

 


updateView.jsp

# 파라미터에 idx와 page와 exec=update가 SelectServlet.java로 넘어가고, 해당 idx의 정보를 vo객체에 담아서 updateView.jsp페이지로 가져온다.

 

updateServlet.java

 

# updateView.jsp에서 넘겨받은 파라미터를 변수에 저장하고 Board클래스의 vo객체에 넣어준다. BoardService클래스의 객체 board를 생성하고 isPassword로 해당 idx와 사용자 입력 password가 일치하면 board.update를 해주고 하니면 글 비밀번호가 틀리다는 스크립트를 보여준다.

 

 

 


deleteView.jsp

 

deleteServlet.java

# update부분과 다를게 없으니 설명은 생략하겠습니다.

'Foundation > - JSP' 카테고리의 다른 글

oracle-mybatis 설정  (4) 2017.12.14
oracle 환경 설정 및 계정 관리  (0) 2017.12.14
EL, JSTL  (0) 2017.12.07
JSP&SQL 게시판 만들기(2)  (2) 2017.12.07
JSP&SQL 게시판 만들기(1)  (0) 2017.12.05