( 이전 시간 복습 )
프로젝트 생성 후, 설정과 출력까지
1. Spring Starter Project 생성
- 하단에서 import된 후, Project Package 창에서 생성한 프로젝트 확인 가능
- ‘src/main/java’에서 생성된 패키지 내 ‘Artifact명 + Application’이라는 이름의 클래스가 생성되어 있음
• @SpringBootApplication 어노테이션 : 스프링 부트의 가장 기본적인 설정을 선언해줌
• 스프링부트는 main 메소드가 선언된 클래스를 기준으로 실행됨
2. build.gradle 설정 → Snippet 이용
- 'org.springframework.boot:spring-boot-starter-tomcat' : War 패키징 방식을 가능하게 해주는 라이브러리
3. External Libraries에서 아래 라이브러리가 추가되었는지 확인
- tomcat-embed-jasper-9.0.76.jar
- jakarta.servlet.jsp.jstl-2.0.0.jar
- tomcat-embed-websocket-9.0.76.jar
- tomcat-embed-core-9.0.76.jar
- tomcat-embed-el-9.0.76.jar
4. application.properties : 전역 설정 ( = 공통 설정 )
→ src/main/resources 폴더 내에 존재
- application.properties에서 서버 및 스프링 설정
• 경로 입력 시, 폴더를 의미할 경우 폴더명 뒤에 ‘/‘를 붙임
파일을 의미할 경우 파일명으로 끝남
• 설정파일 내에서는 의미없는 공백 추가하지 않도록 주의하기
5. view 즉, JSP 파일이 위치하는 폴더 생성시키기
- src/main 폴더 아래에 webapp/WEB-INF/view 폴더 생성 후, view 폴더에 index.jsp 파일 생성
- index.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>
<h2>안녕하세요! </h2>
<h3>안녕하세요! </h3>
<h4>안녕하세요! </h4>
<h5>안녕하세요! </h5>
<h6>안녕하세요! </h6>
</body>
</html>
6. Run As - Spring Boot App 실행
- 파일 단위로 실행되지 않음
- 항상 프로젝트에서 실행
- 전체 프로젝트에서 한 프로젝트만 실행 가능 ( 동시에 불가능 : 80번 포트를 이미 사용하고 있기 때문 )
- 상단바에서
① STOP : 현재 실행 중인 프로젝트 중지
② 정지버튼 + 화살표 : 여러 프로젝트 실행 중일 때, 클릭하면 현재 실행 중인 리스트가 뜸
- Boot Dashboard
① ● : 현재 중지한 프로젝트
② ⬆︎ : 현재 실행중인 프로젝트
브라우저 실행 : localhost 호출 → index.jsp이 화면에 출력됨
- index.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>
<%
for ( int i = 0 ; i < 5; i++ ) {
out.println("<hr>");
}
%>
<h1>안녕하세요! </h1>
<h2>안녕하세요! </h2>
<h3>안녕하세요! </h3>
<h4>안녕하세요! </h4>
<h5>안녕하세요! </h5>
<h6>안녕하세요! </h6>
</body>
</html>
저장 후, 웹 페이지에서 새로고침하면 바로 수정된 화면 출력됨
▷ sub1.jsp 파일 생성
- stringBootStr 변수에 “스프링 부트”를 저장한 후, 출력하기
- 출력 결과는 out.println( )을 이용하기
• h1 ~ h6 : 어서오세요 스프링부트입니다.
• h6 ~ h1 : 스프링부트는 어렵지 않습니다.
( 복습 )
- 서버창에 ‘localhost/sub1’을 요청 시, 아래와 같이 Whitelabel Error Page가 뜸
⇒ 현재 jsp 파일이 ’WEB-INF’ 폴더 내에 존재하므로, 외부에서 접근 불가
∴ Controller를 통해 jsp파일로 접근할 수 있도록 해야 함
▷ Controller 생성
: 매핑을 통해 Controller가 특정 View를 사용자에게 반환하도록 만들어보자
• @Controller 어노테이션을 이용해 해당 클래스가 Controller임을 알려줌
• @GetMapping(“/sub1”) 어노테이션을 이용
→ 이는 서버 주소창에 ‘localhost/sub1’와 같이 Get방식으로 요청이 들어오면, 아래의 메서드를 실행하라는 의미
package apple.orange;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="myServlet", urlPatterns="/my")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
System.out.println("MyServlet.doGet()...");
System.out.println("request := " + req);
System.out.println("response := " + res);
String msg = req.getParameter("msg");
System.out.println("쿼리 문자열 msg = " + msg );
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("utf-8");
String printMsg ="""
<h1>#1 </h1>
<h2>#1 </h2>
<h3>#1 </h3>
<h4>#1 </h4>
<h5>#1 </h5>
<h6>#1 </h6>
""".replace("#1", msg);
// 반복을 해야할 경우, # placeholder를 이용해 마크 표시(#1)
// replace( 마크, 대체할 문자열 ) : 이 마크를 찾아 문자열로 대체함
// 응답객체의 값을 요청 웹 브라우저로 보내야 함
// 네트워크가 연결되면 하나의 입출력흐름이 됨
// 먼저 응답객체의 문자열 출력 스트림(PrintWriter)을 가져옴 : getWriter()
// 출력스트림이 연결되었으면 출력 시작 : write()
res.getWriter().write(printMsg);
}
}
- @ResponseBody
• 서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용
→ 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송함
스프링부트로 정적파일 처리하기
- ‘src/main/resources/static’에 아래와 같이 폴더 및 파일 생성
→ images 폴더 내에 이미지 파일 넣기
- sub.html에 이미지 태그를 이용해 images 폴더 내에 있는 이미지를 불러옴
- index.html (확장자가 파일에 해당) → 톰캣의 일부 기능인 웹 서버가 동작함
▷ 서블릿 생성 - MyServlet
package apple.orange;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="myServlet", urlPatterns="/my")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
System.out.println("MyServlet.doGet()...");
System.out.println("request := " + req);
System.out.println("response := " + res);
String msg = req.getParameter("msg");
System.out.println("쿼리 문자열 msg = " + msg );
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("utf-8");
String printMsg ="""
<h1>#1 </h1>
<h2>#1 </h2>
<h3>#1 </h3>
<h4>#1 </h4>
<h5>#1 </h5>
<h6>#1 </h6>
""".replace("#1", msg);
// 반복을 해야할 경우, # placeholder를 이용해 마크 표시(#1)
// replace( 마크, 대체할 문자열 ) : 이 마크를 찾아 문자열로 대체함
// 응답객체의 값을 요청 웹 브라우저로 보내야 함
// 네트워크가 연결되면 하나의 입출력흐름이 됨
// 먼저 응답객체의 문자열 출력 스트림(PrintWriter)을 가져옴 : getWriter()
// 출력스트림이 연결되었으면 출력 시작 : write()
res.getWriter().write(printMsg);
}
}
- 콘솔창에서 clear한 후, 서버에서 새로고침한 결과
: msg가 null값이므로 NPE예외 발생
- 서버창에 Get방식으로 msg 값을 전달해 요청해보자
- 아래와 같은 화면 출력
'백엔드 > Spring Boot' 카테고리의 다른 글
2. 스프링 부트 시작하기 (1) - 스프링 콘셉트 공부 (0) | 2023.07.10 |
---|---|
48, 49 - Spring Boot : 회원가입 게시판 생성 (1) (0) | 2023.07.07 |
47 - Spring Boot : JSPCookBook 프로젝트 생성 (0) | 2023.07.05 |
46 - Spring : 의존성 주입 (0) | 2023.07.04 |
Spring Boot 설정 (0) | 2023.07.03 |