본문 바로가기

프로그래밍/Web

[spring] dispatch servlet 기본

스프링에서의 서블릿

 

* 서블릿 선언

서버 시작시 기동할 서블릿이 있으면 여기에 기술한다.

해당 서블릿은 HttpServlet 을 상속받아야 한다.

 

스프링의 경우 해당 매핑에 대해 DispatcherServlet이 관문 역할을 하게 된다.

DispatcherServlet이 컨트롤러를 찾아 요청하게되고, 결과를 받아 View를 검색해 클라이언트에게

전달하게된다.

 

<servlet>

   <servlet-name>이름</servlet-name>

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

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

</servlet>

<servlet-mapping>

   <servlet-name>이름</servlet-name>

   <url-patten>*.htm</url-pattern>

</servlet-mapping>

 

한글등의 처리를 위해서는 인코딩 필터를 추가

<filter>

   <filter-name>필터명</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>필터명</filter-name>

     <url-pattern>*.htm</url-pattern>

</filter-mapping>

 

DispatcherServlet은 실행되면서, 이름-servlet.xml 로드하게 된다.

물론 아래처럼 xml 지정할 수 있다.

<servlet>

   <servlet-name>이름</servlet-name>

   <servlet-class>...

   <init-param>

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

      <param-value>classpath:/spring/my-context.xml</param-value>

   </init-param>

    .

    .

</servlet>

 

 

* 빈

DispatcherServlet은 bean을 검색해 사용자의 요청 url에 해당하는 bean을 찾는다.

 

이름-servlet.xml

<beans>

   <bean name="test" class="com.test.MyController">

        <property name="val" value="myTest"/> 

        <constructor-arg>

            <ref bean="hello"/>

            <value>1</value>

            <value type="int">1</value>

        </constructor-arg>

   </bean>

</beans>

 

constructor-arg 는 생성자에 필요한 인수를 정의.

property 는 setter 로 프로퍼티 설정.

 

 

해당 bean이 검색되면 지정된 클래스(컨트롤러)의 handleRequest() 메쏘드를

호출하게 된다.

 

public class MyController implements Controller {

     String val;

     public ModelAndView handleRequest( HttpServletRequest req, HttpServletResponse res)

trows ServletException, IOException {

    return new ModelAndView("test.jsp");

    }

 

    public void setVal( String val ) {

        this.val = val;

    }

}

 

ApplicationListener 같은 녀석을 상속받으면, 시스템 시작시 해당 메쏘드들 호출 시킬 수도 있다.

 

 

 

* 뷰(test.jsp)

대강 hello world 작성 -_-;;

 

 

 

 

* 기타

 

위의 요소들은 어노테이션을 사용해 보다 간단히 표현이 가능하다

@Component

@Controller

@Service

@Repository

 

 

예를 들어 위에 작성된 컨트롤러를 어노테이션 형태로 변경하면..

 

@Controller

public class MyController {

   @RequestMapping("/test.htm")

   public ModelAndView helloWorld() {

       return new ModelAndView("test.jsp");

   }

 

   @PostConstruct

   // 초기화 메쏘드

 

   @PreDestroy

   // 정리 메쏘드

   

}

 

dispatcher 관련 xml에서 위 클래스드를 검색할 수 있도록 설정해야 한다.

별다른 bean없이 어노테이션을 자동 검색해 등록

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

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context 

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

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

 

<mvc:annotation-driven />

<context:annotation-config />

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

 

</beans>

 

위의 세줄이 xml에 bean 설정 없이 패키지내의 클래스 중 annotation을 참조해

bean을 생성하게 된다.

 

스프링은 그냥 재미삼아 보기엔 양이 너무 많고..

어노테이션은 간결하지만, 

 

아무튼 그냥 정리만 해도... 잠이 쏟아진다.. 




'프로그래밍 > 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
[spring] JAVA코드 테스트를 위한 Spring설정  (0) 2012.09.25
[MyBatis] 기본 사용법  (0) 2012.05.13
톰캣  (0) 2012.05.10