본문 바로가기
SPRING/web mvc 설정

[ SPRING ] 2.5 web mvc 기본 설정

by 정윤재 2013. 8. 4.


spring 에 대해서 버전 별로 설정을 정리 할 필요성이 있다고 생각 되어 


실제 현장에서 사용할 만한 버전(2.5) 부터 정리를 시작 합니다.


(4.0 의 prototype이 나오는 걸 보면 이제 실제 현장에서 2.0 버전 정도는 없을거고


생각이 됩니다.)


아래 내용은 기본적인 설정 내용이며 xml 로 bean 설정 하여 mvc 를 구성하는 내용과


annotation 을 이용하여 mvc 를 구성 하는 내용을 모두 한 프로젝트에서 기술 하였습니다.



SpringWebSample.zip



1. spring site 에서 다운로드를 받습니다.


http://www.springsource.org/download/community


에서 




위와 같이 SEC 라는 버전을 다운로드 받으시길 바랍니다.


2. eclipse 에 new >  Others > Web > Dynamic Web Project 를 선택 하여


아래의 그림과 같이 구성 합니다. (eclipse 에 tomcat 또는 다른 container 로 server 를 추가


하여 연동 하는 내용은 적지 않겠습니다.)





3. 위의 그림 중 가장 먼저 (밑에 조금 짤렸지만) 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>sample</display-name>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  <!-- 공통으로 사용할 수 있는 bean 들(db 연결 등)에 대해 선 할 수 있도록 하는 설정 -->

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:/conf/spring/applicationContext.xml</param-value>

  </context-param>

  

  <!-- web mvc 관련 설정 (service bean, url mapping 등등) -->

  <servlet>

    <servlet-name>dispatcher</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:/conf/spring/dispatcher-servlet.xml</param-value>

    </init-param>

  </servlet>

  <servlet-mapping>

    <servlet-name>dispatcher</servlet-name>

    <url-pattern>/</url-pattern>

  </servlet-mapping>

  

  <!-- charater encoding 을 servlet filter 로 구현 -->

  <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>

</web-app>


4. 설정 부터 해야 하므로 applicationContext.xml 과 dispatcher-servlet.xml 을 작성해 


보겠습니다.


4-1. applicationContext.xml 의 경우 db 연결 같은 공통적인 bean 설정을 하는데


여기서는 기본 mvc 설정만 하므로 ibatis 나 hibernate 같은 framework 를 사용한


bean 설정 같은 것은 하지 않으므로 공란 입니다.


그래도 맛이라도 보게 하기 위해 예전에 mysql db 연결 해 놓았던 db 연결 로직을 적어 놓겠습


니다.


applicationContext.xml


 <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">


<beans>


<!--  Mysql setting sample -->

<!-- 

<bean id="dataSource-Mysql" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName" value="jdbc/mysql"/>

<property name="resourceRef" value="true" />

</bean>

<bean id="sqlMapClient-Mysql" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

<property name="configLocation" value="/WEB-INF/conf/sql/sqlMapConfig-Mysql.xml" />

<property name="dataSource" ref="dataSource-Mysql" />

</bean>

<bean id="trManager-Mysql" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource-Mysql" />

</bean>

-->

</beans>


4-2. dispatcher-servlet.xml 은 web mvc 관련된 url mapping 이라던지 controller, service 


등의 bean 설정 입니다.


xml 태그 방식으로 설정 가능 하고 annotation 형태로도 가능하지만 점점 annotation으로


사용하는 추세 입니다.


여기서는 두 방식을 비교해 보시라고 모두 기술 하였습니다.


<?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:aop="http://www.springframework.org/schema/aop"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:lang="http://www.springframework.org/schema/lang"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:util="http://www.springframework.org/schema/util"

    xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd

        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">

     

     <!-- annotation setting -->   

    <context:component-scan base-package="com.test"/>

    <context:annotation-config/>


    <bean id="annotationMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

        <property name="alwaysUseFullPath" value="true"/>

        <property name="order" value="1"/>

    </bean>



    <!-- basic xml setting -->

<bean id="basicController" class="com.test.controller.BasicController">

    <property name="basicService" ref="basicService"/>

</bean>

<bean id="basicService" class="com.test.biz.BasicServiceImpl"></bean>


<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/jsp/" />

<property name="suffix" value=".jsp" />

</bean>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="urlMap">

<props>

<prop key="/basic/basic.do">basicController</prop>

</props>

</property>

</bean>



</beans>


5. 이제 설정 파일들은 거의 설정 완료 된 것 같습니다. 그러므로 controller 들을 작성해 보죠.


BasicController.java


package com.test.controller;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.validation.BindException;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;


import com.test.biz.BasicService;


public class BasicController implements Controller{

private BasicService basicService;

public void setBasicService(BasicService basicService) {

this.basicService = basicService;

}

@Override

public ModelAndView handleRequest(HttpServletRequest request,

HttpServletResponse response) throws Exception {

// TODO Auto-generated method stub

ModelAndView mav = new ModelAndView();

mav.addObject("pageName",basicService.getPageName());

mav.setViewName("/sample/basicSample");

return mav;

}



} 




AnnotationController.java


package com.test.controller;


import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;


import com.test.biz.BasicService;


@Controller

public class AnnotationController {

@Resource(name="annotationService")

BasicService annotationService;

@RequestMapping(value="/annotation/annotation.do")

public ModelAndView getPage(HttpServletResponse response,HttpServletRequest request){

ModelAndView mav = new ModelAndView();

mav.addObject("pageName",annotationService.getPageName());

mav.setViewName("/sample/annotationSample");

return mav;

}


}


6. controller 작성을 끝냈으니 service 부분들을 작성해 보죠.


BasicService.java


package com.test.biz;


public interface BasicService {

public String getPageName();

}



BasicServiceImpl.java

package com.test.biz;


public class BasicServiceImpl implements BasicService{


public String getPageName(){

return "BasicSample.jsp";

}

}




AnnotationServiceImpl.java


package com.test.biz;


import org.springframework.stereotype.Service;


@Service("annotationService")

public class AnnotationServiceImpl implements BasicService{


@Override

public String getPageName() {

// TODO Auto-generated method stub

return "AnnotationSample.jsp";

}


}



7. 자 그럼 presentation layer 인 jsp 화면을 구성 해 보도록 하죠
간단히 자신의 page 명을 출력하게 할 겁니다.

basicSample.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>basic sample</title>

</head>

<body>

<%

out.println((String)request.getAttribute("pageName"));

%>

</body>

</html>




annotationSample.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>annotationSample</title>

</head>

<body>

<%

out.println((String)request.getAttribute("pageName"));

%>

</body>

</html>



8. 위와 같이 프로젝트를 구성한 후엔 eclipse 의  navigator 나 Project Explorer 의


프로젝트 위에서 마우스 우클릭 후 Run As > Run On Server 로 프로젝트를


container(tomcat 또는 etc...)로 구동 시켜보도록 합시다.


2개의 URL 로 접근 가능한데


URL 1 (xml bean, controller 설정): 


http://localhost:8080/SpringWebSample/basic/basic.do


URL 1 (annotation bean, controller 설정):


http://localhost:8080/SpringWebSample/annotation/annotation.do


로 접근 하면 아래와 같이 출력 됩니다.






'SPRING > web mvc 설정' 카테고리의 다른 글

[ SPRING ] spring 2.5 + ibatis web mvc  (0) 2013.10.27

댓글