본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 63일차 (2)(이어서 파일 업로드, 쇼핑몰 관리자 애플리케이션, MVC 패턴)

쇼핑몰관리자 애플리케이션 이어서

7. 상품을 수정해주는 productUpdate.jsp(뷰), productUpdateServlet.java(논리,DB)를 만든다.

상품수정 페이지

productUpdate.jsp

1) input type="hidden"으로 code와 pictureUrl 을 주었다.

(1) input type="hidden"은 사용자에게 보이지 않는 숨겨진 입력 필드를 정의한다.

(2) 숨겨진 입력필드는 렌더링이 끝난 웹 페이지에서는 전혀 보이지 않으며, 페이지 콘텐츠 내에서 이걸 볼 수

있게 만들 방법도 없다.

(3) 숨겨진 입력필드는 폼 제출 시에 사용자가 변경해서는 안되는 데이터를 함께 보낼 때 유용하게 사용된다.

가령, 수정할 게시글이 DB 테이블에 가지고 있는 PK 값이 이에 해당될 수 있다. 이 값이 입력 필드에 포함되어

있어야 사용자가 다른 수정사항을 폼에 입력하여 제출할 때, (사용자는 인지하지 못하지만) 같이 제출되는

이 PK값을 통해 DB에서 해당 레코드를 식별하여 정보를 알맞게 수정할 수 있는 것이다.

(4) 이러한 입력필드는 앞서 말한 것처럼 업데이트 되어야 하는 DB의 레코드를 저장하거나,

고유한 보안 토큰 등을 서버로 보낼 때 주로 사용된다고 한다.

https://velog.io/@gndan4/HTML-input-typehidden-%EC%96%B8%EC%A0%9C-%EC%93%B0%EC%9D%B4%EB%8A%94-%EA%B1%B8%EA%B9%8C

HTML <input type="hidden">, 언제 쓰이는 걸까?

숨겨진 입력 필드에 대해 알아보자

velog.io

ProductUpdateServlet.java

8. 상품을 삭제하는 productDelete.jsp(뷰)와 ProductDeleteServlet.java(논리,DB)를 만든다.

productDelete.jsp

ProductDeleteServlet.java

(따로 기능구현 확인은 하지 않겠습니다!)

[MVC 패턴]

1. Model-View-Controller

1) 모델(Model) : 비즈니스 영역의 상태 정보를 처리

2) 뷰(View) : 비즈니스 영역에 대한 프레젠테이션 뷰(사용자가 보게 될 결과 화면)을 담당

3) 컨트롤러(Controller) : 사용자의 입력 및 흐름 제어를 담당

2. 특징

1) 로직을 처리하는 모델과 결과 화면을 보여주는 뷰가 분리됨

2) 흐름 제어나 사용자의 처리 요청은 컨트롤러에 집중

3. 모델2 구조와 매핑

1) 컨트롤러 : 서블릿

2) 뷰 : JSP

(1) 컨트롤러에서 request 기본 객체나 session 기본 객체에 저장한 데이터를 사용하여 웹 브라우저에 알맞은

결과를 출력

3) 모델-로직 처리클래스 : 자바빈

※ MVC 패턴이 잘 이해가 안되서 유튜브 영상을 찾다가 좋은 설명이 있는 것 같아 가져왔습니다.

https://www.youtube.com/watch?v=ogaXW6KPc8I

 

Controller 는 중개자 역할

1. MVC 패턴으로 코드를 작성할 때의 규칙

1) Model은 Controller와 View에 의존하지 않아야 한다.

(Model 내부에 Controller와 View에 관련된 코드가 있으면 안된다.)

쇼핑몰 관리자로 따지면 ProductVO가 Model 이고 해당 클래스는 studydb의 product 테이블의 데이터를

가져와야 하기 때문에 정제된 데이터를 가져오기 위하여 잡다한 코드가 있으면 안된다는 의미인것 같습니다.

2) View는 Model에만 의존해야 하고, Controller에는 의존하면 안된다.

(View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안된다.)

쇼핑몰관리자에서도 productList.jsp를 보면 사용자에게 보여줄 화면과 사용자에게 보여줄 정보

(Model, product.code, product.name, product.price)를 가져오고 Controller(서블릿)과 관련된 부분은

없는 것으로 보아 그런 의미인것 같습니다.

3) View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.

