1. 톰캣 구동은 jsp 파일이 아닌 프로젝트에서 해야한다.

2. 톰캣을 구동하면 프로젝트로 진입 후 web.xml이 실행된다.

3. web.xml에서 servlet-context.xml이 실행된다.

4. servlet-context는 객체를 생성한다.

5. HomeController 클래스의 객체에 의존성 주입이 된다.

6. 의존성 주입된 클래스는 Requestmapping으로 인하여 /을 받는다.

7. 객체 prefix로 인하여 앞에는 /WEB-INF/views/가되고

8. sufix로 인해 뒤에는 .jsp가 붙는다.

 

 

 

자세한 설명↓

출처 : https://xzio.tistory.com/1373

1) 클라이언트 요청(Request) - web.xml 실행

web.xml에서는 요청에 대해 우선 처리 시작

여기서 DispatcherServlet이 web.xml에서 다른 처리로 넘어가기 전 의 형태로 들어오는 요청을 가로채 servlet-context.xml 로 넘겨버린다.

 

2) DispatcherServlet이 요청을 가로채고 servlet-context.xml을 실행

servler-context.xml 의 <context:component-scan.../>에서는 해당 위치의 어노테이션을 읽고 bean으로 등록한다.
<annotation-driven />은 HandlerMapping & HandelerAdapter의 역할로써, component-scan을 통해서 스캔된 bean 중에서 해당 요청과 알맞은 Controller를 찾아 연결시켜준다.

 

 

3) HomeController로 이동


servlet-context.xml의 component-scan에 의해 HomeController의 @Controller이 읽혀 bean으로 등록되었고, annotation-driven은 @RequestMapping을 읽어들이면서 해당 요청 (/)을 처리할 수 있는 Controller를 찾아냈다.

그렇게 해서 HomeController가 요청을 받을 수 있게 된 것.
요청을 받은 Controller는 적당한 처리를 취한 뒤, Model.addAttribute()를 통해 처리완료된 데이터를 Model에 다시 담고, "Home"이라는 이름으로 return 한다.

Model과 Controller 거쳤으니, 이제 View를 거칠 차례
servlet-context.xml로 돌아와 Controller에서 반환된 "Home"을 가지고 View로 접근할 수 있는 경로를 만든다.

 



이 과정을 거치면 /WEB-INF/views/Home.jsp 라는 경로가 최종적으로 만들어지게 되고 InternalResourceViewResolver를 통하여 이에 맞는 View를 찾는다.

 

 

 

자세한 설명↓

출처 : https://hello-walnuty.tistory.com/16

 

사용법

 

Servlet-context.xml 

 

<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>

 

board.jsp 파일의 실제 주소

/WEB-INF/views/board.jsp

 

컨트롤러가 지정한 논리적 뷰 이름 board

접두어 prefix : /WEB-INF/views/

접미어 suffix : .jsp

 

jsp 파일경로에 따라 설정

 

간단하게 말하면

localhost:8080/board만 입력해도 /WEB-INF/views/ 경로에 있는 board.jsp 파일을 불러올 수 있게 함.

 

 

'Backend > Spring' 카테고리의 다른 글

[Spring]Project 동작 순서  (0) 2023.06.03
Spring framework 동작원리  (0) 2023.06.03
[Maven - repository] repository 삭제해도 될까/경로문제  (0) 2023.05.28
이클립스 빈줄 제거  (0) 2023.05.17
spring - namespaces  (0) 2023.05.15

 

스프링 플젝 준비하다 이클립스 사용할 일이 생겨 실행하는데 에러가 났다.

아예 열리지도 않는 걸 보니 ini 파일 문제일 것 같아서 열어봤는데

라이브러리 경로를 보니 p2 폴더 내부였다. 

스프링 플젝 준비하면서 레포지토리 경로 때문에 m2 폴더를 정리한다는 게 p2 폴더를 건드린 적이 있었는데 

그 때 p2 폴더 내부 파일을 새로 생성한 폴더에 정리한답시고 넣어둔 게 문제였다.

다시 꺼내서 p2 폴더에 넣어주니 실행된다.

 

이클립스 버전 고질적인 에러문제로 local repository 경로 설정이 되지 않는다.

일단 m2에 저장되는 중인데 repository에 저장된 파일들은 결국 maven 의존성 라이브러리이기 때문에 경로 설정이 되지 않아도 괜찮지 않을까 생각이 들었다.

내가 기억만 하고 있다면?

일단은! crud 연습부터 진행하고 추후에 다른 버전의 이클립스를 다운받아 해결되는지 확인해봐야겠다.

찾아보니 repository에 저장된 파일들은 

project 우클릭 > Run As > maven install

Run As > maven > Update Project 로 재다운로드 가능하다.

1. STS3 설치 

 

https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3

 

Spring Tool Suite 3

the distribution build for the Spring Tool Suite and the Groovy/Grails Tool Suite - spring-attic/toolsuite-distribution

github.com

 

맨 위꺼 윈도우용 설치 

 

2. 반디집으로 압축 풀기

 

3. STS.ini 파일에 

-vm

javaw.exe 경로 추가

 

4. STS.exe 실행

 

5. Window - Preferences 

 

1) installed JREs 검색 - 사용 중인 JDK 경로 추가해서 선택 후 Apply

2) compailer 검색 - JDK 버전 설정

3) 인코딩 설정

General - Workspace 맨 아래 Other - UTF-8 설정

Web - css, html, jsp UTF-8 설정

 

6. 웹브라우저 설정

Window - Web Browser - 선택

 

7. 서버 설정 (Tomcat)

하단 Servers 창에서 링크 클릭

Apache - Tomcat 9.0 (본인이 설정한 버전 선택)

Next - Tomcat 설치한 경로 선택 - Finish

 

Servers 창 Tomcat 우측버튼 클릭 후 Start

localhost:8080 접속해서 잘 연결되는지 확인

본인 포트번호는 Servers 창에 서버 더블클릭 후 Overview 창에서 볼 수 있음

 

계속 매핑이 안돼서 뭐가 문제인가 찾아보는데

서버 재시작 하니까 적용됨

 

에러

the import javax.annotation.resource cannot be resolved

 

원인

 javax.annotation.resource 가 import 되지 않아서

 

해결

pom.xml 파일에 

<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>

추가

1. web.xml 파일에서 DispatcherServlet 선언 확인

 


<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

/ > /* 변경

 

 

2. servlet-context.xml 파일 확인

 

<mvc:annotation-driven />


<context:component-scan base-package="com.spring.board* " />

 

3. url mapping 확인 

 

controller.java 파일에서 

@RequestMapping(value = "/sample") 

 

 

Project 우클릭 > Properties > Java build path > Add Library > Class path에 junit 추가

+ Recent posts