오늘은 backend 보다는 frontend 작업을 위한 Bootstrap 추가를 webjar를 이용할 수 있도록 설정해보도록 할 예정입니다.
저는 backend 개발자다보니 front쪽은 자세히 알려드리기는 힘들지만 빠르게 서치해서 사용해본 경험상 webjar는 maven 의존성 관리를 통해 라이브러리를 다운받아 사용할 수 있어 매우 쉽게 라이브러리 추가가 가능합니다. org.webjars에는 bootstrap, jquery, font-awesome, swagger-ui 뿐만 아니라 angularJS, momentJS, d3js 등 매우 많은 프론트 개발을 위한 라이브러리들을 제공하고 있습니다. 매번 다운로드받아서 프로젝트에 추가할 필요 없이 백엔드 라이브러리들을 관리하듯이 메이븐 의존성으로 쉽게 관리할 수 있도록 도와주는 역할을 한다고 보시면 됩니다.
우선 지난시간에 했던 Eclipse + SpringBoot + JSP 개발환경 세팅하기 1탄 을 완성하셨던 분들을 기준으로 설명을 할 예정이니 해당 포스팅을 안보신 분들은 한번 쭈욱~ 훑어보시고 다시 오시기 바랍니다.
webjar 설정을 위해서 추가할 파일은 딱 하나입니다. org.springframework.web.servlet.config.annotation.WebMvcConfigurer를 구현하는 WebMVCConfig 클래스를 하나 생성하고 다음과 같이 addResourceHandlers 메서드를 오버라이드하여 작성해줍니다.
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**").addResourceLocations(
new String[] {"classpath:/static/script", "classpath:/static/style"});
}
}
우선 webjars 경로를 등록해주는 것 때문에 이 클래스를 만들어 사용하는데 이때 @EnableWebMvc 어노테이션을 사용하게 됩니다. 그런데 여기서 주의할 점이 이 어노테이션을 사용하게되면 WebMvcAutoConfiguration 이 disable되면서 기존 설정들이 정상적으로 동작하지 않게 됩니다. 따라서 기존에 잘 읽어오던 static하위의 javascript파일들과 css파일들을 못찾아 404 오류가 발생하게 되죠. 그래서 addResourceHandlers에 이 두 파일들이 존재하는 디렉토리를 classpath경로로 추가해줘야 합니다.
또한, application.properties 파일에 작성하였던 아래 두 라인은 더이상 사용하지 않고 방금 추가한 WebMVCConfig 클래스에 별도로 ViewResolver를 등록하여 사용해야합니다.
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
아래는 완성된 WebMVCConfig 클래스의 코드입니다.
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
public class WebMVCConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**").addResourceLocations(
new String[] {"classpath:/static/script", "classpath:/static/style"});
}
}
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
자, 모든 준비는 완료가 되었습니다. 이제 pom.xml에 다음과 같이 부트스트랩 의존성을 추가해줍니다.
<!-- Bootstrap CSS -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.5.0</version>
</dependency>
그리고 test.jsp 파일을 열어 아래와 같이 부트스트랩을 링크걸어줍니다.
<link rel="stylesheet" href="/webjars/bootstrap/4.5.0/css/bootstrap.min.css" />
만약 부트스트랩이 아닌 jQuery와 같은 javascript 라이브러리를 사용하고자 할 경우 의존성 추가는 동일하게, jsp파일에 링크를 걸어줄 때에는 아래와 같은 형태로 해주시면 됩니다.
<script src="/webjars/jqeury/3.5.1/js/jqeury.min.js"></script>
자, 여기까지 완료되면 모든 준비는 끝난것입니다. 이제 부트스트랩에서 제공하는 기능을 마음껏 사용하시면 됩니다.
저는 지난 시간에 최종결과물에서 버튼을 하나 추가해보는 정도로 이번 포스팅을 마치겠습니다.
test.jsp의 body에 다음 한 줄을 추가했습니다.
<button type="button" class="btn btn-danger btn-lg">버튼</button>
그리고 결과를 확인해보면 아래와 같이 빨간색 버튼이 추가된 것을 확인할 수 있습니다.
이상으로 Eclipse + SpringBoot + JSP 개발환경 세팅하기 2탄 포스팅을 마칩니다.
오늘도 즐겁고 행복한 코딩을 하는 케이치였습니다~
[HTML] <fieldset> 태그 (0) | 2020.11.20 |
---|---|
[Java] 30분완성 연락처 관리 프로그램 만들기 (0) | 2020.08.02 |
Eclipse + SpringBoot + JSP 개발환경 세팅하기 #1 (3) | 2020.07.22 |
[MySQL] 데몬프로세스가 자꾸 자동으로 실행되요 (0) | 2020.07.05 |
[MySQL] auto_increment 컬럼 값은 언제 증가할까 (0) | 2020.07.02 |
1. 개요
Cass Loader 란 abstrace class로써 Bytecode를 읽어 들여서 class 객체를 생성하는
역활을 담당한다.
Class Loader가 Class를 Loading하는 시점은 ComplieTime이 아닌 Run Time에 Loading이 된다.
프로그래머 가 SampleTest aaa = new SampleTest(); 라는 코드를 처음 실행하면
JVM은 SampleTest라는 Class를 Class Loader를 통해서 SampleTest.clas의 ByteCode를
최초로 메모리에 Load하게 된다.
2. ClassLoader 기술적 특징
- Hierarchical
Class Loader는 Hierarchical 하게 생성이 가능하고, Parent class laoder에서, child class loader를
갖는것과 같이 Class Loader간의 계층형 구조를 갖게 된다. 최상위 Class Loader는
"bootstrap" Class Loader가 위치 하게 된다.
- Delegate load request
Class loading에는 일정한 규칙이 필요하다. 이는 Class Loader가 계측형의 구조를 가지고
있기 때문에, 어느 시점에 Class 로딩 요청을 받으면 상위 Class Loader가 Loding한 Class가
우선권을 가진다.
- Have visibility constraint
Child Class Loader는 Parent Class Loader의 Clss를 찾을수 있지만, 그 반대의 경우는 불가능하다.
- Cannot unload classes
Class Loader에 의해서 Loading된 Class들은 unload 될수가 없다.
3. Class Loader 위임
-
출처 : http://liebus.tistory.com/30
프로젝트 현재 경로 얻기 ( Getting current working directory ) (0) | 2016.06.15 |
---|---|
자바 객체를 byte[] 로 변환하기 (0) | 2015.08.08 |
[ Java / 자바 ] 시스템 독립적인 라인 구분자 (0) | 2015.04.27 |
[ Java / 자바 ] 현재 날짜 및 시간 구하기 (0) | 2015.04.27 |
[Java] 자바로 만든 구구단 소스 (0) | 2015.04.27 |