개발공부 일지
학원수업_48day [JSP,Servlet(15day) - Front Controller 1 ] 본문
학원수업_48day [JSP,Servlet(15day) - Front Controller 1 ]
짜몽- 2022. 10. 11. 17:15매일 Github 수업 1시간씩 진행.
앞으로 세미프로젝트가 얼마 안남았기 때문에
깃헙이 익숙해져야 한다.

add to index : 모든 파일 및 하위 디렉토리를 준비상태(staged:형상관리대상)로 처리
add to index -> commit -> push

gitgnore → 형상관리에서 제외 시키겠다.

- Front Controller Design Pattern
: 모든 클라이언트의 요청을 하나의 진입점으로 통합하여 처리하는 설계 패턴
웹 어플리케이션 서비스의 공통 정책을 일관성 있고 효과적으로 처리할 수 있다
→ 인코딩 , 인증 , 예외처리 , 데이터 수집 등


* 하나의 Front Controller Servlet 이 여러 요청을 구분하기 위해 hidden 방식을 이용한다!!
여기서 hidden 이란?
<input type=“hidden”>
<input type=“hidden”>은 사용자에게는 보이지 않는 숨겨진 입력 필드를 말한다.
숨겨진 입력 필드는 렌더링이 끝난 웹 페이지에서는 전혀 보이지 않으며,
페이지 콘텐츠 내에서 그것을 볼 수 있게 만드는 방법도 없다.
따라서 숨겨진 입력 필드는 폼 제출 시 사용자가 변경해서는 안 되는 데이터를 함께 보낼 때 유용하게 사용된다.
이러한 입력 필드는 업데이트 되어야 하는 데이터베이스의 레코드를 저장하거나, 고유한 보안 토큰 등을 서버로 보낼 때
주로 사용한다.
ex ) 사용자가 접속한 IP, 로그인 상태에서의 계정 정보, 게시물의 답글 인 경우 게시물의 ID 등
다른 type 의 input 과 동일하게 이름은 name, 값은 value로 정한다.
<form action="/examples/media/action_target.php" method="get">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="hidden" id="gameToken" name="game_token" value="xm234jq">
<input type="submit">
</form>
하나의 FrontControllerServlet 으로 여러 폼에서 요청이 전달될 경우,
이를 구분하기 위한 방법 중 하나는 hidden tag 를 이용한 방법이 있다
<input type="hidden" name="command" value="fincustomerById">
or
<input type="hidden" name="command" value="registercustomer">
client
<input type="hidden" name="command" value="find">
FrontControllerServlet 에서는 command 정보를 이용해 요청을 구분한다
String command=request.getParameter("command");
if(command.equals("find"){
}else if(command.equals("update"){
}
위와 같은 구조로 여러 클라이언트의 요청을 하나의 진입점으로 모아보았다.
이 경우 FrontControllerSevlet의 doDispatch 메서드의 코드량이 요청이 늘어날수록
비대해질 수 밖에 구조로 refactoring(내부구조개선)이 필요하다
refactoring : 입 출력은 동일하나 시스템의 내부 구조를 개선하는 활동
가독성, 재사용성, 유지보수성 향상이 목적
refactoring 안 : 1. 요청에 대한 처리를 메서드 별로 분화
2. 메서드 별로 분화하는 1안을 FrontControllerServlet class 자체가
커지므로 요청 처리를 전담할 Controller class를 별도로 생성해서 관리
1안 - 메서드별로 분화 FrontControllerServletVer2
2안 - 클래스별로 분화 FrontControllerServletVer3
Front Controller Design Pattern Version 3
모든 클라이언트의 요청을 하나의 진입점으로 모은다 -> 공통 정책 수행 ( 인코딩, 인증, 예외처리 .. )
클라이언트 요청을 처리할 별도의 Controller 클래스로 분화하여 서비스 한다
토론점 : doDispatch 내부에서 개별 컨트롤러 객체 생성 후 실행 시
각 컨트롤러 객체의 내부 구현부를 확인해서 각각 다르게 실행해야 한다는 단점이 존재함
→ 인터페이스를 통한 표준화, 다형성 적용 환경을 마련하면 됨
Controller interface 의 handleRequest(reqeust,response) : String
간단하게 예제로 버전1, 버전2, 버전3 을 적고, 본격적인 버전4를 만들어 보자.
구현할 기능은 고객검색 과, 고객등록인데 버전에 따라 다른 서블릿을 만든다.
● 고객 검색

<form action="FrontControllerServletVer3" method = "get">
<input type="hidden" name="command" value="findCustomerById">
<input type="text" name="customerId" placeholder="고객아이디" required="required">
<button>검색</button>
</form>
<br><br>

● 고객 등록

<form action="FrontControllerServletVer3" method = "post">
<input type="hidden" name="command" value="registerCustomer">
<input type="text" name="customerId" placeholder="고객아이디" required="required"><br>
<input type="text" name="customerName" placeholder="고객이름" required="required"><br>
<input type="text" name="customerAddress" placeholder="고객주소" required="required"><br>
<button>검색</button>
</form>


* startsWith 란?
- boolean startsWith(String prefix)
- startsWith() 함수는 대상 문자열이 특정 문자 또는 문자열로 시작하는지 체크하는 함수이다.
- 해당 문자열로 시작되는지 여부를 확인하고 boolean에 맞춰 true/false 값을 리턴한다.
command.equals("registerCustomer"))
(path.startsWith("redirect:"))

차이점이뭔지?

redirect:register=result.jsp 무슨뜻?
'학원수업 > Web(HMTL,CSS,JSP,Servlet)' 카테고리의 다른 글
| 학원수업_50day [JSP,Servlet(17day) - Front Controller 3 / Command Pattern] (0) | 2022.10.13 |
|---|---|
| 학원수업_49day [JSP,Servlet(16day) - Front Controller 2] (0) | 2022.10.12 |
| 학원수업_47day [JSP,Servlet(14day) - githeb / 로그인, 로그아웃 ] (0) | 2022.10.07 |
| 학원수업_46day [JSP,Servlet(13day) - MVC Product] (0) | 2022.10.06 |
| 학원수업_45day [JSP,Servlet(12day) - EL , JSTL] (0) | 2022.10.05 |