'서블릿 설정'에 해당되는 글 2건

  1. 2017.02.15 :: 스프링 프로젝트-스프링 환경설정
  2. 2017.02.08 :: 스프링 프로젝트-프로젝트 생성
프로그래밍 2017. 2. 15. 00:07

스프링 환경설정


바로 코딩을 시작할 줄 알았는데...

또 환경설정을 해야되냐구요?

지금까지는 개발을 위한 환경구성에 초점이 맞춰졌다면, 이제는 웹과 스프링 프레임워크 사용을 위한 기본 설정파일에 대한 설정과 설명을 하고 개발로 넘어가야 할 것 같아서... 몇 가지 준비했습니다.


web.xml [배포 서술자 : (DD, Deployment Descriptor)]

웹 애플리케이션의 기본적인 설정을 기술하는 파일입니다.

기본적인 설정이라 함은 filter, listener, servlet, session 등을 설정하는 것입니다.


web.xml 설정과 설명


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 
    <!-- 웹 애플리케이션 이름 정의 -->
    <display-name>myapp</display-name>
    
    <!-- filter 설정 추가 -->
    <!-- filter : Client와 Servlet Containder 사이에서 HTTP 요청/응답을 변경할 수 있는 재사용 코드 -->
    <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>
    
    <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <!-- ContextLoaderListener가 사용할 설정파일 위치 변경 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>
    
    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <!-- listener 설정 -->
    <!-- listener : 루트 웹 애플리케이션 컨텍스트를 등록할 때 사용
                    웹 애플리케이션의 시작과 종료 시 발생하는 이벤트를 처리하는 listener인
                    ServletContextListener를 구현한 ContextLoaderListener가 웹 애플리케이션이
                    시작될 때 root application context를 생성 및 초기화하고,
                    웹 애플리케이션이 종료될 때 context를 종료하는 기능을 담당한다.  -->
                    
    <!-- 별다른 설정을 하지 않고 아래처럼 listener를 정의하면 /WEB-INF/applicationContext.xml 파일을
         디폴트 설정파일로 사용한다.
         설정파일의 위치는 <context-param> 항목을 이용해 변경할 수 있다.
         위의 <context-param> 항목을 참조!  -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
 
    <!-- Processes application requests -->
    <!-- 서블릿 설정과 서블릿 애플리케이션 컨텍스트 등록 -->
    <!-- DispatcherServlet이 초기화될 때 자신만의 컨텍스트를 생성 및 초기화한다.
         그리고 웹 애플리케이션 레벨에 등록된 루트 웹 애플리케이션 컨텍스트를 찾아서
         자신의 부모 컨텍스트로 사용한다. -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- DispatcherServlet의 컨텍스트에 대한 디폴트 설정을 변경하고 싶다면
             아래와 같이 contextConfigLocation을 정의하여 경로를 설정하면 된다. -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
        
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
</web-app>
 
cs



servelt-context.xml 설정과 설명(child context)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 
    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
    
    <!-- Enables the Spring MVC @Controller programming model -->
     
     <!-- 
     1. RequestMappingHandlerMapping bean등록(기존 DefaultAnnotationHandlerMapping)
     2. RequestMappingHandlerAdapter bean등록(기존 AnnotationMethodHandlerAdapter) : customArgumentResolvers, customReturnValueHandlers 추가 가능
     3. JSR-303의 검증용 어노테이션(@Valid)를 사용할 수 있도록 LocalValidatorFactoryBean bean설정 (JSR-303지원 라이브러리 존재 시)
     4. RequestMappingHandlerAdapter의 messageConverters프로퍼티로 메시지 컨버터들 등록
     주의사항
     <mvc:annotation-driven>을 사용할 때는 직접 RequestMappingHandlerAdapter를 등록해주어서는 안되며 직접 등록이 필요한 경우에는 
     <mvc:annotation-driven>을 설정하지 않고 각각의 필요한 설정을 수동으로 해주어야 한다.
     -->
     <annotation-driven />
    
    <!-- @Controller, @Repository, @Service, @Component 스트레오타입 어노테이션이 선언된 클래스를 빈으로 등록한다. -->
     <context:component-scan base-package="com.devdic.board"/>
 
 
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />
 
    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <!-- 
    InternalResourceViewResolver는 웹 어플리케이션 컨텍스트에 존재하는 템플릿에게 랜더링에 대한 책임을 위임하는
    View 객체를 논리적인 View 이름을 사용하여 결정한다.
    View 객체는 기본적으로 InternalResourceViewResolver이며, 이 객체는 실제 랜더링을 수행할 JSP에 단순히 요청을 전달하는 일을 한다.
    만약 JSTL 태그를 사용한다면 viewClass 특성을 설정함으로써 InternalResourceView를 JstlView로 대체하여 JstlView 요청을 JSP에 전달한다.
     -->
    <beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    
    <!-- JSP파일 경로와 접미어 설정 -->
    <beans:property name="prefix" value="/WEB-INF/views/"/>
    <beans:property name="suffix" value=".jsp" />
    </beans:bean>
    
</beans:beans>
 
cs


root-context.xml 설정과 설명(parent context)

<context~> 항목을 사용하기 위해 네임스페이스를 추가하셔야 합니다.

아래코드에서 굵은 글씨로 된 부분을 추가하시면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    <!--  
        @Service, @Repository 스트레오타입 어노테이션이 선언된 클래스를 빈으로 등록한다.
    -->
     <context:component-scan base-package="com.devdic.board">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    
    <context:annotation-config/>
    
</beans>
cs


기본적인 설정은 어느정도 된것 같습니다.

