티스토리 뷰
더 괜찮은 방법이 있어서 아래의 글보다는 이 글을 참조하길 바란다.
기존의 프로젝트를 springboot 전환 과정에서, 모든 jsp에서 include하고 있는 공통 jsp 파일에 대해 전환하는 부분을 찾기 힘들었다. stackoverflow 같은곳에서 도움을 얻고자 열심히 찾아보았지만 jsp 자체가 springboot 표준이 아니다 보니 단서를 찾기가 쉽지 않았다. 그나마 나온 내용은 SpringBootServletInitializer를 구현하여 JspConfigDescriptor 를 통해 하는 방법이었는데 막상 해보니 이해하지 못할 내장 tomcat의 버전 이슈로 동작을 하지 않았다. 수정 : (springboot version을 2.1.15로 올리고 그에 따라 tomcat의 version이 8.5로 변경이 되니 잘 된다. )이에 대해서 구현해본 내용은 대략 다음과 같다.
JspConfigDescriptor.java
public class CustomJspConfigDescriptor implements JspConfigDescriptor {
private Collection<JspPropertyGroupDescriptor> jspPropertyGroups = new LinkedHashSet<JspPropertyGroupDescriptor>();
private Collection<TaglibDescriptor> taglibs = new HashSet<TaglibDescriptor>();
@Override
public Collection<JspPropertyGroupDescriptor> getJspPropertyGroups() {
JspPropertyGroup newJspPropertyGroup = new JspPropertyGroup();
newJspPropertyGroup.addUrlPattern("*.jsp");
newJspPropertyGroup.setPageEncoding("UTF-8");
newJspPropertyGroup.setScriptingInvalid("false");
newJspPropertyGroup.addIncludePrelude("/WEB-INF/jsp/common/common.jsp");
JspPropertyGroupDescriptorImpl jspDescriptor = new JspPropertyGroupDescriptorImpl(newJspPropertyGroup);
jspPropertyGroups.add(jspDescriptor);
return jspPropertyGroups;
}
@Override
public Collection<TaglibDescriptor> getTaglibs() {
return taglibs;
}
}
Application.java
@SpringBootApplication
@EnableAutoConfiguration
@EnableWebSecurity
public class Application extends SpringBootServletInitializer{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext.getJspConfigDescriptor().getJspPropertyGroups().addAll(
(new CustomJspConfigDescriptor()).getJspPropertyGroups());
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
위의 내용은 삽질했는데 안되서 억울해서 한번 올려봤다.. 나중에 문제점에 대한 해결책을 찾으면 수정을 해서 반영해서 변경해야겠다. 문제점을 찾았기에 수정한다. (springboot 버전 문제)
두번째 방법은 web.xml 파일을 사용하는 것이다.(?) sprinboot로 전환하면서 web.xml 을 다 걷어내고 java config 기반으로 변환을 하는데 이 무슨..? 하지만 위의 방법이 안되고 그렇다고 마땅한 방법이 있는것도 아니고.. 그렇다고 모든 jsp 페이지에 include 를 해줄수는 없는 노릇이니.. springboot를 사용한다고 해서 꼭 web.xml 을 없애야만 하는것은 아니다. 그냥 변환 못하겠는것들이 있으면 그냥 써도 된다. 다른건 전환을 완료 했으므로 web.xml 은 다음과 같은 모습이 된다.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd"
version="3.0">
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude>/WEB-INF/jsp/common/common.jsp</include-prelude>
</jsp-property-group>
</jsp-config>
</web-app>
다른건 다 날리고 이부분만 살려 놓는다. 문제 될것은 없다. 위 코드의 내용은 모든 jsp 파일에 /WEB-INF/jsp/common/common.jsp 파일을 include 하겠다는 내용이다. 공통적으로 사용하는 tag나 encoding 정의 등등의 내용을 이곳에 넣어두면 다른곳에서 자동으로 include 되니 편하다.
common.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
이런 내용들이 모든 jsp에 들어가게 된다.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot 2.x migration 시 ObjectPostProcessor not found 대처방법 (0) | 2020.06.26 |
---|---|
Spring Transaction 오류시 체크사항 (0) | 2020.06.24 |
springboot Banner 설정 및 Banner 생성 사이트 추천 (0) | 2020.06.17 |
Spring Transaction Propagation을 예제를 통해 알아보자 (1) | 2020.05.21 |
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (5) - 빌드 및 실행 (0) | 2020.05.15 |