2. web.xml 설정 (/WebContent/WEB_INF/web.xml)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Spring_MVC_Ex</display-name> <!-- 인코딩을 설정하는 부분입니다. "/*"로 들어오는 모든 것들에 대해 UTF-8인코딩을 적용합니다.--> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- DispatcherServlet을 호출합니다. 호출되는 파일명은 servlet-name속성에서 정의된 이름 + "-servlet.xml"이 됩니다. 즉, 여기서는 dispatcher-servlet.xml이란 파일을 호출하겠죠. DispatcherServlet은 여러개를 정의 할수 있는데 load-on-startup의 값이 작은 숫자로 된 DispatcherServlet부터 실행 되게 됩니다. 여기서는 하나밖에 없으니 신경쓸 필요 없을거같습니다 ㅋ--> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!--요청되는 URL중에 ".do"로 끝나는 모든 요청은 dispacher에서 처리하겠다는 의미입니다.--> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- log4j 설정파일 호출하는 부분입니다. log4j에 대한 자세한 내용은 여기를 참조하세요^^ http://everlikemorning.tistory.com/category/Programming/Log4J --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <!-- 프로젝트 실행시 초기 실행되는 파일입니다. --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> |
3. dispatcher-servlet.xml (/WebContent/WEB_INF/dispatcher-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?> <!-- handler mapping --> <!-- controller --> |
handler mapping은 요청 URL과 매핑되는 컨트롤러를 찾아 해당 컨트롤러에 처리를 요청해 주는 역할을 합니다. SimpleURLHandlerMApping, BeanNameURLHandlerMapping, ControllerClassNameHandlerMapping등 여러가지가 있습니다. 여기서는 그 중에서 ControllerClassNameHandlerMapping을 사용해 보겠습니다.
<!-- handler mapping --> <bean id="urlMappingWithControllers" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" p:alwaysUseFullPath="true" p:order="0"/> |
ControllerClassNameHandlerMapping은 컨트롤러가 MultiActionController이면,
/HelloControlle/메서드명.*
아니면, HelloControlle* 의 형식이 됩니다.
여기서는 MultiActionController를 사용했고, web.xml에서 url-pattern을 "*.do"로 설정했으므로
/HelloControlle/메서드명.do 가 되겠습니다 ^^
View resolver는 컨트룰러의 처리 결과를 보여줄 뷰를 결정합니다.
<!-- view resolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/" p:suffix=".jsp"/> |
컨트롤러에서 세팅해주는 뷰이름의 앞에 "/"와 뒤에 ".jsp"를 자동으로 붙여서 세팅해줍니다.
다음으로 컨트롤러입니다. 요청을 처리한뒤 결과를 Dispatcher에알려 줍니다. 그러면 Dispatcher의 View resolver가 뷰를 찾아 넘기게 되는거죠.
<!-- controller --> <bean id="hello" class="com.lcy.controller.HelloController"/> </beans> |
HelloController입니다.
package com.lcy.controller; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; public class HelloController extends MultiActionController{ } |
보시면 메서드가 hello와 now가 있습니다. 따라서 http://localhost:8090/Spring_MVC_Ex/hello/hello.do 또는, http://localhost:8090/Spring_MVC_Ex/hello/now.do 형식의 요청이 들어왔을때 각각 처리해서
hello/hello.jsp나 hello/now.jsp의 뷰를 넘겨줍니다. (앞에 "/"와 뒤의 ".jsp"는 view resolver에서 세팅되어있었죠?)
4. view파일 작성
이제 WebContent/hello/에 hello.jsp와 now.jsp를 작성해보겠습니다.
hello.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>hello page2</title> </head> <body> ${hello} </body> </html> |
now.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>hello page2</title> </head> <body> ${curDate} </body> </html> |
자, 이제 뷰까지 완성하고 프로젝트 클릭 > 우클릭 > run as > run on server 해서 실행하면....
404에러가 뜰겁니다.(걍 예상한거라... 다른 에러가 뜨나... ㅡ_ㅡ;;;)
암튼 원인은 web.xml에 welcome파일을 index.jsp로 설정했기때문에 이 파일이 없어서 그런거죠.
/WebContent/WEB-INF/에 index.jsp를 하나 만들어줍니다.
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:forward page="/hello/hello.do"/> <!-- <jsp:forward page="/hello/now.do"/> --> </body> </html> |
요청이 잘 전달될수 있도록 포워딩을 시켜줍니다.
<jsp:forward page="/hello/hello.do"/>
이제 실행하면 잘 될겁니다. http://localhost:8090/Spring_MVC_Ex/ (로컬이라 눌러봐야안됩니다. ㅡ_ㅡ^ 예전에 어떤 분이 낚이셨다고 하셨는데 ㅋㅋㅋ 하X님이었나요? ㅋㅋㅋ)
지금까지 작업한 프로젝트 구조입니다.
'OpenSource > Spring' 카테고리의 다른 글
Spring DataSource설정 (DB설정) (0) | 2010.02.17 |
---|---|
Spring 컨트룰러 작업시 ControllerClassNameHandlerMapping을 사용할경우 주의사항! (0) | 2010.02.01 |
스프링 컨트롤러에서 컨트롤러로 리다이렉트 (0) | 2009.09.07 |
HTML Form Tag에 대응하는 Spring MVC의 Form Tag (0) | 2009.09.01 |
Spring관련 reference site (0) | 2009.08.31 |