728x90
반응형

📄 enter값 DB에 저장하기

 

notice.getNotice_content().replace("\r\n","<br>")

 

notice.getNotice_content()는 jsp에서 받아온 문장값을 저장해둔 위치이다.

 

문장값을 가지고 있는 변수 뒤에 .replace("\r\n","<br>")을 사용하여 db에 직접 태그를 넣을 수 있도록 변경한다.

 

 

 

 

기존과 다르게 <br>태그가 들어간 것을 확인할 수 있다.

 

 

 

 

&amp;lt;적용 결과&amp;gt;

 

 

 

 

 

 

 

 

📑 <br> 저장된 문장 원래상태로 가져오기

 

notice.getNotice_content().replace("<br>","\r\n")

가져올때는 <br>과 \r\n을 치환해서 가져오면 된다.

&lt;변경된 모습&gt;

 

728x90
반응형
728x90
반응형

💊 sts 경로에 한글 이름 존재

 

 

sts의 위치 경로에 사진과 같이 한글이 포함되어있으면 작동하지 않는다.

 

 

 

 

 

 

sts.exe파일과 이름이 동일한 sts.ini 파일을 메모장으로 열어 확인해보면, 경로에 한글이 추가된 것을 확인할 수 있다.

 

 

 

해결법 : 경로를 모두 영어로 바꾸고 동일하게 맞춘다.

728x90
반응형
728x90
반응형

Download (projectlombok.org)

 

Download

 

projectlombok.org

 

 

📥 Lombok 설치

 

상단의 링크로 접속하여 Lombok을 다운로드 받는다.

 

 

 

 

 

다운로드 받은 lombok 파일을 실행한다. (jar 파일)

 

 

 

 

 

 

 

실행하면, sts IDE이 자동으로 찾아지는 경우도 있고, 해당 사진처럼 찾지 못한다고 뜨는 경우도 있다.

 

 

 

 

 

 

찾아지지 않는 경우에는 Specify location... -> SpringToolSuite.exe -> Select를 눌러 직접 지정한다.

 

 

 

 

 

 

 

추가되면 사진과 같이 IDEs에서 sts를 확인할 수 있다.

 

Install / update를 클릭하여 설치하면 된다.

 

 

 

 

sts.exe파일이 존재하는 위치로 들어가면, Lombok이 추가된 것을 확인할 수 있다.

 

 

 

 

 

728x90
반응형
728x90
반응형

📖 컨트롤러의 기본 사용

 

spring 프로젝트의 파일을 살펴보면 src/main/java 밑에 패키지가 하나 있는 것을 볼 수 있다.

 

 

 

 

 

동일한 위치에 controller만을 모아둘 수 있는 패키지를 만들고, 작업을 원하는 컨트롤러를 생성한다.(class 생성)

 

 

 

 

 

 

<FilmController.java>

package com.practice.fjdkslvn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class FilmController {
	
	@GetMapping("/film") 
	public String filmList() {
		System.out.println("FilmController.test()실행");
		
		return "/WEB-INF/jsp/filmList.jsp";
	}
}

클래스 위에 @Controller 어노테이션을 작성하여 컨트롤러 작동이 가능하게 한다.

 

@GetMappint("/film") 어노테이션을 작성하여 '/film'으로 get 요청을 받았을 경우 처리할 수 있도록 filmList 메서드를 생성하였다. spring은 아주 편리하게도 return 값으로 jsp의 경로를 반환하면 자동으로 forward 해준다.

 

여기서, forward를 위해 return하는 jsp경로를 더욱 편리하게 반환하는 방법이 있다.

 

 

 

 

 

 

<FilmController.java>

@Controller
public class FilmController {
	
	@GetMapping("/film") 
	public String filmList() {
		System.out.println("FilmController.test()실행");
		
		return "filmList";
	}
}

- return값으로 jsp 이름만 반환하는 방법

 

 

@Controller
public class FilmController {
	
	@GetMapping("/film") 
	public void filmList() {
		System.out.println("FilmController.test()실행");
        // 반환값이 없으면 메서드 명을 사용하여 forward 진행
	}
}

- return값이 없기 때문에 메서드 명을 사용하여 forward가 진행되는 방법

 

=> 2개의 방법 모두 이전과 달리 /WEB-INF/jsp/.jsp를 생략하고 사용하는 방법이다. 다만, 이렇게 사용하기 위한 설정이 필요하다.

 

 

 

 

 

 

src/main/resources를 열면, 애플리케이션을 구동할 때 자동으로 실행되는 application.properties를 확인할 수 있다.

 

 

 

 

 

