본문 바로가기
공부/java & Spring

[왕왕왕초보 Spring 실습] 2. 스프링 mvc 프로젝트 생성

by 고기 2022. 7. 17.

작성순서

0. 참고

1. 이클립스, 톰캣 세팅

2. 프로젝트 생성 

3. 톰캣 서버 등록

4. 작동방식


 

0. 참고

https://1545154.tistory.com/71

 

[왕왕왕초보 Spring 실습] 5. 실습 코드 참고

작성순서 1. foodController.java 2. foodDao.java 3. foodDaoMyBatis.java 4. foodService.java 5. foodServiceImpl.java 6. foodVO.java 7. mybatis-config.xml 8. sqlmap-board.xml 9. servlet-context.xml 10...

1545154.tistory.com

 

 

1. 이클립스, 톰캣 세팅

 

" An error has occurred. See error log for more details.
Could not initialize class com.thoughtworks.xstream.converters.collections.PropertiesConverter "

 

라는 에러를 해결하기 위해 인터넷을 항해하는 사람들이나 

스프링 공부가 처음인 사람들... 즉 세팅이 하나도 안 되어 있는 사람들은 한 번쯤 확인해봐도 좋을 글

 

https://1545154.tistory.com/64

 

[왕왕왕초보 Spring 세팅] 스프링 세팅을 위한 이클립스 및 톰캣 설치

작성순서 1. 이클립스 다운로드 2. 다크모드 설정 3. 스프링 다운 4. Legacy error 해결 5. 톰캣 설정 1. 이클립스 다운로드 https://www.eclipse.org/downloads/ Eclipse Downloads | The Eclipse Foundation The..

1545154.tistory.com

 

2. 프로젝트 생성

File - New - Project 클릭

 

Spring - Spring Legacy Project 선택

 

Spring MVC Project 선택 - Project name 입력

 

시작 패키지를 지정해준다.

c.p.a라던가 wer.bvcx.wtwat라던가 그냥 마음대로 입력해주면 됨

 

3. 톰캣 서버 등록

톰캣 8.5 세팅하는 과정은 1. 이클립스, 톰캣 세팅을 참고

 

Servers 탭에서 마우스 오른쪽 클릭 - New - Server 클릭

 

혹시 Servers 탭을 못찾는 사람은 Window - Show View - Other

 

Servers 찾아서 Open 해주면 Servers 탭이 생긴다

 

Server name 입력 후 Next

 

패키지 add 후 Finish 클릭 (Available에 있는 패키지 더블클릭하면 Configured로 이동함)

 

Servers 탭의 Restart 버튼을 누르면 서버가 실행된다.

서버를 더블클릭해서 Tomcat admin port, HTTP/1.1의 Port Number 확인하자.

 

Servers에 등록된 mhfood-config에서 server.xml 파일의 맨 하단 path를 확인하자.

 

tomcat port를 변경하지 않았다면 localhost:8080/path 에서 다음과 같은 화면이 나와야 한다.

 

4. 작동방식

사용자가 localhost:8080/mh url을 검색? 조회?하면 (이걸 뭐라고 말해야 하는지 모르겠네 ㅋㅋ) 

HomeController.java의 RequestMapping에서 이 url에 대한 작업을 처리하게 된다.

 

Q1. 왜 HomeController.java의 RequestMapping에서 value값은 value="/" 인데 localhost:8080/mh를 처리하느냐?

기본 host는 localhost고 port 번호는 8080 그리고 server.xml의 path가 /mh 이기 때문에 mhfood 서버의 기본 경로는 localhost:8080/mh가 된다.

 

따라서 HomeController.java의 home 메서드는 기본 경로에 대한 작업을 처리하는 컨트롤러가 되는 것이다.

 

Q2. Model이 뭔가요?

정확하게 이거다! 하고 아는 건 아니지만 어떤 느낌인지 설명하자면 이렇다.