DB연결을 위한 datasource, JDBC를 좀 더 쉽게 사용하기 위한 Mybatis연동, 논리적 작업단위의 Transaction 설정 등 몇가지가 남았지만...

잠시 뒤로 미루어두고 공지사항 등록 화면을 만들어보죠~~~

 

posted by 생각퍼즐
:
프로그래밍 2017. 2. 8. 00:50

게시판 만들기 - 스프링 프로젝트 생성


스프링 프로젝트 생성

이클립스 화면 왼쪽의 Project Explorer 창에서 마우스 오른쪽 버튼 클릭 --> New --> Project --> Spring --> Spring Legacy Project 선택 --> [Next] 버튼 클릭



Project name(myapp)을 입력하고, Templates를 "Spring MVC Project"로 선택 후 [Next] 버튼 클릭



Spring MVC Project에 필요한 것을 다운로드 할거냐? 라고 묻고있네요!

당연히 "Yes"를 선택합니다.



Top-Level package name을 입력하라고 하네요...

저는 아래와 같이 입력했습니다.(com.devdic.board)



이클립스가 프로젝트를 잘 만들고 있게죠? 믿고 기다리면 아래와 같은 웹 애플리케이션 구조를 가진 프로젝트가 하나 만들어지면 성공입니다^^



그리고 Local Repository로 설정한 경로에 스프링 프로젝트를 위한 각종 라이브러리가 다운로드 된것을 확인할 수 있습니다.



이제 Hello World 화면을 보기위한 마지막 단계인 Server를 추가해볼게요!


이클립스 화면 아래쪽에 보시면 아래 그림과 같은 여러개의 탭이 보일겁니다.

여러개의 탭중에 [Servers] 탭을 선택하시고, 아래의 create a new server...를 클릭하세요!



다음 그림과 같은 Tomcat 버전을 선택할 수 있는 창이 띄워집니다.

그러면 자신이 설치한 Tomcat 버전을 선택(저는 Tomcat v8.0을 선택)

그리고 [Next] 버튼을 클릭!



현재 생성된 웹 애플리케이션 목록이 왼쪽(Available)에 표시가 될겁니다.

tomcat에 추가할 웹 애플리케이션을 선택한 후 [Add] 버튼 클릭하면...

선택한 웹 애플리케이션이 오른쪽(Configured)으로 이동이 됩니다.

그리고 나서 역시 [Finish] 버튼을 클릭하면 tomcat(Web Server + WAS) 생성 및 웹 애플리케이션 추가가 완료됩니다.



Hellow World 화면을 만나기 전에 마직마으로 하나만 점검하고 넘어가죠~~


server.xml의 Context 설정과 web.xml의 Servlet 설정을 확인해야지만 어떤 URL로 호출하면 "Hello World" 화면을 만날 수 있는 지 알수가 있습니다.


1
2
<Context docBase="myapp" path="/board" reloadable="true" source="org.eclipse.jst.jee.server:myapp"/>
 
cs

[server.xml]


그리고 myapp 프로젝트 하위에 src > main >webapp > WEB-INF > web.xml의 Servlet 설정을 확인해보죠!


서블릿에 설정에 대한 설명을 [웹 환경의 이해1][웹 환경의 이해2]를 참고하세요!

여기서 확인할 내용은 <url-pattern> 부분입니다.

url-pattern의 설정은 여러가지 방법으로 할 수 있는데요..

확장자로 매핑하는 [*.do(확장자 지정)]  또는 모든 URL을 매핑하는[/*] 등의 패턴으로 설정할 수 있습니다.

여기서는 스프링 프로젝트를 생성하면 default로 설정된 [/]로 일단 처리하겠습니다.

 

"/"의 의미는 default servlet으로 처리된다는 말이다. 즉, tomcat에 미리 정의된 servlet mapping(*.jsp 및 *.jspx)을 통과한 URL을 처리하게 된다. 하지만, 스프링의 DispatcherServlet을 사용하면 정적 리소스 즉, jpg, png 등의 URL 호출 시 404 에러가 발생합니다. <mvc:default-servlet-handler /> 설정으로 해결하면 됩니다. 


일단 여기까지만 알고 빨리 Hello World 화면을 만나러 가죠~~~


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
        
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
cs


스프링 프로젝트 생성 시 기본으로 생성된 HomeController의 내용입니다.

확인할 부분은 @RequestMapping(요청URL과의 매핑) 부분입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Controller
public class HomeController {
    
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    
    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
        
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        
        String formattedDate = dateFormat.format(date);
        
        model.addAttribute("serverTime", formattedDate );
        
        return "home";
    }
}
 
cs


위의 내용들을 종합해보면...

http://[IP Address][:PORT]/board로 시작되는 요청 URL은 myapp 웹 애플리케이션에서 처리하며, 요청을 처리하기 위한 Servlet을 찾기 위해 web.xml의 서블릿 설정을 확인 후 DispatcherServlet으로 요청정보를 전달하고 DispatcherServlet은 요청 URL과 매핑되는 Controller를 찾아 해당 메서드를 수행한다.


이클립스 화면 아래쪽에 추가된 tomcat 서버 마우스 우클릭하시면 아래와 같은 메뉴 창이 띄워집니다. 그러면 묻지도 말고 start 클릭!!!



서버가 start가 오류없이 성공했으면, 웹 브라우저를 열고 주소창에...

http://localhost:8080/board라고 치면 보고자 했던 Hello World 화면이 보여집니다.



이제 드디어 게시판(공지사항)을 만들 수 있는 준비는 완료되었습니다.


다음 시간부터는 본격적인 개발(코딩)을 시작하겠습니다.

posted by 생각퍼즐
: