[인텔리J] HomeController 작성(cafe24 welcome file, tiles 관련)
인텔리J의 경우 maven, spring 구조로 프로젝트 생성시 다음과 같이 구성이 되어 있다.
이 모습은 이클립스의 모습과 다르게 생성된다.
아래와 같이 이클립스의 경우 생성과 동시에 HomeController 클래스가 있다.
또한 이클립스는 다음과 같이 톰캣 연동시 server 프로젝트가 생성되어서 해당 프로젝트에서 가상 톰캣의 설정을 변경할 수 있다.
여기서 두개의 프로젝트의 차이는 다음과 같다.
1. 인텔리제이에는 프로젝트 생성시 HomeCotroller가 없고 생성과 동시에 web에 index.jsp 파일이 생성된다.
2. 인텔리제이는 자체 WAS가 있어 이클립스처럼 tomcat 설정을 변경할 수 없다.
3. 이클립스는 생성과 동시에 HomeController와 home.jsp가 있다.
4. 이클립스는 server프로젝트가 있어 해당 프로젝트에서 톰캣 설정을 변경할 수 있다.
여기서 필자가 막혔던 부분이 발생한다.
인텔리제이에서 타일즈를 사용하려고 하던 중 인텔리제이의 다음 문제로 인해 타일즈 설정을 바꾸지 못했었던 것이다.
우선 다음과 같이 진행해서 home.jsp를 실행하려고하였다.
구조는 이클립스와 동일하다.
1. web.xml로 dispatcher 서블릿을 구동한다.
해당 서블릿은 /이 포함되면 작동된다.
2. dispather-servlet을 설정하여 home.jsp을 실행한다.
3. HomeController를 만든다.
4. index.jsp 파일을 삭제하거나 WEB-INF 내부로 옮긴다.
1. web.xml로 dispatcher 서블릿을 구동한다.
다음과 같이 web.xml 파일의 servlet-mapping의 url 패턴을 *.form에서 /로 변경해준다.
이제 프로젝트 실행시 locahost:8080/는 dispatcher-servlet의 설정에 따라서 작동된다.
2. dispatcher-servlet을 다음과 같이 작성한다.
이제 컨트롤러에서 반환된 값은 다음과 같이 앞에는 /WEB-INF/views/가 붙고 뒤에는 .jsp가 붙는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<mvc:annotation-driven></mvc:annotation-driven>
<context:component-scan base-package="com.mycom"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
|
cs |
다만, 여기서 중요한게 <mvc:annotation-driven>을 등록할 때 다음과 같이 많은 클래스가 나온다.
여기서 우리가 등록해야 할 것은 mvc이기 떄문에 mvc를 찾아서 등록해야한다.
만약 여기서 잘못 등록했다면 조금 귀찮아진다.
필자의 경우 다음과 같이 mvc가 아닌 cache로 잘못 등록을 해봤다.
그럼 다시 mvc 등록을 위해 기존 mvc 등록을 삭제한 후
다시 아래와 같이 bean 등록을 시도하면 더 이상 다른 bean은 보이지않고 cache만 보이게 된다.
해결 방법은 다음과 같이 표시한 부분을 삭제하고
다시 입력을 하면 아래와 같이 다시 표시가 된다.
추가 후 다음과 같이 로케잇현과 xmlns:xsi에도 정상 추가된 것을 확인할 수 있다.
3. HomeController를 만든다.
그리고 나서 다음과 같은 경로에 home.jsp 파일을 만든다.
이제 톰캣을 구동하면 필자가 원하는 대로 home.jsp 파일이 작동되어야한다.
한번 톰캣을 구동해보겠다.
그런데 원하던 결과와 달리 톰캣 실행시 index.jsp 파일이 실행된다.
이유는 톰캣의 web.xml 파일에 welcome.xml 파일이 index.jsp로 되어있기 때문이다.
그렇기 때문에 서버 접속시 index.jsp파일이 있을 경우 해당 파일이 우선 구동이 되는 것이다.
설명을 하는 것보다는 직접 보도록하자
다음은 이클립스의 web.xml이다.
파일을 열어보면 다음과 같이 welcome-file-list가 다음과 같이 되어 있기 때문에 톰캣 구동시 우리가 원하는 home.jsp 파일이 구동되는게 아닌 index.jsp 파일이 구동되는 것이다.
하지만 인텔리제이의 경우 앞서 설명한 것과 같이 자체 WAS로 구동되기 때문에 직접 톰캣의 web.xml에 접근할 수 없다.
그렇다면 어떻게 이 문제를 해결해야 할까
해당 문제의 해결은 index.jsp 파일을 다른 곳으로 옮기거나 삭제하여 해결하면된다.
그럼 다음과 같이 index.jsp 파일을 web > WEB-INF > views로 옮겨보도록하자
그리고 톰캣을 다시 재구동한다.
다음과 같이 home.jsp 파일이 구동된 것을 확인할 수 있다.
이로써 인텔리제이 내부에서 설정은 끝났다.
하지만 필자는 추가로 궁금한 부분이 있어 해당 부분을 테스트 진행하였다.
cafe24의 경우 톰캣 서버의 web.xml 파일의 welcome-file-list가 앞서 설명한 것 같이 index.jsp로 되어 있다.
그럼 인텔리제이에서 수정한 것과 같이 cafe24의 web.xml에서 수정을 했을 때 동일하게 정상적으로 home.jsp에 접속이 되는지 보도록하자
다음은 톰캣의 web.xml 파일이다.
앞서 설명한 것과 같이 welcome-file-lsit가 다음과 같이 되어있다.
FileZilla를 이용하여 데스크탑에서 톰캣 서버로 ROOT.war을 이동시키고 톰캣을 재구동하였다.
해당 프로젝트는 dev.namubada.com에서 구동되도록 설정하였기 떄문에 다음과 같이 dev.namubada.com 접속시 필자가 원하던대로 home.jsp 파일이 실행되는 것을 알 수 있다.
하여 다음과 같이 welcome-file-list의 파일이 없을 경우 웹 프로젝트의 web.xml의 경로대로 실행이 되는 것으로 추정된다.
'IDE Tool > IntelliJ IDEA' 카테고리의 다른 글
[인텔리J] 탐색창에서 폴더보기 (0) | 2021.04.05 |
---|---|
[인텔리J] web.xml 설정 오류 수정 (0) | 2021.04.05 |
[인텔리J] 임포트 후 현재 프로젝트를 out 폴더에 등록하자 (0) | 2021.04.05 |
[인텔리J] import project web directory 생성 (0) | 2021.04.04 |
[인텔리J] Error during artifact deployment. See server log for details.(java.lang.IllegalStateException: Error starting child) (0) | 2021.04.04 |
[인텔리J] log4j.xml 설정하기 (0) | 2021.04.04 |
[인텔리J] 인텔리제이에서 이클립스로 export 후 java class 관련, export는 해당 모듈까지 할 필요없다. (0) | 2021.04.04 |
[인텔리J] 인텔리제이에서 이클립스 프로젝트를 import 해보자(dependency type IntelliJ/Eclipse)(1) (0) | 2021.04.04 |