노무현 대통령 배너

지난 10 번에서는 창고를 이용하는 방법을 알아보았고… GBServlet 에서 생성한 ds를 창고에 담았다가

list.jsp 에서 꺼내어 사용하여 db의 내용을 뿌려보았다.

11 번에서는 jsp 에서 기본적인 내용(스크립트 릿 등…) 을 간단하게 알아보았다.


이제 jsp 페이지를 통하여 db 에 데이터를 입력할 것이다.


일단. jsp 에다 레이아웃을 구현한다.

방명록 위에다가



를 추가한다.


전체를 form으로 감싸고 gbform 이라고 하였다.

입력 버튼을 눌렀을때 doInsert(); 펑션이 동작하도록 구현하여준다.

head 테그 안쪽에 구현하여준다.



form테그에서 action 을 따로 정해주지 않았다.

javascript 에서 따로 정해줄 수 있다document.gbform.action="~~~";

경로를 절대경로로 써주는데... 

<%=request.getContextPath()%>localhost:8080/wps 까지를 의미한다.

이렇게 해놓으면.... 나중에 contextpath를 wps 에서 변경을 해야할경우가 생길경우에도

그대로 사용할 수 있다.

상대경로를 사용하는것은 되도록이면 배제하자.... 나중에 수정이 될경우를 대비..

유지보수에 이점이 있다.

그리고 submit 을 해준다.

submit 버튼을 만들지 않고 javascript 에서 submit 하는 방법을 쓰면

유효성체크라든지 하는 일을 할 수 있다.

(submit 버튼을사용하면 누르는 순간 넘어가기때문에.....)

지금 여기서는 유효성체크 생략~



이제 GBServlet 에서 /newgb/insert 라는 요청이 들어왔을경우에 (입력할경우)

처리할 로직을 구현한다.



String uri = request.getRequestURI(); 를 하여 들어온 uri 가 어떤것인지 콘솔창에 찍어보자

사용자 삽입 이미지

----그림 12

사용자 삽입 이미지

----그림13

방명록을 호출했을때

사용자 삽입 이미지

----그림 14

사용자 삽입 이미지

----그림 15

입력버튼을 눌렸을때



context path 부터의 주소가 나옴을 알 수 있다.




indexOf 메소드는
특정 문자열의 자리를 찾는 메소드인데

자리를 못찾을 경우(없을경우) -1 을 반환하므로

이러한 특성을 이용하여 /insert 가 들어왔을경우(입력)

db에 데이터를 넣는 로직을 구현한다.


localhost:8080/wps/newgb 하면....


라고 했으므로...

newgb 라고 들어오면... gb.GBServlet 이 돌아간다.

gb.GBServlet 안쪽에 들어가보면...

doGet, doPost 메소드에서 공통적으로 execute 메소드를 호출한다.

(실제로는 servlet 에소 돌아가는 메소드는 service 메소드임... service 메소드는

전송방식에 따라 doGet, doPost 를 선택적으로 호출하는 역할을 함)

(web 에서는 기본적으로 get 방식이다.)


우리는 post 방식이나, get 방식으로 요청이 들어왔을때에만 처리를 해주려고 한다.

servlet 이 호출되면 무조건 service 메소드가 실행되고 방식에따라 doGet 이나 doPost 메소드를

호출하므로... service 메소드에 어떠한 내용을 기술하면 방식에 상관없이 무조건 실행될것이다.

그러므로 service 메소드 안쪽에는 따로 기술하지 않는다..... 권장하지 않는다.

여기서는 방식에 상관없이 똑같은 내용을 실행할 것이므로... doPost, doGet 메소드에서

execute 메소드를 호출하게 하고 그안에 내용을 기술 할 것이다.

execute 메소드에서는

OracleDataSource 를 만들고.... 이것을

SetAttribute 메소드를 이용해서... ds 라는 이름으로 request 에 저장을 하였다.



하나의 서블릿에서 동시에 여러가지 일을 처리하기 위해서 어떠한 처리를 할 것인데...

http://localhost:8080/wps/newgb 라고 하면 리스트가 뿌려지고

http://localhost:8080/wps/newgb/insert 라고 주소가 요청되었을땐 db에 입력이 되는 일을 하는 식으로

주소를 가지고 특정기능을 하게 할것이다.

원래 servlet은 하나의 일을 하게 하여 기능별로 servlet을 따로만들어 사용할 수도 있지만

하나의 servlet 에서 경로를 기준으로 여러가지일을 할수 있도록 할 것이다.

그럼 현재 servlet 에 들어왔을때의 주소를 알아야한다.

request.getRequestURI() 메소드를 이용하면 현재의 주소를 알 수 있다.

if 문과 indexOf 메소드를 이용 처리를 할 수 있다.

indexOf 메소드는 파라메터 값이 문자열에 없으면 -1 을 반환 하는 특성이 있으므로 이 성질을 이용한다.

if(uri.indexOf("/insert") != -1)

http://localhost:8080/wps/newgb 라고 치면... 주소에 /insert 가 없으므로... if 문은 실행되지 않고 그 아래 쪽

내용이 실행된다.


// forward

RequestDispatcher rd = request.getRequestDispatcher("/guestbook/list.jsp");

rd.forward(request, response);


포워드 방식으로 /guestbook/list.jsp 를 호출 하고 있다.


list.jsp 에서는 


db 에서 데이터를 뽑아오고 있는 내용이다.


list.jsp 에서는 입력 폼도 있다....


<!-- 글쓰기 폼 시작 -->

<form action="" method="post" name="gbform">

<div style="border-style: none;">

 <p style="width: 600px;">

  <ul style="border-style: groove">

   <li>이름 : <input type="text" name="writer" /></li>

   <li>비번 : <input type="password" name="pass" /></li>

   <li><textarea name="content" cols="30" rows="5"></textarea></li>

   <li><input type="button" value="입력"  onclick="doInsert();"/></li>

  </ul>

 </p>

</div>

</form>

<!-- 글쓰기 폼 끝 -->


입력 버튼을 누르면... doInsert() 펑션을 호출한다.


<script type="text/javascript">

    function doInsert(){

        document.gbform.action="<%=request.getContextPath()%>/newgb/insert";

        document.gbform.submit();

    }

</script>


post 방식으로... 그리고 action은 /newgb/insert 이다.

web.xml 에서 기술했듯이  /newgb/* 로 들어오면 GBServlet 이 다시 호출되고

GBServlet 에서 /insert 가 들어오면 입력에 대한 내용이 실행된다.

(<%=request.getContextPath()%>  는 혹시 contextPath (지금은 wps ) 가 바뀔 수도 있으므로 저렇게 해 놓으면

나중에 바뀌더라도 소스를 고칠 필요가 없다.)



커넥션 만들고 insert 쿼리 를 날리고

/newgb/list 로 리다이렉트 방식으로 페이지를 이동시킨다.

return 은  그아래 문장이 실행 되면 안되므로 사용해준다.

sendRedirect 를 사용한 다음에는 return 을 해준다. 이미 페이지는 옮겨 간것이기 때문이다.

다른 일을 하면 안된다.!!



여기까지의 풀소스
크리에이티브 커먼즈 라이센스
Creative Commons License

"웹 프로그래밍" 카테고리의 다른 글


이 글의 관련글
    이글의 태그와 관련된 글이 없습니다.
2009/06/16 02:20 2009/06/16 02:20

트랙백을 보내세요

트랙백 주소 :: http://pippen80.cafe24.com/trackback/174

댓글을 달아 주세요

[로그인][오픈아이디란?]
비밀글 (Serect)
댓글 달기 (Submit)