Eclipse + SpringBoot + JSP ๊ฐ๋ฐํ๊ฒฝ ์ธํ ํ๊ธฐ 2ํ์ ๋๋ค.
์ค๋์ 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ํ ํฌ์คํ ์ ๋ง์นฉ๋๋ค.
์ค๋๋ ์ฆ๊ฒ๊ณ ํ๋ณตํ ์ฝ๋ฉ์ ํ๋ ์ผ์ด์น์์ต๋๋ค~
'๐ป Programming > ์นํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[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 |