๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring

SpringBoot * JSP ์—ฐ๋™ํ•˜๊ธฐ ใ… ใ…  ( feat. โœ… solved few errors )

Spring boot๋Š” JSP ์—ฐ๋™ํ•˜๋Š” ๊ฑธ ์‹ซ์–ดํ•œ๋‹ค.

์•„๋‹ˆ ์‹ซ์–ดํ•˜๋Š” ๊ฑฐ ๊ฐ™๋‹ค! ใ…‚ใ„ทใ…‚ใ„ท ๐Ÿคฏ

 

๊ณต์‹ ๋ฌธ์„œ์—๋„ JSP ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์“ฐ๋ผ๊ณ  ๋‚˜์™€ ์žˆ๋‹ค.

FreeMarker, Groovy, Thymeleaf, Mustache๋ฅผ ์ถ”์ฒœํ•˜๊ณ  ์žˆ๋‹ค.

JSP๋Š” JAR ํŒจํ‚ค์ง•์„ ํ•  ์ˆ˜ ์—†๊ณ (war๋กœ ํŒจํ‚ค์ง• ํ•ด์•ผ ํ•จ) ์˜์กด์„ฑ ๋ฌธ์ œ๋„ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๊ธฐ์กด์— Spring Framwork์—์„œ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์…˜์„ ๊ตฌ์„ฑ ํ•  ๋•Œ View ์˜์—ญ์— JSP๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ Spring boot๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ง€๊ธˆ.. JSP๋ฅผ.. ๐Ÿ˜ฅ๐Ÿคฃ๐Ÿ˜‚ ๋Œ€๋ถ€๋ถ„์˜ Spring boot ์˜ˆ์ œ๋“ค๋„ ์œ„์˜ ์ถ”์ฒœ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ด๊ฑด ์–ด์ฉ” ์ˆ˜ ์—†์ด JSP๋ฅผ ์จ์•ผ ํ–ˆ๋˜ ๋‚˜์—๊ฒŒ ๋ฐ”์น˜๋Š” ํฌ์ŠคํŒ…์ด๋‹ค..

 

 

์‹œ์žใ…ใ…ใ…ใ…์•…...

1. Dependencies ์ถ”๊ฐ€

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ๋‚ด์žฅ ํ†ฐ์ผ“์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ด ๋‚ด์žฅ ํ†ฐ์ผ“ ์•ˆ์— JSP๋ฅผ ๊ตฌ๋™์‹œํ‚ค๋Š” ์นœ๊ตฌ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

(์ถ”์ฒœ ์•ˆ ํ•˜๋‹ˆ๊นŒ ๋‹น์—ฐํ•œ ๊ฑธ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค.)

์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

๋‹ค์Œ ๋‘๊ฐœ์˜ ์˜์กด์„ฑ์„ dependencies ์•ˆ์— ์ถ”๊ฐ€ํ•ด์ฃผ์ž

implementation 'javax.servlet:jstl'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
๋”๋ณด๊ธฐ

Could not find javax.servlet.jsp.jstl:jstl:1.2.

 

MVN REPOSITORY์—์„œ jstl๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์กด์„ฑ ์ •๋ณด๊ฐ€ ๋‚˜์˜จ๋‹ค.

implementation group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'

์ด๊ฑธ ์ถ”๊ฐ€ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ group์˜ ์ฃผ์†Œ(?)๊ฐ€ ์ž˜๋ชป๋˜์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค.

 

โœ… solved

implementation group: 'javax.servlet', name: 'jstl', version: '1.2' ์œผ๋กœ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

 

์“ฐ๋‹ˆ๋Š” ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚œ ๋’ค version ์ •๋ณด๋ฅผ ์—†์—๊ณ  group๊ณผ  name์„ ํ•ฉ์ณ์„œ ์ •๋ฆฌํ•ด์คฌ๋‹ค!

๋”ฑํžˆ ์ง€์ •ํ•  ๋ฒ„์ „์ด ์—†๋‹ค๋ฉด ์œ„ ์ฝ”๋“œ๋ธ”๋Ÿญ ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๊น”๋”ํ•ด๋ณด์ธ๋‹ค!

 

24.03.21 ์ถ”๊ฐ€

3.0 ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์ด๋‹ˆ, ๋งŒ์•ฝ spring boot 3.0 ๋ฒ„์ „ ์ด์ƒ์ด๋ผ๋ฉด ์œ„์˜ ์ฝ”๋“œ ๋Œ€์‹ ์— ์•„๋ž˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ž!

implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'

2. application.yml ํŒŒ์ผ์— ๋‚ด์šฉ ์ถ”๊ฐ€

prefix๋กœ webapp ํ•˜๋‹จ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ  suffix๋กœ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์ ์–ด์ค€๋‹ค.

static-path-pattern ๋กœ ์ฐธ๊ณ ํ•  ์ •์  resource ์œ„์น˜๋ฅผ ์žก์•„์ค€๋‹ค. ( css, js, img ํŒŒ์ผ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•œ ์ž‘์—… )

๋ฌด์Šจ ๋ง์ธ๊ฐ€ ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ 3๋ฒˆ์˜ ํด๋” ๊ตฌ์กฐ์™€ ๋น„๊ตํ•˜๋ฉฐ ๋ณด๊ธธ๋ฐ”๋ž€๋‹ค.

spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
    static-path-pattern: /resources/**

3. ํด๋” ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ํ•ด๋‹น ๊ฒฝ๋กœ์— .jsp ํŒŒ์ผ ์ถ”๊ฐ€

application.yml์— ์„ค์ •ํ•œ ๊ฒฝ๋กœ๋Œ€๋กœ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  .jsp ํŒŒ์ผ์„ ๋„ฃ์–ด์ค€๋‹ค.

 

 

๋‚ด์šฉ์ด ๋งŽ์•„ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด์™ธ์—๋Š” ๋ชจ์ž์ดํฌ๋ฅผ ํ–ˆ๋‹ค.

 

๋ณด๋‹ค์‹ถ์ด src/main/webapp/WEB-INF/views/.jsp ๊ฐ€ ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค.

prefix ์ด๋ฆ„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ฒ ์ง€๋งŒ ์–ด์จ‹๋“  prefix๋กœ ์„ค์ •ํ•œ path๋Š” src/main/webapp ์•ˆ์— ๋“ค์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์ฃผ์˜ํ•˜์ž.

 

css ์™€ img, js ๋””๋ ‰ํ† ๋ฆฌ๋Š” resources/static ์•„๋ž˜์— ์žˆ๋‹ค.

๋”๋ณด๊ธฐ

์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

<%-- CSS --%>
<link rel="stylesheet" type="text/css" href="/resources/css/ํŒŒ์ผ๋ช….css">
 
<%-- img --%>
<img src="/resources/img/ํŒŒ์ผ๋ช….jpg" alt="">
 
<%-- javascript --%>
<script src="/resources/js/ํŒŒ์ผ๋ช….js" type="text/javascript"></script>

 

application.yml ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ๋‹ค๋ฅธ ์„ค์ • ๋ถ€๋ถ„์ด ์žˆ์–ด sping์™€ mvc ์‚ฌ์ด์— ๊ฑฐ๋ฆฌ๊ฐ€ ์ข€ ์žˆ๋Š”๋ฐ ์‹ ๊ฒฝ์“ฐ์ง€๋ง๊ณ  ์œ„ 2๋ฒˆ์ฒ˜๋Ÿผ ์ฝ”๋”ฉํ•˜๋ฉด ๋œ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€ ํ–ˆ๋‹ค๋ฉด ์„ค์ • ๋ ๐Ÿคฉ!

์‚ฌ์šฉ์€ ๊ทธ๋ƒฅ view ํŽ˜์ด์ง€ ๋ถ€๋ฅด๋“ฏ์ด ํ•˜๋ฉด ๋˜๋Š”๋ฐ.. ํ์•„.. ํ˜น์‹œ๋‚˜ ์‹ถ์–ด ๋ถ€๋ถ„ ์ฝ”๋“œ๋ฅผ ์ฒจ๋ถ€ํ•œ๋‹ค.

// ํด๋ž˜์Šค๋ช….java

@Controller
public class ํด๋ž˜์Šค๋ช… {

    @GetMapping("/URL์ฃผ์†Œ")
    public String ํ•จ์ˆ˜์ด๋ฆ„(){
        return "JSPํŒŒ์ผ์ด๋ฆ„";
    }

}

 

 

๋” ์ ์–ด๋ณด๊ธฐ..

๋ถ„๋ช… ์„ค์ •์„ ๋‹ค ํ–ˆ๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ƒˆ์—ˆ๋‹ค.

ํ•ด๊ฒฐํ•˜๊ณ  ๋‚œ ๋’ค๋ผ ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ์—๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.

 

~~ ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": ๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋œจ๋ฉด์„œ ์ ‘์†ํ•œ ๋ธŒ๋ผ์šฐ์ € ํŽ˜์ด์ง€์—๋Š” Whitelabel Error Page๊ฐ€ ๋–ด๋‹ค.

 

โœ… solved

๋”ฐ๋กœ ์ˆ˜์ •ํ•œ ๊ฒƒ ์—†์—ˆ๊ณ  ๊ทธ๋ƒฅ ๊ฐœ๋ฐœ ํˆด์„ ๊ป๋‹ค๊ฐ€ ๋‹ค์‹œ ์ผœ์„œ ์‹คํ–‰ํ•˜๋‹ˆ๊นŒ ๊ณ ์ณ์กŒ๋‹ค.

 

 

Tip.

ํฌ์ŠคํŒ… ์œ—์ชฝ์„ ์ฝ์—ˆ๋‹ค๋ฉด JSP๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด .war๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ๋œ๋‹ค.

๊ทธ๋Ÿผ .jar ํŒŒ์ผ๋กœ ์ƒ์„ฑ ํ•  ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋‚˜? ๋ผ๊ณ  ๋ฌผ์œผ๋ฉด ํ•ด๊ฒฐ์ด๋˜๊ธดํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด์—ˆ์„ ๋•Œ ๋˜ ์ธ์‹์„ ๋ชปํ–ˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ ..๋งŒ์•ฝ ๋‚˜์ค‘์— ๋ฐฐํฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด...

ใ…Ž-ใ…Ž ๊ทธ๋ƒฅ war ํŒจํ‚ค์ง•์œผ๋กœ ๋งŒ๋“ค์ž.

 

 


Thanks for ๐Ÿ™ˆ

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

โœ… solved * [Spring] Cannot resolve taglib with uri http://java.sun.com/jsp/jstl/core  (2) 2024.04.18
โœ… solved * Incorrect string value: '\xEA\xB9\x80\xEC\xB1\x84..  (0) 2021.06.17