2009년 5월 22일 금요일

Spring 프레임워크를 설치

우선 Spring 프레임워크를 설치해서 구동하는것부터 해보자. 그 유명한 Hello World 찍는것부터~~^^

우선 내 스타일대로 개발환경 세팅

1. 이클립스는 3.3 버젼 J2EE용으로 받고(eclipse-jee-europa)

2. 필요한 이클립스 플러그인 설치

  • SpringIDE 플러그인 - http://springide.org/updatesite

    설치시 주의할점은 이클립스 업데이트를 통해 플러그인 설치시 feature선택할때 springide내 Dependancies항목은

    제외한다. Mylyn이나 AJDT등은 당장 사용하진 않더라도 나중을 위해 함께 선택해 설치한다.

  • Tomcat 플러그인  - http://www.eclipsetotale.com/tomcatPlugin.html

    톰캣플러그인은 이클립스를 통한 업데이트가 되지 않는다.

    다운받아서 plugin디렉토리에 그냥 풀어놓으면 된다.

    이클립스3.3버젼에 호환되는 버전 그리고 최신인 tomcatPuginV321.zip 다운로드

  • Colorer 플러그인 -  http://colorer.sf.net/eclipsecolorer

    이클립스 초기부터 사용해오던 플러그인.. 이제 이거 없으면 제대로 소스 못본다.  중독...-.-

    이클립스 속성에서 File Association 프로퍼티에서 xml, jsp, html등의 파일들을 모두 이걸 통해 보는걸로 수정해둔다.

3. 실행환경으로 사용할 Tomcat을 하나 설치해둔다. Tomcat5.5.9 설치했음

4. Dynamic Web Project를 하나 생성해서 HelloWorld라는 프로젝트를 만든다

    TargetRuntime 부분은 설치해둔 Tomcat 으로 지정한다.

5. Spring 프레임워크(최신인 2.5.2)를 다운받아 우선 몽땅 다 들어있는 spring.jar를 lib폴더에 넣는다.

=> 중요한 부분 하나. Spring 2.5 버젼의 spring.jar에는 SpringMVC에 필요한

org.springframework.web.servlet.mvc.Controller, org.springframework.web.servlet.ModelAndView등이 포함되어 있지 않다.

대부분의 매뉴얼들이 2.0정도의 버젼으로 작성되어있어서 spring.jar만 클래스패스에 잡으라고 되있기때문에 이것땜에 한참 헤멨다.

암튼 제대로 돌리려면 spring-framework-2.5.2-with-dependencies.zip파일을 다운로드받아서 dist안에 있는 spring.jar뿐만 아니라

modules안에 있는 spring-webmvc.jar도 함께 가져온다.

또 /lib/jakarta-commons/commons-logging.jar 도 가져온다

마지막으로 태그라이브러리 사용을 위한 jstl 라이브러리. 기존에 JSTL을 사용안하고 있기 때문에 이 부분없이 해보고 싶었으나 대부분의 예제들이

그냥 이렇게 진행되있는 이유로 우선은 그대로 진행.

다운받은 스프링프레임워크 내부의 lib에도 있으나 http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 에서

최신 라이브러리로 다운받는다. JSTL이 1.0과 1.1 버젼이 사용법이 다르므로 최신으로 받는다.

jstl.jar, standard.jar 를 /WEB-INF/lib폴더에 포함시킨다

      이제 개발 환경은 설정완료


HelloWorld 애플리케이션을 Spring기반에 만들어보기

간단히 Sping프레임워크 동작 구조 공부 more..

펼쳐두기..

1.web.xml 파일 수정

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="HelloWorld" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <display-name>HelloWorld</display-name>
 
 <servlet>
  <servlet-name>helloworld</servlet-name>
  <servlet-class>
  org.springframework.web.servlet.DispatcherServlet  
  </servlet-class>
 </servlet>
 
 <servlet-mapping>
  <servlet-name>helloworld</servlet-name>
  <url-pattern>*.htm</url-pattern>
 </servlet-mapping>  
   
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

우선 중요한 부분은 Spring 프레임워크내의 DispatcherServlet을 매핑하게 되는데 이부분은 Spring에서 제어행위를 처리하는 서블릿이다. 그리고 이에 대한 설정파일은 서블릿명-servlet.xml이 된다.

2. 규칙대로 /WEB-INF/helloworld-servlet.xml 을 만든다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 <bean id="springController" class="web.SpringController" />
 <bean id="urlMapping"  
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="/hello.htm">springController</prop>  
   </props>
  </property>
 </bean>
 <bean id="viewResolver"  
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass">
   <value>org.springframework.web.servlet.view.JstlView</value>
  </property>
  <property name="prefix">
   <value>/JSP/</value>
  </property>
  <property name="suffix">
   <value>.jsp</value>
  </property>
 </bean>
</beans>

총 3개의 Bean을 정의하고 있는데 첫번째는 처리제어를 위한 컨트롤러를 정의하고 있는데 springController라는 이름으로 web.SpringController라는 클래스를 매핑해주고 있습니다.

그리고 두번째는 hello.htm으로 들어오는 요청에 대해 springController로 넘기게 되어있고

세번째는 View의 역할을 할 JSP에 대한 설정이다

3. 다음에는 SpringController를 만듭니다

web패키지 아래에 SpringController를 만들되 org.springframework.web.servlet.mvc.Controller를 상속받아 구현합니다.

package web;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class SpringController implements Controller {
 protected final Log logger = LogFactory.getLog(getClass());
 
 public ModelAndView handleRequest(HttpServletRequest arg0,
   HttpServletResponse arg1) throws Exception {
        String now = (new Date()).toString();  
        logger.info("returning hello view with " + now);      
        return new ModelAndView("hello", "now", now);
 }
}

소스내용을 보면 단순하게 요청에 대해 현재 시간을 담은 변수를 now라는 이름으로 hello라는 페이지로 전달하게 되어있다

이 hello는 helloworld-servlet.xml내에 viewResolver 빈에 정의한 설정에 따라 /JSP/hello.jsp가 될것이다.

4. 이제 /JSP/hello.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!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 World :: Spring Application</title>
</head>
<body>
<h1>Hello World! - Spring Application</h1>
<p>Greetings, it is now<c:out value="${now}" /></p>
</body>
</html>

컨트롤러를 통해 ModelAndView에 담겨진 now객체를 받아 뿌려주게 되어있다

여기서 문제점 하나! 태그라이브러리 선언 부분이 jstl라이브러리 버젼에 따라 달라진다. (이부분도 많이 헤멤-.-)

jstl 라이브러리 버전 1.0은 uri="http://java.sun.com/jstl/core"
1.1 버전은 uri="http://java.sun.com/jsp/jstl/core" 로 선언. 내 경우 spring다운받은 내부의 jar를 이용했는데 1.0인가보다.

5. 이제 Tomcat을 기동하고 http://localhost:8080/HelloWorld/hello.htm 으로 접근하면.. 드뎌 나온다 Hello World...ㅎㅎㅎ

댓글 없음:

댓글 쓰기