initFilter = Logger 객체 생성(log4j.xml setting), contextPath
Handler Mapping = web.xml
Controller = MemberController.java
View Resolver = ServletContext.xml
Pom.xml = 라이브러리
Maven
버전 정보 및 라이브러리 정보들을 통합하여 관리하는 도구
프로젝트 관리, 버전정보, 라이브러리
+빌드 도구
+배포 도구
src/main/resources/log4j.xml
프로젝트 설정 자원(xml)
WEB-INF -> Spring(중요)폴더를 src/main/resources 자바쪽으로 이동
WAS가 실행(배포 시작)될 때 가장 처음으로 읽어들이는 문서
Web.xml(version 4.0 변경)
JAVA 대문자로 변경
classpath: 작성하기
filter 추가
classpath:spring/spring-security.xml 추가
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" 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 https://java.sun.com/xml/ns/javaee/web-app_4_0.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/root-context.xml
classpath:spring/spring-security.xml
</param-value>
</context-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/appServlet/servlet-context.xml</param-value>
</init-param>
<!-- 한글 깨짐 방지를 위한 Filter 추가 -->
<!-- 별도의 filter 클래스를 만들지 않고 스프링에서 제공하는 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>
<!-- lombok 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
라이브러리 태그 추가
WEB-INF -> lib 만들어서 taglibs 3개 라이브러리 추가
HomeController.java
home.jsp 삭제
webapp안에 community 적용해보기
자바 패키지명 edu.kh.comm.common.filter
클래스명 initFilter
슈퍼클래스 HttpFilter(위에)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private Logger logger = LoggerFactory.getLogger(initFilter.class);
package edu.kh.comm.common.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@WebFilter(filterName="initFilter", urlPatterns="/*")
public class initFilter extends HttpFilter implements Filter {
// print 구문 사용하다 걸리면 바보
// -> Logger 사용
// Logger 객체 생성 (해당 클래스에 대한 log를 출력하는 객체)
private Logger logger = LoggerFactory.getLogger(initFilter.class);
// 필터가 생성될 때 실행
public void init(FilterConfig fConfig) throws ServletException {
// logger를 이용해서 출력하는 방법
// trace - debug - info - warn - error
// debug : 개발의 흐름 파악 (이게 실행이 되었는지, 파라미터가 현재 무엇인지 확인할 때)
// info : 메소드 실행 파악
// 이필터가 생성이 되었다 라는 정보를 출력하고 싶다! info 가 제일 적절함.
logger.info("초기화 필터 생성");
}
// 필터가 파괴될 때 실행(서버는 켜져있는데 백엔드 코드가 수정되었을 때)
public void destroy() {
logger.info("초기화 필터 파괴");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// application 내장 객체 얻어오기
ServletContext application = request.getServletContext();
// 최상위 주소 얻어오기
String contextPath = ( (HttpServletRequest)request ).getContextPath();
// 다운캐스팅
// 세팅
application.setAttribute("contextPath", contextPath);
chain.doFilter(request, response);
}
}
src/main/resources 안에
파일에서
두번째 줄 주석처리
해당 부분때문에 에러가 날수도 있음 -> 기본으로 내장되어있는 log4j를 sts가 인식할수 없어서
원격에서 가지고 오겠다해서 원격 경로를 작성한 구문으로 수정!
<!-- <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> -->
아래 작성
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
기존 appender 부분을 아래로 대체
<!-- Appenders -->
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n" />
</layout>
</appender>
<!-- sql 로그 출력용 패턴 지정 -->
<appender name="sql-console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n" />
</layout>
</appender>
<!-- 날짜별 로그 파일 생성용 appender -->
<appender name="dailyRollingFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="C:\\workspace\\7_Framework\\comm\\logs\\runtime-log.log" />
<param name="encoding" value="UTF-8" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<!-- 이 패키지 이하에서 출력되는 로그들을 출력하겠다.
trace < debug < info < warn < error < fatal
-->
<logger name="edu.kh.comm">
<level value="debug" />
</logger>
<!-- info -> debug -->
<!-- SQL 로그 출력 -->
<logger name="java.sql.Connection">
<level value="debug" />
<appender-ref ref="sql-console" />
</logger>
<logger name="java.sql.Statement">
<level value="debug" />
<appender-ref ref="sql-console" />
</logger>
<logger name="java.sql.PreparedStatement">
<level value="debug" />
<appender-ref ref="sql-console" />
</logger>
<logger name="java.sql.ResultSet">
<level value="debug" />
<appender-ref ref="sql-console" />
</logger>
<logger name="jdbc.sqlonly" additivity="false">
<level value="INFO" />
<appender-ref ref="sql-console" />
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="INFO" />
<appender-ref ref="sql-console" />
</logger>