른록노트
[NetBeans로 Spring MVC 게시판 만들기] 2. 프로젝트 환경 구성(#2) 본문
안녕하세요 른록입니다.
이제 스프링이 시작되는 순서를 알아보고
필요한 설정들을 해보아요~
테이블도 등록해야 하니 Mysql을 미리 준비해 주세요
[계획]
1. 소개(개념)
-2. Web.xml과 ApplicationContext,dispatcher_servlet.xml
-. Mybatis(Mysql)
-. Log4j
3. 프로젝트 진행
-1. 게시판 리스트 보기
-2. 게시판 글 작성
-. HandlerMethodArgumentResolver
-3. 게시판 글 상세 조회
-4. 게시판 글 수정
-5. 게시판 글 삭제
[NetBeans로 Spring MVC 게시판 만들기] 2. 프로젝트 환경 구성(#2)
-2. Web.xml과 ApplicationContext,dispatcher_servlet.xml
지금 설명해드릴 부분은 스프링의 시작순서입니다.
프로젝트가 실행되면 web.xml이 제일 먼저 읽혀집니다.
그리고 web.xml에 작성된 코드대로 동작합니다.
1) Web.xml
주석을 통해 간단한 코드 설명을 하겠습니다.
(주석 단축키는 Ctrl+Shift+C 입니다.)
(+참고로 줄 자동정렬 단축키는 Alt+Shift+f, 자동 import는 Ctrl+Shift+i 입니다.)
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 | <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <context-param> <!--프로젝트를 실행했을때 가장먼저 실행하는 Context입니다.--> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 이 녀석이 총괄책임자라고 할 수 있는 dispatcher 녀석입니다. 아래 url-pattern에 부합하는 요청은 모두 이녀석이 관리한다라는 뜻 입니다.--> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> session은 서버와 클라이언트 사이의 연결을 말합니다. <session-config> <session-timeout> 30 </session-timeout> </session-config> <!--프로젝스 시작시 열리는 페이지--> <welcome-file-list> <welcome-file>redirect.jsp</welcome-file> </welcome-file-list> </web-app> | cs |
이제 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 | <?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!--utf-8 문자를 읽기위해 필터를 추가한 것입니다.--> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--ContextLoaderListener 사용으로 제일 첫 실행 Context 설정--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--dispatcher-servlet이름을 appServlet으로 명명해주고 dispatcherServlet라고 선언--> <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/dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!--url패턴을 /로 하여 모든 요청을 다 appServlet이 받게 끔 하였습니다.--> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> | cs |
즉 프로젝트가 시작되면 Web.xml -> applicationContext.xml ->
dispatcher-servlet.xml이 실행됩니다.
중요한 부분은 <url-pattern>/</url-pattern> "/" context의 이하 모든 요청은 다
appServlet(즉 dispatcher-servlet)으로 가게 설정해 놨습니다.
(context-path는 META-INF -> context.xml에서 설정할 수 있습니다.)
2) applicationContext.xml
(이클립스에선 root-context 이렇게 생성됩니다. 솔직히 이름은 마음대로 하신후
설정만 제대로 해주시면 됩니다. 그래도 다른사람들을 위해 맞춰주셔야 합니다.)
beans태그로 이루어진 xml파일입니다.
제일 윗줄에 <beans xmlns="http://www.springframework.org/schema/beans"
여기에 url 제일 마지막 /beans에 주목하셔야 합니다.
이 얘긴 즉, beans 를 네임스페이스로 사용한다는 얘깁니다.
즉 무슨얘기냐 만약
<beans xmlns="http://www.springframework.org/schema/beans" 로 맨 윗줄에 정의되어 있으면 기본 namespace를 beans로 사용하겠다는 것이기 때문에 beans에 속하는 것들은 앞에 명시를 하지 않아도 됩니다. 하지만
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 로 시작할경우 기본 namespace를 mvc로 사용하겠다고 정의하기때문에 이럴 경우 beans에 속하는 것은 <beans: 로 시작하는 식으로 명시해줘야 합니다.
(참고:beans:bean과 beans의 차이 https://okky.kr/article/240080)
다음 아래를 보시면 DB 정보를 입력하는 부분이 주석처리 되어 있습니다.
저희는 Mysql를 사용하겠습니다. DB생성부분은 나중에 포스팅 하도록하겠습니다. 우선 스프링을 중심으로 포스팅 하기때문에 다 준비됐다 생각하고 Table을 하나 생성하겠습니다.(저도 학교에서 oracle을 써서 mysql은 저도 배워가고있습니다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE TABLE TB_BOARD ( board_num int(5) unsigned not null auto_increment, parent_num int(5) unsigned not null, title varchar(100) not null, contents varchar(4000) not null, hit_cnt int(5) unsigned not null, del_gb varchar(1) default 'N' not null, crea_date timestamp not null default CURRENT_TIMESTAMP, crea_id varchar(30) not null, PRIMARY KEY (board_num) )charset=utf8; | cs |
테이블을 생성해주셨으면 다시 applicationContext로 돌아가서
DB를 설정하겠습니다.
1) WEB-INF에 마우스 오른쪽 버튼 클릭후 등록 정보 파일을 생성해 주세요
2) 자신의 db정보를 입력해 주세요
3) 주석을 해제해 주시면 property를 사용할 수 있습니다.
이제 여기서부턴 log4j에 대해 배울것입니다.
log4j라이브러리는 sql처리시 쿼리와 결과등을 console로 바로 볼 수 있는 라이브러리입니다. Eclipse에서는 자동으로 파일이 생성되지만 Netbeans에선 따로 설정을 해줘야 합니다. 라이브러리는 이미 pom에 등록해 놓았고 이제 차근차근 따라해주시기 바랍니다.
1) 다른소스 resources에 생성해 주셔야합니다. 꼭 입니다~
2) 일므도 log4j.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 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- Appenders --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %5p [%c] %m%n" /> </layout> </appender> <appender name="console-infolog" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %5p %m%n" /> </layout> </appender> <!-- Application Loggers --> <logger name="com" additivity="false"> <level value="debug" /> <appender-ref ref="console"/> </logger> <!-- Query Loggers --> <logger name="jdbc.sqlonly" additivity="false"> <level value="INFO"/> <appender-ref ref="console"/> </logger> <logger name="jdbc.resultsettable" additivity="false"> <level value="INFO"/> <appender-ref ref="console"/> </logger> <!-- Root Logger --> <root> <priority value="off"/> <appender-ref ref="console" /> </root> </log4j:configuration> | cs |
간단히 설명해드리겠습니다. Appender는 로그를 보여주는곳
그리고 logger들은 어떤 로그를 보여줄건지 설정해주는겁니다.
<!-- Application Loggers --> 아래에 등록된 logger는 이제
url이 들어올 때 그걸 캐치해서 보여주는 역할을 할겁니다.
여기서 <logger name=" " > <-- 이 name 부분에는 해당프로젝트의 상위 패키지를 적어주시면 그 부분을 인식합니다 (저는 이 부분을 몰라서 왜 안뜨지하고 고생했습니다)
Query Logger는 말그대로 SQL문을 사용할 때 로그가 찍히게 끔 설정 해주었습니다.
이제 Query Logger를 사용하기위해 아까 applicationContext로 돌아가서 설정해 주겠습니다. 아래의 코드를 복붙해 주시면 됩니다.
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 | <?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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="/WEB-INF/jdbc.properties" /> <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"/>--> <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource"> <constructor-arg ref="dataSourceSpied" /> <property name="logFormatter"> <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter"> <property name="loggingType" value="MULTI_LINE" /> <property name="sqlPrefix" value="SQL : "/> </bean> </property> </bean> </beans> | cs |
dataSource에 log를 설정한 걸 보실 수 있습니다.
<--------------------------------------------------------------------------------------->
- 프로젝트 환경 구성은 할게 많기 때문에 글이 너무 길어지게 되었습니다.
다음 포스트에서 이어서 Application log설정 부터 진행하겠습니다.
(처음 포스팅을 해보는데 한 포스팅 하는데 시간이 엄청 소비되네요, 그리고 제가 필력이 딸려서 읽으시는데 불편하실까 염려되네요 아무튼 감사합니다~)