2015. 4. 22. 10:32ㆍJAVA/Spring(eGovFrame)
WebInitializer.java 파일은 web.xml 파일을 대체하는 파일입니다.
기본적으로 사용하는 web.xml을 먼저 설명 후 현재 사용하고 있는 내용을 설명합니다.
WebInitializer.java
전체코드
package com.intercast.web.initializer;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.DispatcherServlet;
import com.intercast.web.config.RootConfig;
import com.intercast.web.config.WebMVCConfig;
public class WebInitializer implements WebApplicationInitializer {
private static final String CONFIG_LOCATION = "com.intercast.web.config";
private static final String MAPPING_URL = "/";
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
registerDispatcherServlet(servletContext);
registerCharacterEncodingFilter(servletContext);
}
private void registerCharacterEncodingFilter(ServletContext servletContext) {
FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("characterEncodingFilter", new CharacterEncodingFilter());
characterEncodingFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
characterEncodingFilter.setInitParameter("encoding", "UTF-8");
characterEncodingFilter.setInitParameter("forceEncoding", "true");
}
private void registerDispatcherServlet(ServletContext servletContext) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setDisplayName("Intercast");
context.setConfigLocation(CONFIG_LOCATION);
servletContext.addListener(new ContextLoaderListener(rootContext));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(MAPPING_URL);
}
}
위의 소스를 보면 빠르신 분들은 우리가 보통 사용하는 web.xml을 어떻게 사용하였는지 대략 이해는 가실겁니다.
XML과 비교하여 보면
EncodingFilter 설정입니다.
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
private void registerCharacterEncodingFilter(ServletContext servletContext) {
FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("characterEncodingFilter", new CharacterEncodingFilter());
characterEncodingFilter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
characterEncodingFilter.setInitParameter("encoding", "UTF-8");
characterEncodingFilter.setInitParameter("forceEncoding", "true");
}
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/config/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
private void registerDispatcherServlet(ServletContext servletContext) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setDisplayName("Intercast");
context.setConfigLocation(CONFIG_LOCATION);
servletContext.addListener(new ContextLoaderListener(rootContext));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(MAPPING_URL);
}
주의 깊게 볼것은 "context.setConfigLocation(CONFIG_LOCATION);" 부분인데 해당 부분에 Config 설정 파일이 있다고 알려 주게 됩니다.
그러면 해당 파일들을 확인하여 자동 설정으로 들어가게 되죠..^^
별도의 설명이 없어도 소스를 보면 이해가 가실거라 생각하여 설명하진 않도록 하겠습니다.
하지만 JavaConfig 설에서 보면 SpringSecurityFilterChain 설정이 빠져 있습니다.
이유인 즉슨 나중에 설명을 드리겠지만 해당 파일에서 설정하는 것이 아니라
AbstractSecurityWebApplicationInitializer.java
파일을 확장해 주므로 주므로 해당 FilterChain 설정은 끝나게 됩니다.
하지만 저 같은 경우 Custom Taglib를 사용해야 하는데 아직 web.xml에서 <jsp-config> 설정하는 방법을 찾지 못하여 WebInitializer.java 파일은 사용하지 못하고 web.xml을 사용하고 있습니다.
Tomcat 8 부터는 가능한듯한데 Tomcat 7에서는 아직 찾지를 못하였습니다.
아래는 Tocmat 8 에서 작동한다는 소스 부분코드 입니다.
JspConfigDescriptor j = new JspConfigDescriptor()
{
@Override
public Collection<TaglibDescriptor> getTaglibs()
{
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<JspPropertyGroupDescriptor> getJspPropertyGroups()
{
Collection<JspPropertyGroupDescriptor> c = new ArrayList<JspPropertyGroupDescriptor>();
JspPropertyGroupDescriptorImpl pgDescriptor = new JspPropertyGroupDescriptorImpl();
pgDescriptor.setIsXml(Boolean.TRUE.toString());
pgDescriptor.getUrlPattern().add("/js/generated/*");
pgDescriptor.setElIgnored(Boolean.FALSE.toString());
pgDescriptor.setPageEncoding("UTF-8");
c.add(pgDescriptor);
return null;
}
};
servletContext.setJspConfigDescriptor(j);
위의 코드를 보면 servletContext.setJspConfigDescriptor(j); 라는 메소드가 있는데 저 메소드가 Tomcat7에는 없고 Tomcat 8에만 있습니다..ㅡㅜ
그래서 결론적으로 내가 사용하는 web.xml은
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace"
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_3_0.xsd "><context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param><context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.intercast.web.config.AppConfig</param-value>
</context-param><listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping><filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping><jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tags/menu</taglib-uri>
<taglib-location>/WEB-INF/tags/menu.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tags/cf</taglib-uri>
<taglib-location>/WEB-INF/tags/cf.tld</taglib-location>
</taglib>
</jsp-config></web-app>
기존 web.xml과 비슷할 겁니다.
하지만 붉은 색으로 된 부분이 기존 web.xml에 없었던 부분이죠.
org.springframework.web.context.support.AnnotationConfigWebApplicationContext 를 사용하여
contextConfigLocation으로 설정된 해당 소스를 호출하여 Config를 설정하는 듯합니다..ㅡㅡ
더 분석을 해봐야 할듯합니다..ㅋㅋㅋ
혹시나 Tomcat 7에서도 Custom Taglib를 사용할 수 있으신 분은 답글 남겨주시면 감사하겠습니다...^^
그럼 다음으로~~~~~
'JAVA > Spring(eGovFrame)' 카테고리의 다른 글
Spring4 JavaConfig 설정 - CommonConfig.java (0) | 2015.04.23 |
---|---|
Spring4 JavaConfig 설정 - WebMvcConfig.java (3) | 2015.04.23 |
Spring4 JavaConfig 설정 - 환경설정 (0) | 2015.04.22 |
Spring4 JavaConfig 설정 - 폴더 구조 (0) | 2015.04.22 |
SPRING 4에서 @ResponseBody 사용 오류 발생 해결 방법 (0) | 2015.04.15 |