이런 결과가 나와서 멀티 쓰레드의 문제가 있다.(Thread1Thread2가 동시에 일할 경우)

  해결책 :  하나의 쓰레드가 작업이 끝나기 전에는 다른쓰레드가 작업할 수

             없게 한다. (쓰레드가 번갈아 가면서 일을 처리한다.)

 

* 멀티쓰레드 상황에서의 데이터 동기화(synchronized) :  하나의 데이터를 한 쓰레드가 접근하면

  다른 쓰레드가 그 데이터에 접근 할 수 없게 하는 것

 

  - Local 변수       - Data 동기화 문제 신경쓸 필요 없음(X)
  - Instance 변수   - Data 동기화 문제 생김 (O)
  - static 변수       - Data 동기화 문제 생김 (O) - 멀티쓰레드상황에서 문제가 생길 수 있는 static변수는 해결 방법이 없기 때문에 만들면 안된다.(멀티쓰레드 상황에서는 쓰지 않는 것이 좋다.)

 

 * 데이터 동기화 예제

Posted by 조은성
,

  * 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 조은성
,