Spring Framework

[Spring Framework] mvc패턴이란

꾸주니12 2022. 5. 19. 01:27

디자인 패턴이란? : 프로그램의 뼈대 

- 설계 문제에 대한 해답을 문서화 하기 위해 고안된 방법
- 소프트웨어 개발 과정에서 자주 나타나는 과제를 해결하기 위한 방법
- 패턴은 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다.

 

패턴 사용시 주의 사항 

- 디자인 패턴은 일반적으로 대규모 프로그램 개발에 적합 - 작은 사이트 만들 때 쓰면 비효율적,낭비 
- 각 디자인 패턴이 유용한 상황에 대해 잘 알아야 한다.
- 패턴은 절대적이지 않다.(상황에 맞게 유연하게 변형이 가능 하다.)

 

*주의할 점*

- 틀에 갇힌 사고방식은 효율성이 낮은 프로그램을 생산한다. 

- 패턴을 그대로 사용하는 느낌보다는 차용한다는 생각으로 

- 배운대로 그대로 쓰면 안맞을 수 있음. 유연하게 고쳐쓰기 

 

 

mvc패턴 : Model View Controller의 약자 

View 보여주는 화면 : 유저가 요청하거나 요청한 결과를 보여주는 화면 역할 

controller : 요청을 받고 분배함 / 요청한 내용을 확인 하여 해당 업무를 model에게 전달하는 역할 / Controller 에서는 요청 객체와 url  처리 한다./ 하나의 Controller 에서는 단일 url 또는 다수의 url 을 처리 할 수 있다.

Model 모든 일 처리 : controller에서 받은 요청을 처리 후 반환하는 역할

 

 

패턴의 흐름을 이해하기 

User -> View -> Controller -> Model
<- <- <-

 

 

 

 

 

jsp 와 mvc의 차이점 

: 로그인만 생각하더라도 jsp파일에선 index에서 loginResult페이지로 이동 logout페이지 이동 등 페이지 간 이동이 계속 일어남

그리고 그 jsp 파일안에는 jsp와 자바 코드가 같이 쓰여 복잡 

 

그런데 mvc패턴은 자바코드와 jsp파일이 완전히 분리 된 상태 (모델2는 자바코드(서버)와  뷰(클라이언트)가 분리라고 나와있음)

 

 

 

@RequestMapping(value = "/", method = RequestMethod.GET)

: GET 방식으로 "/" 요청이 오면 아래 메서드를 실행 해라

(여기서 /는 실행했을 때 처음 뜨는 주소 http://localhost:8080/main/ 의 맨 마지막'/'을 말한다.)

 

 

 

model : view로 무언가를 보낼 때 쓰는 객체 

model.addAttribute("msg", msg); // (이름, 값)

 

 

 

노랑 : 요청명이랑 메서드명이랑 같게 

파랑 : method 옵션을 사용하지 않으면 모든 형태(GET,POST,PUT,DELETE)의 요청을 받을 수 있다. - 보안상 좋지 않음 

빨강 : String 인 이유 return이 문자열이라

연두 : model 메서드 쓸거니까 model객체타입 변수 필요 

 

 

 

주소창에 서비스 네임(context) 부분 수정하기 (/main)

1. server.xml 에서 서비스 네임 안보이게 할 수 있지만 xml 파일을 만지는건 부담스러움

2. 서버 - 더블클릭 - 모듈 - 클릭 edit - / 만 남기고 오케이 - 하고 ctrl s

>프로젝트할 서비스네임 안보이게 하기 

 

한글깨짐 문제 해결 

프로젝트 처음 만들 때 자동으로 생기는 home.jsp 는 캐릭터셋이 안되어있음 그래서 한글 깨짐 

Views - web.xml(서버가 켜지면 가장 먼저 읽게 되는 파일)에서 수정한다 

중간에 코드 복붙해서 넣을 땐 앞뒤로 3~4줄 간격 띄고 넣기 

 

 

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<!-- 인코딩 종류 -->

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<!-- 강제 인코딩 여부 -->

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>



<!-- 어떤 요청이 왔을때 어떤 필터를 사용할 것인가? -->

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

 

<오늘의 에러>

복붙할 조심하기 ! 내가 잘못쓴거 주석처리하고 다시실행해도 안됐음 그럼 주석처리에 문제가 있는거!