구글링을 통해 이클립스에 톰캣, 스프링 세팅이 다 되었다면
jsp 파일을 만들고 로컬 환경(당신의 PC)에서 톰캣을 구동할 것이다.
근데 기껏 만든 jsp 화면은 안 나타나고 404 에러만 난다.
index.jsp를 컨트롤러가 보게 하고 싶은데 어떻게 하는지 모르겠다.
브라우저에 뭐라고 쳐야 접속할 수 있지?
이런 사람만 이 포스팅을 볼것
고급자용은 아니므로
이 포스팅을 갑자기 하는 이유는
웹개발을 잘 모르는 윗분들 세팅을 해주면서도
팀원들과 환경 세팅을 다시 하면서도
대학교 다닐 때 MVC 패턴으로 처음 개발하면서도
너무 짜증났던 스프링 mvc url/uri 를 떠올리며
나 초보자일 때의 기억을 되살려 제일 짜증나는 부분만 정리해봄
※ 여기서 스프링 설정은 xml이 아니라 자바 설정 JAVA Config 을 이용하였으며
스프링은 5.x, 톰캣은 8.5.x 버전이다.
고급자는 이 포스팅을 떠날 것
극 초심자를 위한 포스팅임
ex. mvc 처음 해보는 사람
이클립스에 스프링과 톰캣을 연동하기는 했는데
그 후로 뭘 해야 접속이 되지 ??
기본적으로, 스프링 WebMvcConfigurer - ViewResolver
WebApplicationInitializer,
IndexController가 필요하다.
세 개의 java 파일이 생겨아 한다.
자세한 설정법은 저 키워드로 검색하면 나올 것이다 (...)
xml이 아니라 java config를 이용했다는 것에 유의.
간단히만 설명하자면
WebMvcConfigurer를 implement 하는 클래스를 만들고
ViewResolver를 만들어야한다. 뷰 리졸버의 역할은 jsp 파일을 컨트롤러가 찾아갈 수 있도록 하기 위함이다.
다음으로 WebApplicationInitializer를 implement하는 클래스는
이름에서 보면 알겠지만 웹 어플리케이션을 초기화한다.
config를 설정한 위치나 인코딩 설정 등 다양한 설정이 가능하니 검색해보길 바람.
귀찮아서 그런 거 아님.
그리고 이 포스팅의 핵심인 컨트롤러.
딱히 implement하거나 extend할 필요는 없으며
클래스 선언 위에 @Controller 어노테이션을 써주면 알아서 인식한다.
@Controller
public class IndexController{
...
...
}
이런 식으로...
캡쳐하고 싶은데 폐쇄망에서 개발하고 있어서 캡쳐 못함
이러면 이제 내가 만든 jsp 파일을 브라우저에서 볼 수 있을까?
근데 보통 한 번에 성공 못한다.
내가 처음 할 때 그랬다 (...)
URL 개념이 애매해서 그렇다.
로컬에서 실행했다면 접속 아이피는 http://localhost:8080/일 것이다
8080은 톰캣 기본 포트이니 수정했다면 수정한 포트로 숫자만 바꾸면 된다
컨트롤러 안에는 입력하는 url에 따른 매핑을 할 수 있는 메소드를 만들어준다.
예를 들면 이렇다.
@Controller
public class IndexController{
@RequestMapping(value="/")
public String index(HttpServletRequest req, HttpServletResponse res){
return "index";
}
}
RequestMapping(value="/")의 뜻은,
기본 주소 뒤에 / 까지만 치면 이 메서드로 매핑된다는 뜻이다.
즉 기본주소가 http://jeanette.tistory.com이라면 /를 붙인 http://jeanette.tistory.com/까지 입력하면 해당 메서드를 통해 jsp를 찾아가게 된다.
응용하면, value="/test" 라고 적으면
http://jeanette.tistory.com/test 라고 주소창에 입력하면 해당 메서드를 타고 들어온다는 뜻이다.
그리고 리턴값은, 드디어, jsp의 파일명이다.
viewResolver가 jsp의 경로를 잘 보고 있고, suffix가 잘 설정되어있다면
기본 주소만 입력해도 jsp파일이 위치한 경로에 있는 index.jsp 파일을 연결시켜준다는 뜻이다.
그런데 이게 잘 안된다면 ??
주소창에 http://localhost:8080/ 만 치면 jsp 확장자 없이 딱 들어가게 하고 싶은데 어떻게 하나요 ????
이클립스에 톰캣을 연동했다면
Project Explorer 목록에 Servers 폴더가 있다
그걸 누르고 해당하는 웹프로젝트와 연동된 이름의 폴더를 열면
server.xml 파일이 있다
주로 이 설정 때문에 안 되는 경우가 많다
server.xml 파일을 열고 쭉 내리다보면
<Connector connectionTimeout="20000" port="8080" ....생략
이런 부분이 있을 텐데 8080을 다른 포트로 바꾸고 싶으면 바꾸면 된다
그럼 http://아이피:바꾼포트/ 이렇게 접속 가능
그리고 좀 더 내려가보면
<Context docBase="projectName" path="/projectName" reloadable="true" ... 생략
이 부분이 있을 건데 여기가 이 포스팅의 핵심이다.
첫 세팅 후 아무것도 건드리지 않았다면 docBase와 path가 둘 다 프로젝트명으로 되어있을 것이다.
docBase는 파일이 실제로 위치한 경로인데, 이클립스는 프로젝트명으로 폴더를 생성하므로 이 부분은 건드리지 않아도 된다
문제는 path이다.
이 path의 뜻은, 기본 톰캣 주소 뒤에 무조건 붙는 기본 경로라고 생각하면 된다.
톰캣을 시작하면 기본 주소는 http://아이피:포트/가 되는데,
path="/projectName"이 뒤에 붙어서 이 웹 프로젝트에 대한 경로는 http://아이피:포트/projectName이 된다는 뜻이다.
로컬환경에서 실행하면 자기 자신 접속은 localhost로 가능하며 포트 번호를 바꾸지 않았다면 8080번이므로
test라는 웹 프로젝트를 만들어 실행시키고자 한다면
톰캣을 올린 뒤
http://localhost:8080/test
여기로 접속하면 된다는 뜻이다.
그러니 http://localhost:8080/ 까지만 쳐도 해당 웹앱에 접근하게 하고싶다면
server.xml 아래의 path를 "/"로 설정해주면 된다.
물론 다른 어플리케이션에서도 이렇게 설정해놓고 톰캣 두개 올리면 충돌한다.
주의할 점
server.xml의 세팅이 자바 세팅보다 우선한다고 생각하면 쉽다.
path="/test"로 설정이 되어있다면,
컨트롤러에서 @RequestMapping(value="/") 이라고 설정했다 해도
http://localhost:8080/test 로 접속해야 한다.
컨트롤러에서 무슨 값을 설정해줘봤자 path에 설정된 경로 뒤에 붙는다고 생각하면 된다.
이걸 내가 첫 프로젝트 때 이해했다면.. 과제가 훨씬 쉬웠을 것이다.
흠 일단 생각나는 건 이정도
더 생각나면 추가해야지
'안그래보이지만 개발자 > 백엔드' 카테고리의 다른 글
[Spring] 프로퍼티 빈 설정하고 프로퍼티 파일에서 값 가져오기 (0) | 2021.10.16 |
---|---|
정수 어레이리스트(ArrayList)를 정수 배열로 변환하기 + 정렬 (0) | 2020.10.27 |
java 기초부터 복습하기 : 자바 기본 입력 (1) | 2019.06.12 |
java 기초부터 복습하기 : 자바 기본 출력 (2) | 2019.06.11 |
openssl로 자체 서명 인증서 생성 및 톰캣 https 설정 (self-signed certificate) (3) | 2019.05.17 |