배달의 민족 어플로 설명해주셨는데, 빨간색 네모칸은 사용자마다 달라져야 하는 정보이므로 Model로부터 데이터를 받아야하고, 나머지(배경이 흰색이거나, 주문하기, 배달정보, 변경)는 View에서 구현하고 있어야 한다는 것입니다.

4) Controller는 Model과 View에 의존해도 된다.

(Controller 내부에는 Model과 View의 코드가 있을 수 있다.)

5) View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.

이거는 쇼핑몰관리자 로 예시를 들었을 때 어디서 찾아야 하는지 모르겠네요..

[MVC 패턴 컨트롤러 기본 구현] ( 교안에 설명이 부족해서 잘 이해가 안가네요..)

1. ControllerServlet 을 구현한다.

HTTP 요청을 받고, 요청을 분석하고, 모델을 사용하여 요청한 기능을 수행하고, request나 session에 처리

결과를 저장하고 RequestDispatcher를 사용하여 알맞은 뷰로 포워딩 한다.

(서블릿의 기능들을 1개의 서블릿으로 처리한다는 의미인것 같습니다.

3단계를 보면 greeting, date, invalid Type으로 사용자의 요청에 따라 기능을 수행하는 것을 볼 수 있습니다.

2. 컨트롤러가 알맞은 로직을 수행하려면 클러이언트가 어떤 기능을 요청하는지 구분할 수 있어야 한다.

1) 요청 기능 구분 방식

(1) 특정 이름의 파라미터에 명령어 정보를 전달

http://localhost:8080/chap18/controller?cmd=BoardList& (cmd=BoardList가 파라미터)

(2) 요청 URI를 명령어로 사용

http://localhost:8080/chap18/BoardList?

(3) 명령어 패턴을 이용한 요청처리

ㄱ) 명령어 패턴 : 클라이언트의 각 요청을 처리하는 별도 클래스를 제공하는 구현 패턴

하나의 명령어를 하나의 클래스가 처리

ㄴ) 클래스 구성 : 명령어를 처리하는 클래스들은 동일한 인터페이스를 구현

(4) <명령어, 요청 처리 클래스> 매핑 정보를 코드가 아닌 별도 설정 파일에 저장

- 새로운 명령어 추가나 클래스 변경 시 편리

[설정 파일 사용 컨트롤러 구현하기]

1. CommandHandler.java 인터페이스를 만들어 각종 Handler가 구현할 수 있게 한다.

2. 서블릿 controller(ControllerUsingFile)를 만든다.

1) 기존에는 url 별로 서블릿이 하나씩 존재하였었지만, 서블릿의 공통적인 성격을 많아서 묶어버렸다.

2) ControllerUsingFile은 HttpServlet 클래스를 상속받았으므로 서블릿이다.

3) 모든 브라우저로부터 오는 모든 요청을 수신하고 모든 브라우저로부터의 요청은 하나의

url(ControllerUsingFile)을 사용하는 것이다.

4) 기능에 대한 요청은 cmd 로 구분하고 세부데이터는 파라미터를 사용한다. (Login, Logout, Join...)

url 체계 http://localhost:8080/ControllerUsingFile?cmd=Login&id=kdhong&pwd=1234

3. web.xml 에서 property 경로 정보를 설정합니다.

4. commandHandler.properties를 생성하여 hello 의 값을 정한다.

5. NullHandler.java(구현 클래스 : 없는 url 페이지)를 구현한다.

6. HelloHandler.java (/hello 에 대한 명령어 처리 클래스)를 구현한다.

7. hello.jsp를 만들어 뷰를 생성한 후 http://localhost:8080/mvc2/controllerUsingFile?cmd=hello 를 검색하여 실행결과를 확인한다.

[요청 URI 사용 시 ]

1. ControllerUsingURI.java 를 만든다.(서블릿 controller)

1) 기능별로 url이 다르고, 세부데이터는 파라미터를 사용한다. (url : Login.do, Logout.do, Join.do ...)

2) url 체계 http://localhost:8080/xxx.do?id=kdhong&pwd=1234

기존 ControllerUsingFile에서 빨간색 친 부분으로 수정하여 준다.

2. 새로운 propteries(commandHandlerURI)를 추가하고, web.xml 을 수정한다.

오류가 나는데.. 아마 jsp 관련 부분일거같은데 교안에 없네요..

학원가서 확인해보겠습니다.