일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- jenkins
- elasticsearch
- Gradle
- springboot
- devops
- IntelliJ
- Oracle
- MySQL
- db
- java
- laravel
- Spring Boot
- AWS
- Git
- php
- 맛집
- ReactJS
- Web Server
- JVM
- redis
- 요리
- jsp
- linux
- tool
- it
- javascript
- ubuntu
- Spring Batch
- Design Patterns
- Spring
- Today
- Total
아무거나
[spring] 스프링 MVC 기초 본문
[spring] 스프링 MVC 기초
* 스프링 MVC 전체적인동작
- client에서 요청이 들어오면 무조건 먼저 받는곳은 DispatcherServlet이다. DispatcherServlet에서 ( HandlerMapping, View(JSP), ViewResolver, HandlerAdapter, Controller 로 작업을 보낸다 )
실제로 공수가 많이 들어가는 부분은 controller, view쯤이 될 것이다.
ex) [client] -> [DispatcherServlet(HandlerMapping, View(JSP), ViewResolver, HandlerAdapter)] <-(modelandview)-> [Controller]
1. 프로젝트 생성
New -> Spring Legacy Project -> spring MVC Project 선택 -> 패키지명:com.javalec.spring_ex_pjt 설정 후 finish
* com.javalec.spring_ex_pjt은 꼭 2개 이상으로하자 그래야 spring_ex_pjt가 context명이된다.
- /src/main/webapp은 webroot로 보면된다. /src/main/webapp/views (클라이언트에게 보여줄 view(jsp)페이지들이 모여있는곳)
- /src/main/WEB-INF/web.xml은 servlet매핑이 기본적으로 설정되어있다.
- /src/main/spring/appServlet/servlet-context.xml 여기는 bean이라던가 spring관련된 내용들을 설정하는곳이다.
기본적으로 보면 아래 소스처럼 내용이있것을 확인하자.
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
* 위 태그는 /WEB-INF/views/ (prefix) + 뷰이름 + .jsp(suffix) 로 경로를 설정할 수 있다.
- src/main/java 에 controller를 생성하자.
## 정리
- 뷰(.jsp)
- 컨트롤러 : Dispatcher에서 전달된 요청을 처리
- servlet-context.xml : 스프링 컨테이너 설정 파일
- web.xml : DispatcherServlet 서블릿 매핑 및 스프링 설정 파일 위치 정의
- DispatcherServlet : 클라이언트의 요청을 최초로 받아 컨트롤러에 전달
2. resources 폴더( webapp/resources )
[web.xml]
....
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
** 위의 servlet-mapping태그의 하위태그인 url-pattern에 정의된 " / " 로 들어온 모든요청은
servlet태그에 org.springframework.web.servlet.DispatcherServlet 으로 가라고 명시를 해준것이다.
[HomeController.java]
/**
* Handles requests for the application home page.
*/
@Controller // 반드시 어노테이션을 선언해야 컨트롤러 역할을 할 수 있다.
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET) // value="/" 요청할 경로
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home"; // view 경로
}
}
** 스프링 설정파일 servlet-context.xml을 보면 <context:component-scan base-package="com.javalec.spring_ex_pjt" /> 가 있다.
여기서 context:component-scan 얘가 스프링 프로젝트를 스캔하는데 base-package에 지정된 com.javalec.spring_ex_pjt 안에서만 스캔한다.
스캔도중에 @Controller 어노테이션을 만나면 그 어노테이션에 명시된 파일이 컨트롤러 역할을 할 수 있다.
그리고 위에 web.xml에서 <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 로 되어있어서
servlet-context.xml 파일을 검색하여 과정이 진행되는 것이다.
[톰캣실행 -> 결과]
http://localhost:8080/spring_ex_pjt/WEB-INF/classes... 처럼 spring_ex_pjt가 위의 com.javalec.spring_ex_pjt 지정한대로 컨텍스트 이름으로 잡혀있다.
그러면 톰캣에서 실행하면 server.xml 을 확인해보면 <Context docBase="springEx" path="spring_ex_pjt"... 처럼 자동으로 지정되어있다.
[/src/main/webapp/resources/home.jsp]
/src/main/webapp/resources 경로에 이미지를 저장하고 home.jsp 파일에 <img src="/resources/image.png"> 태그를 넣는다.
위의 경로를 입력하면 이미지를 못찾는다. 그러므로 컨텍스트 명부터 경로를 입력해야이미지를 찾을 수 있다.
ex) <img src="/spring_ex_pjt/resources/image.png">
** 같은 방법으로 webapp안에 myResources폴더를 만들어 위와 같은 방식으로 똑같이하게되면 처음에 이미지가 표시되지 않을것이다.
똑같은 웹 루트에 폴더만 생성할뿐인데 이미지를 찾을 수 없는 부분이 의아할것이다.
이유는 servlet-context.xml을 보면 <resources mapping="/resources/**" location="/resources/" /> 가 추가되어있는데 그 아래
<resources mapping="/myResources/**" location="/myResources/" /> 를 추가하자.
그래야 DispatcherServlet으로 "/"로 들어오는것중에 myResources로 들어오는걸 myResources폴더에서 검색하라고 명시를 해주자.
추가 후 이미지를 확인해보자.
'Java & Kotlin > Spring' 카테고리의 다른 글
[spring] Form 데이터 (0) | 2019.12.25 |
---|---|
[spring] 컨트롤러 뷰에 데이터 전달 (0) | 2019.12.25 |
[spring] AOP(Aspect Oriented Programming) - 2 (0) | 2019.12.25 |
[spring] AOP(Aspect Oriented Programming) - 1 (0) | 2019.12.25 |
[spring] 외부 파일을 이용한 설정 (0) | 2019.12.25 |