본문 바로가기

프로그래밍/Web

[spring] JAVA코드 테스트를 위한 Spring설정

웹 개발 관련 지식이 전무한지라 java 모듈을 테스트하기 위한

기본적인 내용만 정리.

 

쩝.. 별걸 다 보게 되는 듯..

 

JDK, Spring-framework 등 필요.

서버로는 JBoss, Tomcat 등이 사용되는 듯... -_-;;

 

Dynamic Web Project

Target Runtime 에 서버 정해 주고...

 

 

>>> 기본 설정

WebContent/WEB-INF/lib 폴더에 라이브러리들(스프링등)을 때려(!) 넣는다.

 

web.xml 

servlet 설정 : dispatcher로 보내야 각 컨트롤러로 전달될 수 있다.

모든 설정은 web.xml에 들어가는데, 여러 설정파일이 있는 경우는 contextLoaderListener란 넘을 사용한다.

 

<listener>

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

</listener>

 

이후 파라미터명(param-name)에 contextConfigLocation 를 사용하면 특정 xml을 사용가능 하다.

 

 

<servlet>

  <servlet-name>my_servlet_name</servlet-name>

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

  <load-on-startup>1</load-on-startup>

   

  <init-param>

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

     <param-value>/WEB-INF/config/config.xml</param-value>

  </init-param>

</servlet>

 

<servlet-mapping>

  <servlet-name>my_servlet_name</servlet-name>

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

</servlet-mapping>

 

>>> dispatcher 설정 : config.xml

<beans

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

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

  >

 

  @Controller 사용을 위해 

  <mvc:annotation-driven />

  <context:annotation-config />

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

 

  뷰가 필요하면 (뭔소린지 모르겠다 -_-;;)

  <bean

     class="org.springframework.web.servlet.view.InternalResourceViewResolver">

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

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

  </bean>

 

  컨트롤러의 파라미터 관련 설정(json이나 메시지를 바로 파싱하는 등의 기능)

 <bean

    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

    <property name="messageConverters">

       <list>

           <ref bean="jsonConverter"/>

           <ref bean="marshallingConverter"/>

        </list>

    </property>

  </bean>

 

  위에 언급된(ref) bean 설정

  <bean id="jsonConverter"

     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

     <property name="supportedMediaTypes" value="application/json"/>

   </bean>

 

   <bean id="marshallingConverter"

      class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">

      <constructor-arg ref="jaxbMarshaller"/>

      <property name="supportedMediaTypes" vlaue="application/xml" />

   </bean>

 

   <bean id="jaxbMarshaller"

      class="org.springframework.oxm.jaxb.Jaxb2Marshaller">

      <property name="classeToBeBound">

          <list>

               <value>com.my.package.model.Test</value>

               <value>com.my.package.model.TestList</value>

          </list>

       </property>

   </bean>

</beans>

 

 

 

>>> 컨트롤러의 선언 

@Controller 사용해 컨트롤러 여부를 선언하고,

@RequestMapping 을 통해 url이나 허용하는 mapping 정보를 설정 할 수 있다.

 

 

@Controller

@RequestMapping("/test")

public class TestController {

 

};

 

 

>>> 하위 항목 매핑

메쏘드별로 매핑 가능한데 형식은 동일하다.

/test/hello 를 매핑하기 위해서는..

 

@Controller

@RequestMapping("/test")

public class TestController {

   @RequestMapping("/hello")

   @ResponseBody

   public MyResultData hello( @RequestBody MyDataClass data ) {

       return MyResultData;

   }

}

 

위와 같이 @ResponseBody, @RequestBody 를 사용하면, 해당 body를 object 형태로

송수신 할 수 있다.

key, value 형태의 json이면, 위처럼 데이터 클래스로 주고 받을 수 있다.

 

> 세부적인 mapping

@RequestMapping("/hello", method=RequestMethod.POST, headers={"accept=application/json", "content-type=application/json" })

 

 

>>> Request 정보

 

@RequestMapping("/hello")

@ResponseBody

public String hello( HttpServletRequest req , @RequestBody MyData body ) {

   String ip = req.getRemoteAddr();

 

   return ip;

}

 

 

>>> Exception 처리 예

@ExceptionHandler(Exception.class)

@ResponseBody

public MyResult handlException( Exception e ) {

   if ( e instanceof EOFException )  {

     return new MyResult( 0 );

   } else if ( e instanceof HttpMessageNotReadableException ) {

     return new MyResult( 1 );

   } else {

     return new MyResult( 2 );

   }

}

 

>>> ModelAndView 

위의 경우 요청이 오면 해당 맵핑된 메쏘드에서 처리하고 필요한 데이터를 리턴하면 된다.

만약 별도의 view가 필요한 경우는 아래와 같이 처리한다.

 

리턴값이 ModelAndView 가 된다.

초기 config.xml에서 InternalResourceViewResolver 관련한

view 설정이 있는데, 해당 요청에 대해 설정된 "이름"을 매핑하여

전달하게 된다.

 

@ReqeustMapping("/hello")

public ModelAndView hollo( @RequestBody String body ) {

    return new ModelAndView("이름", MyData );

}

'프로그래밍 > Web' 카테고리의 다른 글

Gradle Wrapper  (0) 2017.03.06
스프링 요청/응답  (0) 2017.02.26
JPA 쿼리 이것저것  (0) 2017.02.22
[spring] 프로퍼티 값 읽기  (0) 2017.02.21
[spring] 핸들러 인터셉터  (0) 2017.01.24
[spring] Spring boot 기본 설정  (0) 2017.01.24
[spring] batch 작업관련 요소들  (0) 2012.09.28
[MyBatis] 기본 사용법  (0) 2012.05.13
톰캣  (0) 2012.05.10
[spring] dispatch servlet 기본  (0) 2011.05.13