<application.properties>

#server config
server.port=80

# db config
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3307/sakila (//호스트명:포트번호/DB)
spring.datasource.username=사용자명
spring.datasource.password=비밀번호

# jsp config
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

server.port=80을 통해 사용할 포트번호를 80으로 변경한다. 변경 전에는 보통 8080으로 설정 되어있는데, 80으로 변경하면 http://localhost:8080/film -> http://localhost/film 과 같이 간편하게 접근 가능하다.

 

본인은 mariaDB를 사용하기 때문에 관련 코드를 작성해주었다. 자신이 사용하고 있는 설정에 맞게 입력해주면 될 것 이다.

 

마지막으로 forward를 위한 jsp경로를 간단하게 return하기 위해 사용되는 부분이다. 여기서 prefix는 접두어로 사용되고 suffix는 접미어로 사용된다. 해당 설정으로 인해 간단하게 jsp명만 return하는 경우 "WEB-INF/jsp/리턴값.jsp"과 같은 경로로 forwarding이 진행된다. return값이 없어서 메서드명이 전달되는 경우도 마찬가지다.

 

 

 

 

 

 

이제 jsp를 만들어야 한다. 실제로는 webapp까지밖에 없을것이다.

 

webapp 밑에 WEB-INF파일을 만들고 그 아래에는 jsp를 모아둘 파일을 생성한 뒤, 원하는 jsp파일을 생성한다.

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>영화 목록 출력 예정</h1>
</body>
</html>

jsp화면은 간단하게 제목만 출력하도록 했다.

 

 

 

 

 

🎵실행

프로젝트 우클릭 -> Run As -> Spring Boot App을 클릭하여 서버를 실행한다.

 

 

 

 

 

 

localhost/film을 입력하여 get방식으로 요청하면, filmList.jsp가 forward되어 나오고 console에 컨트롤러가 실행되었음을 나타내는 system.out.print가 출력된다.

 

 

 

 

 

 

 

🔖<FilmController.java> =>  값 받는 방법

@Controller
public class FilmController {
	
	@GetMapping("/film") 
	public String filmList(int filmId, String title) {
		System.out.println("FilmController.test()실행");
		System.out.println("영화번호 : " + filmId);
		System.out.println("제목 : "+title);
		
		return "filmList";
	}
}

@GetMapping 어노테이션을 사용한 경우에 get방식으로 데이터를 전달하면, 메서드 입력변수로 해당 값들을 받을 수 있다.

 

 

위와 같이 ?filmId=1&title="강철의 연금술사" 값을 넘긴다.

 

 

 

 

 

console을 확인하면 값이 넘어온 것을 확인할 수 있다.

728x90
반응형
728x90
반응형

Spring | Tools

 

Spring Tools 4 is the next generation of Spring tooling

Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.

spring.io

 

 

💾 Spring 환경설정

위 링크에 들어가서 해당 파일을 다운로드 받고 실행한다.

 

 

 

 

 

 

 

SpringToolSuite4를 더블클릭하여 이클립스를 실행할 수 있다.

 

 

 

 

 

 

 

 

프로그램을 실행한 후, Help -> Eclipse Marketplace를 클릭하여 마켓을 연다.

 

 

 

 

 

 

 

 

eclipse web 검색 -> Eclipse Web Developer Tools 3.23 설치

mybatis 검색 -> MyBatipse 1.2.4 설치

 

동의 또는 다음을 모두 누르고, restart now가 나오면 눌러주면 된다.

 

 

 

 

 

 

새로운 프로젝트를 생성하기 위해 New -> Spring Starter Project를 클릭한다. (없다면 Project에서 찾기)

 

 

 

 

 

 

java Version과 같은 설정등은 본인에게 맞는걸로 선택하고, package에는 Group + Artifact를 작성해준다.

 

Next를 누른 후, 그림과 같이 4개의 dependency를 선택한 후 Finish를 눌러 프로젝트를 생성한다.

 

 

 

 

 

 

 

 

		<!--  JSP -->
        <dependency>
           <groupId>org.apache.tomcat.embed</groupId>
           <artifactId>tomcat-embed-jasper</artifactId>
           <version>9.0.45</version>
        </dependency>
	    <!--  JSTL -->
	    <dependency>
	       <groupId>javax.servlet</groupId>
	       <artifactId>jstl</artifactId>
	       <version>1.2</version>
	    </dependency>

생성된 spring 프로젝트를 열고, pom.xml의 dependency안에 해당 코드를 넣는다.

 

JSP와 JSTL을 사용할 수 있도록 한다.

 

728x90
반응형
728x90
반응형

📗 늑대와 향신료 소개

시즌 2개

 

미완결 느낌의 애니

 

경제물, 로맨스

 

★★

(주관적인 별점 기준)

더보기

***별점 매우 짜게 줍니다***

***2점 이상은 다 볼만합니다***

 

0점 : 개 쓰레기 애니

1점 : 시작은 했으니 억지로 본 애니

2점 : 딴짓하면서 틀고 볼만한 애니

3점 : 나름 재밌었던 애니

4점 : 지인들에게 강력 추천할만큼 재밌는 애니

5점 : 세상에 알려야 할 애니

 

늑대와 향신료는 시즌이 2개로 구성되어있는 경제물 속에서 피어나는 로맨스를 담은 애니입니다.

 

주인공 로렌스는 늑대의 화신인 '호로'를 자신의 마차에서 발견하게 되고, 어쩌다보니 같이 다니게 됩니다.

 

로렌스는 물건을 되파는 상인이기 때문에 여러 마을을 다니며 장사를 합니다. 상인들의 거래에는 거짓, 사기, 물가, 정치 등 따져야 할 요소가 매우 많습니다. 호로는 화신인 만큼 오래 살아오며 여러 장사꾼들을 만났습니다. 그렇기에 로렌스가 거래중 정보 부족으로 혼란스러워할때 마다, 팁을 주거나 큰 이득을 보도록 감초를 치곤 합니다. 그 덕분에 로렌스도 군말없이 호로를 데리고 여행을 다닙니다.

 

 

 

 

 

 

📖 후기

저는 속았습니다. 늑대와 향신료가 설렌다는 말도 많이 들었고, 많은 애니 소개와 표지를 이미지를 봤을때 로맨스 80% 경제물 20%정도의 애니인줄 알았습니다. 실제로는 경제물 80%, 로맨스 20%정도입니다. 그런데도 제가 애니를 전부 볼 수 있었던 이유는.. 호로의 미모와 로렌스의 목소리 때문입니다.

 

 

정말 너무 이쁩니다. 솔직히 작화가 좋은편은 아닙니다. 그래도 호로를 그릴때 만큼은 정성들여서 그렸다고 생각합니다. 호로가 아니였으면 이 애니 끝까지 못봤습니다.

 

일단 호로의 성격 자체가 너무 사랑스럽습니다. 자신감 넘치는 모습으로 많은 일들을 해쳐나가는것을 보면 기대고 싶어지기도 하고, 우울해하거나 힘들어하는 모습을 보면 지켜주고 싶은 느낌이 듭니다.

 

로렌스와의 케미도 빠질 수 없습니다. 늑대와 향신료는 썸타는 간질거리는 느낌보다는 부부관계의 신뢰와 믿음, 안정감 등의 분위기를 더 많이 냅니다. 그래서 그런지 연애관련으로 열불나고 속터지는 장면은 많이 나오지 않아서 좋았습니다. 2기에서 이런 부분이 조금은 존재하는데, 호로의 성격을 잘 파악하셨다면 재밌게 볼 수 있을겁니다.

 

 

 

 

 

주인공 로렌스도 제가 이 애니를 끝까지 보게 만든 원인 중 하나입니다. 솔직히 말해서 중년 그 이상의 아저씨 기운을 내뿜고있는 로렌스의 외형은 그닥 취향이 아니였습니다.

 

외형은 매우 아쉽지만 늑대와 향신료에서 이런 고급 성우분을 데려올 줄 몰랐습니다. 무려 "후쿠야마 쥰" 입니다. 코드기어스 - 를르슈, 암살교실 - 살선생, 흑집사 - 그렐, 중2코이 - 토가시 유타 등 매우 유명한 작품들의 주연으로도 나오고 특이한 캐릭터도 잘 소화하는 성우입니다. 제가 가장 좋아하는 성우이기도 합니다.

 

호로 덕분에 눈이 즐겁고 로렌스 덕분에 귀가 즐거운 애니였습니다.

 

 

 

 

결말은 조금 아쉬웠습니다. 3기가 나올지 모르겠는데 2기 마무리 자체도 대충 마무리 지은 느낌이 있습니다. 1기 마무리도 솔직히 시원하지 않았는데, 2기 마무리도 비슷한 느낌으로 끝나서 많이 아쉽습니다. 항상 드는 생각이지만 모든 작품은 마무리가 참 중요하다고 생각합니다.

 

728x90
반응형

+ Recent posts