1. Maven vs Gradle
Maven
프로젝트의 라이브러리들을 관리해주는 도구이고, 자바로 개발된 어플리케이션에만 사용 가능 하다는 특징이 있다.
또한, 관리 대상 의 라이브러리와 연관된 다른 라이브러리들까지 연동되어 관리된 다는 편리함이 있다.
아파치 라이선스로 배포되는 오픈소스 SW이다. Maven은 XML 기반.
Gradle
Groovy 기반의 빌드 자동화 시스템이다. (Groovy: Java와 문법이 유사한 프로그래밍 언어로, JVM위에서 작동함) Maven과 다르게 Python, Java, C, C++ 등 다양한 언어를 지원한다는 특징이 있다.
안드로이드 스튜디오의 공식 빌드 시스템이다.=> 앱개발시 gradle 사용
기존 Maven을 통 해 XML로 빌드처리를 하는 경우 복잡한 내용을 작성 시 XML로 작성하기 까다로워지지만, Gradle에서는 Java와 유사한 문법으로 빌드 관리가 가능해진다.
왜 요즘은 Gradle인가?
Gradle은 Maven에 비해
성능이 좋다. 빌드 속도가 다양한 시나리오 상에서 10~100배까지 빠르다고 한다.
빌드 처리에 대한 설정이 간결하고, 이 때문에 대규모의 프로젝트 에서는 Gradle을 사용하는 것이 유리하다고 한다.
이러한 이유 때문에 아직까지 현재 점유율은 Maven이 높지만 Gradle을 더 사용하는 추세라고 한다.
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl:1.2'
}
application.properties
#Server
server.port=8393
server.servlet.session.timeout=30
#Spring MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
만들어보자고
프로퍼티
#server
server.port=8382
server.servlet.session.timeout=30
톰캣 스탑 안하면 포트 충돌나니께 맨날 스탑앤리런하는습관
com.boot에 DemoController만들자
package com.boot;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class DemoController {
@RequestMapping("/")
public String home() {
log.info("Boot Gradle~~!!!");
return "gradle";
}
}
@ResponseBody 어노테이션은 Spring Framework에서 사용되는 어노테이션입니다. 이 어노테이션은 메서드나 클래스에 적용될 수 있으며, 해당 요청 핸들러 메서드가 생성하는 결과를 HTTP 응답의 본문으로 직접 보내도록 지정합니다.
위의 코드에서 @ResponseBody 어노테이션은 DemoController 클래스에 적용되어 있습니다. 이는 home() 메서드가 반환하는 문자열을 HTTP 응답의 본문으로 사용하도록 지정하는 역할을 합니다.
일반적으로 Spring MVC에서는 @Controller 어노테이션이 적용된 클래스의 메서드들은 View를 반환하는 데 사용됩니다. 그러나 @ResponseBody 어노테이션을 사용하면 해당 메서드가 반환하는 데이터가 직접 응답 본문에 작성되어 JSON, XML 또는 일반 텍스트와 같은 형식으로 클라이언트에 전송될 수 있습니다.
즉, home() 메서드가 "gradle" 문자열을 반환하면, 이 문자열이 HTTP 응답의 본문으로 전송되어 클라이언트에게 반환됩니다.
gradle 문자열이 그대로 뜬다
package com.boot;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@ResponseBody
public class DemoController {
@RequestMapping("/")
public String home() {
log.info("Boot Gradle~~!!!");
return "gradle";
}
@RequestMapping("/hello.do")
public String home(Model model) {
log.info("안녕하세요~~!!!");
model.addAttribute("message","hello.jsp입니다.");
return "hello";
}
}
@ResponseBody를 컨트롤러 전체가아니라
저 메소드에만 적용하면?
/hello.do는 404,
/는 "gradle"이 정상적으로 뜬다.
이제 뷰단을 띄워보자.
아까 한 프로젝트에서(롬복프로젝트)
webapp을 통째로 복사해오자 => gradle은 webapp조차 없음!
이제 경로설정하자
프로퍼티에
#server
server.port=8382
server.servlet.session.timeout=30
#Spring MVC
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
추가하고,
디펜던시 추가하러 build.gradle에 가자(jsp파싱해주는거 추가해야지)
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl:1.2'
그런데도
"Path with "WEB-INF" or "META-INF": [WEB-INF/views/hello.jsp]" 오류
gradle은 프로젝트 리프레시해줘야 build.gradle적용이됨(인텔리제이에서 그 코끼리버튼 누르고 빌드했던건가봄)
그럼 드디어뜬당.
이제 이미지를 추가해보자
static에 image폴더 추가후
이미지 아무거나 하나 넣어줌
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- 프로젝트 경로를 contextPath 변수에 저장 -->
<c:set var="contextPath" value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
안녕하세요<br>
<img width="200" height="200" src="${contextPath}/image/duke3.png">
</body>
</html>
static에 image를 찾아가게끔 hello.jsp에 저렇게 세팅해줌(인텔리제이는 이거 자동으로 되는거였군)
인텔리제이 (IntelliJ)는 일반적으로 정적 파일(예: 이미지, CSS, JavaScript)을 자동으로 처리하기 위해 내장된 웹 서버를 사용합니다. 이를 통해 개발 중인 웹 애플리케이션의 정적 자원을 쉽게 제공할 수 있습니다.
주어진 코드는 JSP(JavaServer Pages) 파일의 일부분입니다. JSP 파일은 동적인 웹 페이지를 생성하는 데 사용되는 Java 기반 서버 사이드 템플릿입니다. JSP 파일에서는 JSTL(JSP Standard Tag Library)을 사용하여 Java 코드를 간결하게 작성할 수 있습니다.
IntelliJ에서는 JSP 파일을 자동으로 처리하기 위해 추가적인 설정이 필요합니다. 일반적으로 IntelliJ에서는 웹 애플리케이션을 개발할 때 Tomcat 또는 다른 웹 컨테이너를 사용합니다. 이 경우, 웹 애플리케이션의 정적 파일은 해당 웹 컨테이너의 기본적인 디렉토리 구조에 맞게 배치해야 합니다.
일반적으로 IntelliJ에서는 정적 파일을 `webapp` 또는 `resources/static` 디렉토리에 배치하는 것이 권장됩니다. IntelliJ는 이러한 디렉토리를 자동으로 인식하고 내장된 웹 서버를 통해 정적 파일을 제공합니다. 따라서 별도의 설정이 필요하지 않습니다.
그러나 프로젝트 구조나 IntelliJ 설정에 따라 다를 수 있으므로, 정적 파일의 위치와 관련된 설정을 확인하는 것이 좋습니다. 일반적으로는 IntelliJ의 설정이나 프로젝트의 `build.gradle` 파일에 추가적인 설정이 필요하지 않을 것입니다.
잘뜬당
자바스크립트 추가하기
이제 static 폴더에 js 폴더도 만들어주고
거기에 scriptTest.js 만들어줌
function test(){
alert("spring boot test 입니다.");
}
이렇게 테스트 함수 하나 만들어주고
hello.jsp에서 사용해보자
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- 프로젝트 경로를 contextPath 변수에 저장 -->
<c:set var="contextPath" value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${contextPath}/js/scriptTest.js"></script>
</head>
<body>
안녕하세요<br>
<img width="200" height="200" src="${contextPath}/image/duke3.png">
<input type="button" name="테스트" value="테스트" onclick="test();">
</body>
</html>
잘됨!
안녕하세요 밑에 컨트롤러에서 모델로 담아놓았던 메시지를 출력해보자
질뜸
'백 > spring boot' 카테고리의 다른 글
왜 SELECT를 할때도 @Transactional을 붙이는게 좋은가? (0) | 2023.08.01 |
---|---|
스프링부트 - mybatis 사용하기 (0) | 2023.07.12 |
스프링 부트 프로젝트 생성하기(Maven) (0) | 2023.07.12 |
스프링부트 3. 스프링 부트 동작원리 (0) | 2023.06.19 |
스프링 부트 2. JPA (0) | 2023.06.19 |