반응형

웹 프로그램 실행 시 자원을 서블릿 관련 객체에 저장하는 방법으로 주로 HttpServletRequest, HttpSession, ServletContext  객체에서 사용되며 저장된 자원(데이터)은 프로그램 실행 시 서블릿이나 JSP에서 공유하여 사용합니다.

 

서블릿 관련 객체에서 바인딩 관련 기능을 제공하는 메서드

 - setAttribute(String name, Object obj) 자원을 각 객체에 바인딩합니다.

 - getAttribute(String name) 각 객체에 바인딩 된 자원(데이터)을 name으로 가져옵니다.

 - removeAttribute(String name) 각 객체에 바인딩된 자원(데이터)을 name으로 제거합니다.

 

실행 결과를 보면 정상적으로는 '서울시 성북구'가 출력되어야 하는데 null이 출력됩니다. 왜 그럴까요?  

 

포워딩 과정 1단계인 웹 브라우저에서 요청할 때 서블릿에서 전달되는 첫 번째 request는 웹브라우저를 통해 재요청되는 3단계의 두번째 request와 다른 요청입니다.

  즉, redirect방식으로는 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없다는 것입니다.

 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

지금까지 배운 포워딩과 다른점은 클라이언트의 웹을 거치지 않고 바로 서버에서 포워딩이 진행된다는 것입니다.

따라서 웹 브라우저 주소창의 URL이 변경되지 않습니다.

 

첫번째 서블릿
두번째 서블릿

실행하고 아래의 주소를 입력하면 주소는 그대로이지만 두번째 서블릿(second)가 작동하는 걸 확인할 수 있습니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

javascript의 location 객체를 이용한 forward

first를 입력했지만 바로 second 서블릿으로 이동되면서 출력되네요^^

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

refresh를 이용한 포워딩 역시 redirect 처럼 웹브라우저를 거쳐서 요청을 수행합니다.

response.addHeader("Refresh", "시간(초);url=서블릿명으로 재요청합니다");

 

위에 주소를 localhost:8080/pro08/first 를 입력하게 되면

1초 후에 second서블릿으로 넘어가서 출력이 됩니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

redirect  방법은 서블릿의 요청이 클라이언트의 웹 브라우저를 다시 거쳐 요청되는 방식입니다.

웹에서 첫번째 서블릿에 요청하고 첫번째 서블릿은 sendRedirect()메서드를 이용해 두번째 서블릿을 웹 브라우저를 통해서 요청

웹 브라우저는 sendRedirect()메서드가 지정한 두 번째 서블릿을 다시 요청합니다.

 

 

first를 서블릿매핑 하였지만 아래에 sendRedirect("second") 메서드를 이용해 웹 브라우저에게 다른 서블릿인 second로 재요청 하는걸 알 수 있습니다.

 

그러면 첫번째 서블릿의 요청을 받아 실행하는 두번째 서블릿입니다.

그러면 두번째 서블릿 매핑을 통해 실행되며 화면이 나오게 됩니다.

 

주소창에

 

이렇게 입력하였지만 뜨는건

이 화면이 뜨게 된답니다.

 

또 하나의 방법은

get방식을 이용해 이름/값 쌍으로 데이터를 다른 서블릿으로 전달합니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

forward : 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법을 포워드(forward)라고 합니다.

기능 

1. 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 합니다

2. 요청에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있습니다.

3. 요청에 정보를 포함시켜 다른 서블릿에 전달할 수 있습니다.

4. 모델2 개발 시 서블릿에서 JSP로 데이터를 전달 하는 데 사용됩니다.

 

포워드의 4가지 방법

1. redirect 방법

-HttpServletResponse 객체의 sendRedirect()메서드를 이용합니다.

-sendRedirect("포워드 할 서블릿 또는 JSP")

2. Refresh 방법

- HttpServletResponse 객체의 addHeader()메서드 이용

