스프링부트에서 예전처럼 jstl을 사용하기 위해 pom.xml 파일에 dependency를 설정합니다.

 

               <dependency>
                       <groupId>javax.servlet</groupId>
                       <artifactId>jstl</artifactId>
                       <version>1.2</version>
               </dependency>

 

이게 기존에 사용하던 jstl 내용인데 Spring Boot 3.0부터는 오류가 발생 합니다.

 

웹 브라우저에서는 [Whitelabel Error Page]와 함께 하단에 status=500 오류가 나타납니다.

 

 

 

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Feb 15 09:19:28 KST 2024
There was an unexpected error (type=Internal Server Error, status=500).
 

 

 

서버 로그에서는 Servlet.service() for servlet [jsp] threw exception 오류가 발생합니다.

 

 

 

2024-02-15T09:19:27.884+09:00  INFO ---[nio-8080-exec-1]o.a.c.c.C.[Tomcat].[localhost].[/]      : Initializing Spring DispatcherServlet 'dispatcherServlet'

2024-02-15T09:19:27.884+09:00  INFO ---[nio-8080-exec-1]o.s.web.servlet.DispatcherServlet       : Initializing Servlet 'dispatcherServlet'

2024-02-15T09:19:27.886+09:00  INFO ---[nio-8080-exec-1]o.s.web.servlet.DispatcherServlet       : Completed initialization in 2 ms

2024-02-15T09:19:28.149+09:00 ERROR ---[nio-8080-exec-1]o.a.c.c.C.[.[localhost].[/].[jsp]       : Servlet.service() for servlet [jsp] threw exception

 

java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TagLibraryValidator

        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]

        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]

        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]

        at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]

        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[na:na]

 

 

지금까지 잘 사용하던 jstl dependency라 잘못 적용한 내용은 없지만 Spring Boot 버전이 맞지 않아 발생하는 오류입니다.

 

기존 jstl 1.2 설정은 Spring Boot 3.0부터 지원을 하지 않으므로 가능하면 다른 해결방법을 찾기 위해 노력하지 말고 다른 dependency를 설정해 주면 됩니다.

 

 

               <dependency>

                       <groupId>jakarta.servlet</groupId>

                       <artifactId>jakarta.servlet-api</artifactId>

                       <version>6.0.0</version>

                       <scope>provided</scope>

               </dependency>

              

               <dependency>

                       <groupId>jakarta.servlet.jsp.jstl</groupId>

                       <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>

                       <version>3.0.0</version>

               </dependency>

                             

               <dependency>

                       <groupId>org.glassfish.web</groupId>

                       <artifactId>jakarta.servlet.jsp.jstl</artifactId>

                       <version>3.0.1</version>

               </dependency>

 

 

이렇게 수정된 내용으로 pom.xml에 추가를 하고 예전처럼 Controller를 작성해서

 

@Controller

public class TestController {

 

        @RequestMapping("/test/cal")

        public String cal() throws Exception {

               return "test/cal";

        }

}

 

 

실행을 하면 아무런 일 없이 cal.jsp를 호출하고 결과를 볼 수 있습니다.

 

 

- copy coding -

 

 

JSP 파일에서 한글만 깨지는데 Server에서 받아온 데이터는 이상이 없고 유독 JSP 에서 작성한 글만 깨지는 현상이 발생 했습니다.

 

 

일반적인 방법으로 해결 방법은

 

1. JSP 페이지 상단에 다음을 입력하면 해결이 됩니다.

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 

2. 이도 아니면 UTF-8EUC-KR로 변경하면 해결이 되기도 합니다.

 

3. 아니면 JSP 문서를 꼭 찍어서 UTF-8로 변환 합니다.

   파일에 마우스올리고 우클릭하여 properties 선택 합니다.

 

 

 

4. 그래도 안되면 Text Editor(메모장, EditPlus, UltraEditor...)에서 UTF-8로 변경해서 가지고 옵니다.

 

5. 햐! 이것도 아니면 eclipse, spring boot의 설정이 잘못되었을 수 있습니다.

   여러 설정을 알아듣지 못하는건 툴 자체의 설정에 문제가 있는것 같습니다.

 

   Window > Preferences 메뉴를 클릭 합니다.

 

 

좌측에서 General > Content Types를 클릭 하고

우측에서 Text 를 확장 합니다.

 

 

확장한 Text 에서 하단으로 내려오면 JSP가 있습니다.

여기서 하단 Default encodingUTF-8로 입력하고 JSPUTF-8로 다시 원복.

하단 [Apply and Close] 버튼을 클릭하고 다시 실행을 하면

 

한글이 잘 나옵니다.

 

또 무슨 방법이 있을까요?

 

- copy coding -


서버에서 보낸 변수를 jsp에서 화면단에 나타내야 하는데 그대로 text로 인식하여 ${param}으로 나오는 경우에는 WAS, JSP 또는 Lib의 버전이 맞지 않아 EL(Expression Language)을 인식하지 못하여 발생하는 현상 입니다.


이런 경우에는 간단하게 JSP 상단에

<%@ page isELIgnored="false"%>


<%@ page isELIgnored="false" contentType="text/html; charset=utf-8"%>


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>

아무거나 하나 골라서 적어주면 됩니다.

 

반대로 EL이 적용 되는데 적용이 안되고 텍스트로 보여주고 싶으면 앞에 역슬레쉬(\)를 적어 줍니다.

\${param}

eclipse jsp 미리보기

eclipse에서 JSPHTML 파일 편집 작업을 하려는 경우 기본적으로 상단에 미리보기가 나타납니다.


eclipse jsp html 미리보기


JSP 미리보기 숨기기

그런데 미리보기는 성능에도 문제가 되고 소스를 보기에도 불편하여 편집 작업을 진행 하기에 불편한 점이 있습니다간단한 설정으로 미리보기 창이 나타나지 않도록 할 수 있으며 반대로 하면 미리보기가 나타나도록 할 수 도 있습니다.

상단 메뉴에서 Window > Preferences를 선택 합니다.


eclipse jsp html 미리보기


Preferences 창 좌측 메뉴에서 General > Editors > File Associations를 선택 합니다.  


eclipse jsp html 미리보기


그리고 우측에 있는 파일 확장자에서 *.jsp를 선택 하고 하단의 Associated editors에서 그림과 같이 JSP Editor (locked by ‘JSP’ content type)...를 선택 합니다.


eclipse jsp html 미리보기


Default 버튼 클릭 하면 상단으로 이동을 하며 기본 값이 변경 됩니다Apply and Close 버튼 클릭 하여 선택 값을 반영 합니다


eclipse jsp html 미리보기


선택 값이 바로 반영되지 않고 열려있는 jsp 파일을 닫고 다시 열어보면 상단의 미리보기 화면이 사라져 있습니다.


HTML 미리보기 숨기기

*.htm, *.html 파일의 미리보기도 동일한 방법으로 작업을 진행 합니다.


eclipse jsp html 미리보기


*.htm*.html을 각각 선택 하고 HTML Editor를 선택한 상태에서 Default 버튼을 클릭 하면 편집 모드가 우선으로 반영이 됩니다.


1

+ Recent posts