javascript나 python을 사용해 본 적이 있는 사람은 이해가 빠를 것 같은데, java에서는 자료형이 정해져 있어서 배열의 자료형이 int면 int만 넣을 수 있고 String이면 String만 넣을 수 있지만 python에서는 그냥 이것저것 넣으면 된다.

Model은 python의 배열같은...? 그런 느낌이다. 이것저것 집어넣을 수 있는 자료형? 이라고 생각하면 될 것 같다.

 

근데 java에서도 다른 방식으로 이것저것 집어넣을 수 있는...? 그런게 있었던 것 같은데 내가 자바 공부를 시작한지 얼마 안되어서 그건 잘 모르겠다... ㅋㅋㅋ

 

Q3. return "home"이 뭔가요?

home.jsp로 매핑된다.

home.jsp가 아니라 home이라고 쓴 이유는 src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml에 있다.

 

솔직히 이걸 어떻게 설명해야 할지 모르겠는데... 일단 ViewResolver 부분을 확인해보자.

controller에서 WEB-INF/views 아래에 있는 모든 jsp file들을 경로/.jsp를 떼고 호출할 수 있는?

그런 거라고 생각하면 될 것 같다. 

 

예를들어 servlet-context.xml을 이렇게 수정해보자.

 

그리고 WEB-INF 아래에 home2.jsp file을 만들어보자. 그냥 home.jsp 복사해오면 된다.

 

controller에서 home.jsp화면과 home2.jsp 화면을 띄우려면 어떻게 작성해야 할까?

먼저 home2.jsp 화면을 띄워보자. return "home2" 만 하면 ViewResolver에서 WEB-INF 아래 있는 view를 찾아서 매핑해주기 때문에 이렇게 작성하면 된다.

 

그러면 views/home.jsp화면을 띄우려면 어떻게 작성해야 할까?

이렇게 ViewResolver에서 지정해준 경로에서 jsp file이 있는 경로를 추가해주면 된다.

 

Q4. 빌드가 뭐에요?

아니 대체 빌드를 하라는게 무슨 말이야???

학교에서 java 배우면서 이클립스 사용했을 때는 딱히 빌드같은거 안해도 결과 나왔었는데...

build 해야한다는 말은 들어봤는데 솔직히 처음 들었을 때 이걸 뭐 어쩌라고? 이런 생각밖에 안들었다.

python 썼을때는 그냥 코드 작성하고 실행시키면 바로바로 결과가 나오니까.. 그런데 java에서는 프로젝트 빌드를 해줘야 한다고 한다.

 

이게 무슨 말이냐! 설명은 잘 못하겠지만... 프로젝트에서 어딘가 코드를 수정하면 빌드를 하고나서 실행해야만 수정한 내용이 적용된다는 말이다.

 

잠깐 Q3에서 수정했던 servlet-context.xml을 예시로 들고 오자면,

/WEB-INF/views를 /WEB-INF/로 수정했지만 build를 안하고 바로 서버를 실행시키면 결과는 수정하기 전인 /WEB-INF/views로 실행된다는 말이다.

 

빌드하는 방법은 build all에서 해주는 방법도 있고 build automatically 켜두는 방법도 있고 clean 사용하는 방법도 있다는데 회사에서 과장이 말하기로 그냥 clean으로 해주는게 좋다고 그러더라고...? 그런데 왜인지는 모르겠음 ㅋㅋㅋ 일단 하라니까 한다.

 

project - Clean 클릭

 

project 선택 후 Clean

 

이렇게 하면 된다!

 

여기까지 솔직히 맞는 설명인지는 모르겠지만 대충 이런식으로 작동하는 것 같다.

뭐... 지금 당장은 구현만 할 수 있으면 되니까... 이정도로만 해두고!

 

다음 글에서는 이클립스에서 controller, vo, service, dao 파일을 작성하는 방법에 대해 작성한다.

댓글