- 형식: response.addHeader("Refresh", 경과시간(초); url = 요청할 서블릿 또는 JSP");

3. location 방법

- 자바스크립트 location 객체의 href속성을 이용합니다.

- location.href='요청할 서블릿 또는 JSP';

4. dispatch 방법

- 일반적으로 포워드 기능을 지칭하고 서블릿이 직접 요청하는 방법입니다.

- RequestDispatcher 클래스의 forward() 메서드를 이용합니다

- RequestDispatcher dis = request.getRequestDispatcher("포워드할 서블릿 또는 JSP"); dis.forward(request, response);

 

이후부터 각각의 포워딩을  사용해 보도록 하겠습니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

커넥션 풀을 이용해 새 회원을 등록해 보겠습니다.

sec02.ex02패키지를 생성하고 아래의 클래스들을 만들겠습니다.

그 후에 WebContent에 MemberForm.html 파일을 생성해 줍니다.

 

첫번째로 우리의 화면을 담당해줄 html파일을 작성해 보도록 하겠습니다.

회원가입 화면이 있다고 상상하시고 거기에 아이디, 비밀번호 , 이름, 이메일을 입력하면 정보들을 서블릿으로 보내겠죠?

  command 값을 먼저 받아와 addMember이면 같이 전송된 회원정보를 받아 옵니다. 회원 정보를 MemberVO 객체에 설정한 후 MemberDAO의 메서드로 전달해 SQL문을 이용하여 테이블에 추가하겠습니다.

MemberServlet를 코딩해보겠습니다.

다음으로 MemberDAO를 코딩하겠습니다.

 

VO는 전에 실습했던 것과 같습니다.

여기까지 됬다면 이제 실행을 해보겠습니다.

주소는 localhost:8080/proj07/MemberForm.html

여기서 아이디나 비밀번호 이름 이메일 중에 하나만 비어있어도 아래의 alert 창이 뜨게 됩니다.

모두 알맞게 입력을 하면

 

이러한 화면이 뜨게 됩니다.

새 회원 가입하기를 클릭하면 다시 회원가입화면으로 가게되고

삭제를 누르면 삭제가 됩니다.

슈퍼맨을 삭제해 보겠습니다.

 

수고하셨습니당!

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

커넥션 풀

  온라인 쇼핑몰의 경우 동시에 수십에서 수백명까지 접속해서 조회, 주문등 다양한 기능을 사용하는데 앞의 방법처럼 데이터 베이스와 연동해 작업해야 한다면 너무 비효율적입니다.

 

이 문제를 해결하기 위해 현재는 웹 어플리케이션이 실행됨과 동시에 연동할 데이터베이스와의 연결을 미리 설정해둡니다.

  이렇게 미리 데이터베이스와 연결시킨 상태를 유지하는 기술을 커넥션 풀 (ConnectionPool)이라고 부릅니다.

 

JNDI

  실제 웹 어플리케이션에서 ConnectionPool 객체를 구현할 때는 Java SE에서 제공하는 javax.sql.DataSource 클래스를 이용합니다.

그리고 웹 어플리케이션 실행 시 톰캣이 만들어 놓은 ConnectionPool 객체에 접근할 때는 JNDI를 이용합니다.

  JNDI란 필요한 자원을 키/값 쌍으로 저장한 후 필요할 때 키를 이용해 값을 얻는 방법입니다.

 

아래와 같이 Servers에 들어가서 context.xml을 찾고 우측과 같이 코딩을 합니다

username과 password 는 본인이 아이디와 비밀번호를 넣어주시면 됩니다.

 

이제 설정을 마쳤으니 클래스를 만들어 연동해 보겠습니다.

sec02.ex01 패키지를 만들고 앞에서 사용한 MemberDAO, MemberServlet, MemberVO 클래스를 복사하겠습니다.

MemberDAO클래스에서 서블릿 매핑 이름을 /member2 로 바꿔줍니다.

 

아래의 import는 코딩하시면서 해주셔야 합니다. 단축키(ctrl+ shift +o)

아래에 주석처리된 부분은 저희가 커넥션 풀을 이용하였기 때문에 주석처리를 해줍니다.

 

앞에서 한 것과 결과는 같지만 이번에는 커넥션 풀을 이용해서 데이터베이스와 연동했다는 점에서 차이가 있습니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,