์ดํด๋ฆฝ์ค์์ ์คํ๋ง๋ถํธ ๊ธฐ๋ฐ์ผ๋ก JSP๊ฐ๋ฐํ๊ธฐ
์๋ ํ์ธ์, ์ค๋์ ์คํ๋ง๋ถํธ ๊ธฐ๋ฐ์ผ๋ก JSP๊ฐ๋ฐ์ ํ ์ ์๋ ํ๊ฒฝ์ ์ธํ ํ๋ ๊ณผ์ ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ต๊ทผ์ ๋๊ท๋ชจ์ ์น ๊ฐ๋ฐ์ ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ ๊ตฌ๋ถํด์ ๋ณ๋์ ํ๋ก์ ํธ๋ก ๊ตฌ์ฑํ๊ฑฐ๋ ๋ชจ๋๋ก ๋๋์ด ๊ฐ๋ฐ์ ์งํํ๊ณ ์์ต๋๋ค.
์ด๋ป๊ฒ ๊ฐ๋ฐ์ ํ๋์ง ๊ฒฐ๊ตญ ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ ์์ ํ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๊ฒ๋์ฃ . ํ์ง๋ง ๊ทธ๋ ๊ฒ๊น์ง ํ ํ์๊ฐ ์๋ ์์ ํ๋ก์ ํธ๋ค์ ๊ตณ์ด ๊ทธ๋ ๊ฒ ๋๋์ด ๊ฐ๋ฐ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ๊ตฌ๋ถ์ ํ๋ ๊ฒ์ด ์คํ๋ ค ์ ์ง๋ณด์๋ฅผ ํ๋ค๊ฒ ํ๋ ์์ธ์ด ๋๊ธฐ๋ ํ์ฃ .
์ค๋์ ํ๋์ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ JSP๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ธํ ํ๋ ๋ถ๋ถ๊น์ง ์๋ ค๋๋ฆฝ๋๋ค.
๊ฐ๋ฐ์ ํ์ํ ์ค๋น๋ฌผ์ ์๋์ ๊ฐ์ต๋๋ค.
1. Eclipse (2020๋ 7์ ๊ธฐ์ค ์ต์ ๋ฒ์ ๋ค์ด๋ก๋)
Version: 2020-09 M1 (4.17.0 M1)
2. Spring Tools plugin (์ค์น๋ฐฉ๋ฒ)
์ด๋ ๊ฒ๋ง ์์ผ๋ฉด ์ผ๋จ ์ค๋น๋ ์๋ฃ์ ๋๋ค.
์ด์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. ํ์ฌ ์ดํด๋ฆฝ์ค๋ฅผ ์ฒ์ ์ค์นํ์ ๋ถ์ด๋ผ๋ฉด ํจํค์ง ํ์๊ธฐ(Project Explorer)์ ์๋์ ๊ฐ์ด ๋์ค๋๋ฐ ์ฌ๊ธฐ์ ๋ฐ์์ ๋ ๋ฒ์งธ์ ์๋ Create a project...๋ฅผ ์ ํํฉ๋๋ค. ๋ง์ฝ ์ด๋ฏธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ๋์๊ฒ ์๋ ๋ถ๋ค์ด๋ผ๋ฉด ๊ทธ๋ฅ ํ์๊ธฐ ์ฐฝ์์ ์ฐํด๋ฆญํด์ New > Project ๋ฅผ ์ ํํ์๋ฉด ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด ์ ํ๋ก์ ํธ ์์ฑ ๋ง๋ฒ์ฌ๊ฐ ๋จ๋ฉด spring ์ผ๋ก ๊ฒ์์ ํด์ Spring Starter Project๋ฅผ ์ ํํฉ๋๋ค.
์ด์ ๋ง๋ค ํ๋ก์ ํธ์ ์ด๋ฆ์ Name ํญ๋ชฉ์ ์ ์ด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ Java Version ์ 11๋ก ์ ํํด์ค๋๋ค. (8๋ก ํด๋ ๋ฌด๋ฐฉํฉ๋๋ค)
Spring Boot์ ๋ฒ์ ์ ์ ํํ ์ ์๋๋ฐ ์ด ๋ถ๋ถ์ ๊ทธ๋๋ก ๋๋๊ณ Available ๊ฒ์์ฐฝ์์ web์ด๋ผ๊ณ ๊ฒ์ํ์ฌ Spring Web์ ์ ํํด์ค๋๋ค. (์ด์ธ์๋ lombok์ด๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ, MyBatis ๋ฑ ์ ์ฉํ ๊ธฐ๋ฅ๋ค์ ์ ํํ์ฌ ์ฌ์ ์ค์น๊ฐ ๊ฐ๋ฅํฉ๋๋ค๋ง ์ฌ๊ธฐ์๋ ์ ํํ์ง ์์ต๋๋ค.)
Finish ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ค๋๋ค.
์ด์ MyDemoApplication.java ํ์ผ์ ์ด์ด ์๋์ ๊ฐ์ด ์์ ํด์ค๋๋ค.
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class MyDemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyDemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyDemoApplication.class, args);
}
}
SpringBootServletInitializer๋ฅผ ์์ํ๊ณ configure ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ pom.xml ํ์ผ์ ์๋ ์์กด์ฑ์ ์ถ๊ฐํด์ค๋๋ค. jasper๋ JSP ํ์ผ์ ์ปดํ์ผ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
<!-- Need this to compile JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
์ด์ ํ๋ก์ ํธ๋ช ์์ ์ฐํด๋ฆญํ๊ณ "src/main/webapp" ์ ํด๋๋ฅผ ํ๋ ๋ง๋ญ๋๋ค. ์ด๋ ๊ฒ ํด๋๋ฅผ ๋ง๋ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
์ด์ ๋ค์ ์ฐํด๋ฆญํ์ฌ build path ์ค์ (Configure Buildpath...)ํ๋ฉด์ผ๋ก ๋ค์ด๊ฐ๋๋ค.
Add Folder... ๋ฅผ ํด๋ฆญํ๊ณ webapp ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐพ์ ์ฒดํฌํด์ค๋๋ค.
OK ๋ฒํผ์ ๋๋ฅด๊ณ Applyํ๋ฉด ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์๋์ ๊ฐ์ด ๋ฐ๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด์ webapp ์๋์ WEB-INF๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ํ์์ ๋ views ๋ผ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ test.jsp ํ์ผ์ ๋ง๋ค์ด ์๋์ ๊ฐ์ด ์์ฑํด์ค๋๋ค.
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<body>
<h1>Test Page</h1>
Today's date: <%= new Date() %>
</body>
</html>
application.properties ํ์ผ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๋ผ์ธ์ ์ถ๊ฐํด์ค๋๋ค.
spring.mvc.view.prefix = /WEB-INF/views/
spring.mvc.view.suffix = .jsp
์, ์ด์ ๋ง์ง๋ง์ผ๋ก ํด๋น ํ์ด์ง์ ์ฐ๊ฒฐํ API๋ฅผ ์์ฑํฉ๋๋ค. root package์์ controller ๋ผ๋ ํจํค์ง๋ฅผ ํ๋ ๋ง๋ค๊ณ ๊ทธ ์๋์ DemoController.java๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class DemoController {
@GetMapping("/test")
public String login() {
return "/test";
}
}
์ฌ๊ธฐ๊น์ง ์๋ฃ๋์์ผ๋ฉด ์ด์ Run As > Java Application ๋๋ Run As > Spring Boot App ์ผ๋ก ๊ธฐ๋์์ผ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ localhost:8080/test ์ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ด jsp ํ์ด์ง๊ฐ ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
JSP ํ์ด์ง์ javascript ๋ฐ css ํ์ผ ์ฐ๋
์ด์ JSP ํ์ด์ง์ javascript ํ์ผ ๋ฐ css ํ์ผ์ ์ฐ๊ฒฐ์์ผ๋ณด๊ฒ ์ต๋๋ค.
javascript์ css ํ์ผ์ src/main/resources ํ์์ static ํด๋ ์์ชฝ์ ๋ชฐ์๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฐ์ static ํด๋ ํ์์ script ํด๋๋ฅผ ๋ง๋ค์ด test.jsํ์ผ์ ์์ฑํ๊ณ ์๋ ๋ด์ฉ์ ์์ฑํฉ๋๋ค.
$(document).ready(function() { printCurrentDatetime(); });
function printCurrentDatetime() {
let date = new Date();
$('#currentTime').html(date);
setTimeout(printCurrentDatetime, 1000);
}
๊ทธ๋ฆฌ๊ณ static ํด๋ ํ์์ style ํด๋๋ฅผ ๋ง๋ค์ด test.css ํ์ผ์ ์์ฑํ๊ณ ์๋์ ๊ฐ์ด ์์ฑํฉ๋๋ค.
@charset "UTF-8";
body {background-color:cornflowerblue;}
์, ๋์ด์ ํ์ผ์ ๋ง๋ค ํ์๋ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก JSP ํ์ผ์ ์์์ ์์ฑํ ๋ ํ์ผ์ ์ฐ๊ฒฐ์์ผ์ฃผ๊ฒ ์ต๋๋ค.
test.jsp ํ์ผ์ ์ด์ด ์๋์ ๊ฐ์ด ์์ ํด์ค๋๋ค.
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<!-- JS link -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="script/test.js"></script>
<!-- CSS link -->
<link href="style/test.css" rel="stylesheet">
</head>
<body>
<h1>Test Page</h1>
Today's date: <span id='currentTime'></span>
</body>
</html>
๋ณ๊ฒฝํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. html์ body ์์ ์๋ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ test.js๋ก ์ฎ๊ธฐ๋ฉด์ refresh ๊ธฐ๋ฅ์ ์ถ๊ฐ
2. test.jsํ์ผ์์ jquery๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ htmlํ์ด์ง(jspํ์ผ)์ jQuery ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋งํฌ ์ถ๊ฐ
3. css ๋งํฌ๋ฅผ ์ถ๊ฐํ๊ณ body์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์์ cornflowerblue ๋ก ์ค์
์ฌ๊ธฐ๊น์ง ์์ ์ด ์๋ฃ๋๋ฉด ์ต์ข ์ ์ผ๋ก ์๋์ ๊ฐ์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ๋ฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ์ ๋ฐ๋ผ์ค์ จ๋ค๋ฉด ์คํ์์ผฐ์ ๋ ์๋์ ๊ฐ์ด ํ์ฌ์๊ฐ์ด ๊ณ์ ์ ๋ฐ์ดํธ๋๋ ํ๋ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค. ๐
์ด์์ผ๋ก Eclipse์์ SpringBoot์ JSP๋ฅผ ์ฐ๋ํ์ฌ ์นํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค.
'๐ป Programming > ์นํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] 30๋ถ์์ฑ ์ฐ๋ฝ์ฒ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (0) | 2020.08.02 |
---|---|
Eclipse + SpringBoot + JSP ๊ฐ๋ฐํ๊ฒฝ ์ธํ ํ๊ธฐ #2 (0) | 2020.07.23 |
[MySQL] ๋ฐ๋ชฌํ๋ก์ธ์ค๊ฐ ์๊พธ ์๋์ผ๋ก ์คํ๋์ (0) | 2020.07.05 |
[MySQL] auto_increment ์ปฌ๋ผ ๊ฐ์ ์ธ์ ์ฆ๊ฐํ ๊น (0) | 2020.07.02 |
TypeHandler๋ฅผ ์ด์ฉํ ๊ฐ์ฒด ๋ฆฌ์คํธ๋ฅผ text(varchar)๋ก ์ ์ฅํ๊ธฐ (1) | 2020.07.02 |