[Spring Framework] mvc패턴이란
디자인 패턴이란? : 프로그램의 뼈대
- 설계 문제에 대한 해답을 문서화 하기 위해 고안된 방법
- 소프트웨어 개발 과정에서 자주 나타나는 과제를 해결하기 위한 방법
- 패턴은 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다.
패턴 사용시 주의 사항
- 디자인 패턴은 일반적으로 대규모 프로그램 개발에 적합 - 작은 사이트 만들 때 쓰면 비효율적,낭비
- 각 디자인 패턴이 유용한 상황에 대해 잘 알아야 한다.
- 패턴은 절대적이지 않다.(상황에 맞게 유연하게 변형이 가능 하다.)
*주의할 점*
- 틀에 갇힌 사고방식은 효율성이 낮은 프로그램을 생산한다.
- 패턴을 그대로 사용하는 느낌보다는 차용한다는 생각으로
- 배운대로 그대로 쓰면 안맞을 수 있음. 유연하게 고쳐쓰기
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>
<오늘의 에러>
복붙할 때 조심하기 ! 내가 잘못쓴거 주석처리하고 다시실행해도 안됐음 그럼 주석처리에 문제가 있는거!