* Process와 Thread단위 프로그램 띄우기

 process

*

- Process 단위로 프로그램을 띄우면 code, data, Thread가 동시에 띄워주므로 데이터 낭비를 초래한다.

- Thread 단위로 띄우면 한번 process를 띄우고 나면 Thread만 할당하여 데이터 효율성에서 좋다.

  (ex :  웹어플리케이션) , 단점 :  데이터를 하나를 공유하기 때문에 데이터의 일관성이 깨질 수 있다.

Posted by 조은성
,

 * 회원목록을 클릭했을 때 모든 조회목록 출력하기 (request scope의 requestDispatch 사용하기)[실습] 

- servlet class
package : servlet.member.req.attribute
name : MemberListServlet
url : /member_list

html
WebContent
폴더 : member
이름 : search_form.html

jsp
WebContent
폴더 : member
이름 : member_list.jsp

class
package : servlet.member.service
class name : MemberService
메소드 : SearchAllMember()

- MemberDTO

- 실행결과

 

 

 

Posted by 조은성
,

 

 

- servlet class
package : servlet.member.req.attribute
name : SearchMemberByServlet
url : /search_member

html
WebContent
폴더 : member
이름 : search_form.html

jsp
WebContent
폴더 : member
이름 : show_member_info.jsp

class :
package : servlet.member.service
class : MemberService

 

 

 

Posted by 조은성
,

 

 

 

 

 

 

 

 

* 만약 redirect 방식으로 보내는 작업을 해주면 요청을 받고 응답을 하고 나면 바로 Attribute가 사라지므로 null 이 들어간다.

 

 

 

Posted by 조은성
,

- servlet class
package : servlet.redirect
name : ErrorPronServlet
url : /error_pron

html
WebContent
폴더 : /redirect
이름 : req.html, error.html

 

- 결과

 

 

 

Posted by 조은성
,

* 클라이언트의 요청을 다른 컴포넌트로 이동시키기

- 요청 디스패치(Request Dispatch)방식
  - Request(요청)이 살아있는 상태에서 수행을 이동시킨다.
  - Request Scope를 이용해 데이터(Attribute)를 공유할 수 있다.
  - RequestDispatcher 객체를 이용해 처리
  - 구문
RequestDipatcher rdp = request.getRequestDispatcher("url");
rdp.forward(request, response);

* 값을 공유하되 request scope를 통해 값을 공유해야 할때 요청디스패치 방식을 쓴다.

- 리다이렉트(Redirect)방식
  - 응답시 클라이언트에게 요첨할 url을 알려 주어 다시 요청하도록 하는 방식
  - 요청과 응답이 한번 더 일어난다.
  - Request Scope를 이용한 데이터(Attribute) 공유를 할 수 없다.
  - HttpServletResponse 객체를 이용해 처리
  - 구문
   response.sendRedirect("url");

 

Posted by 조은성
,

* attribute값이 응답하고 나면 필요 없는 데이터라면 request scope를 사용하는 것이 맞다.
(request scope는 응답하고 나면 attribute를 자동으로 remove해준다, application scope로 해도 되지만 범위가 좁은 것을 쓰는 것이 좋다.)

request scope : 응답하고 나면 필요 없는 것 데이터

session scope : 응답하고 나면 개인적인 데이터에 저장해 두고 개인만 사용할 것이다. 

* 서블릿에서 서블릿이나 jsp로 값을 넘기는 방법

1. 리다이렉트 : 요청과 응답이 두 번 일어 난다. (A로 요청을 하면 A가 응답을 하고 B로 요청을 하면 B가 응답을 한다.)

 

2. 요청디스패치 : 클라이언트가 요청을 A로 하면 A내부적으로 응답을 B로 넘기고 B가 응답을 한다.(client는 A에게 요청을 했더니 답이 오는 꼴이다.)

 

 

수행 : 둘다 클라이언트가 A를 요청하면 B가 응답한다. 

* 기본적으로 요청디스패치 방식을 사용한다.

Posted by 조은성
,

 

- Listener class
package : servlet.member.listener
class : SaveRequestMemberListener
   -- Application scope에 list-ArrayList객체를 binding

 

- servlet class
package : servlet.member.attribute
name : SaveReqMemberServlet 
             - 요청파라미터를 읽어 MemberDTO객체로 만든 뒤 apllication scope의 list에 추가

     ShowAllReqMembersServlet
        - application scope의 list에 있는 MemberDTO의 값들을 모두 출력하여 응답

class
package : servlet.member.dto
name : MemberDTO(아이디, 이름, 나이, 성별을 갖고 있어야 함)

- HTML
WebContent
folder : attribute
html : request_member_form.html

 

- xml

* 회원등록(회원등록 페이지 누르면 여러명의 회원정보 등록)

 * 등록 및 보여주기

 * 회원모두보여주기 클릭 결과

 

Posted by 조은성
,

* Application scope개념 및 실습

 

 

servlet class
package : servlet.attribute
name : SetAttributeServlet - /set_attribute
           GetAttributeServlet - /get_attribute

 

- SetAttributeServlet

 - GetAttributeServlet

 - xml

 * 실행결과

 

 

Posted by 조은성
,

* Attribute(속성)


- Attribute란
   - Web Application 구성 컴포넌트들(Servlet, JSP, Listener)이 공유하는 객체
- Scope
   - Attribute들을 공유하기 위한 공유 장소의 영역.(저장 장소)
   - 공유 범위에 따라 3가지 영역이 있다. 
     1. request scope : HttpServletRequest 이용
         - 요청 ~ 응답까지 공유
     2. session scope : HttpSession 이용
         - 한명의 클라이언트(웹브라우저)가 로그인 ~ 로그아웃
     3. application scope : ServletContext이용
         - Application 시작 ~ 종료까지 공유

* 접근범위 :  1->2->3 번순으로 접근 범위가 넓다.

- 관련 메소드 
- Attribute는 key - value 쌍으로 관리된다.
   * serAttribute(String key, Object value) : 공유영역에 Attribute 저장
   * getAttribute(String key) : Object value : 저장된 Attibute 조회
   * getAttributeNames() : Enumeration : Attribute들에 연결된 name들 조회

* Attribute 개요

 

 

* client 10
   request 50 번이라 하면

request scope의 저장장소는 500개 생기고,
session scope의 저장장소는 10개 생기고,
application scope의 저장장소는 1개 생긴다.


request는 호출할때 마다 저장 장소가 생겼다가 사용이 끝나면 자동으로 사라진다.
session scope는 한 클라이언트당 1개의 저장장소를 따로 갖는다(각 클라이언트마다 각각의 저장장소를 통해 데이터를 관리, 다른 클라이언트에서 접근 불가).
application은 동시에 1개의 저장장소에 접근할 수 있다.

Posted by 조은성
,