본문 바로가기

jsp spring

Spring Tool Suite을 이용해 웹사이트 만들기 / 2. 첫 번째 JSP 실행하기테스트 (스프링프레임워크 / JSP SPS

728x90
반응형

참조(실습1의 블로그와 동일)

참조블로그와는 내용이 상이할수 있습니다. 버전도 다르고 제가 실습한 내용대로 내용이 추가되기 때문, 실제 오류가 나서 제방식대로 바꾼것들이 몇개있음.

실습1에서는 프로젝트를 생성하고, application.properties파일을 application.yml파일로 교체했습니다.

 

이번장에서는 서버를 구동하여 첫 JSP 페이지를 띄워보겠습니다.

 

실습1에서 생각해볼 것

1) application.yml을 사용하는 이유

2) 프로젝트 생성시 Artifect란?

Goal

- pom.xml 수정

- Mysql 데이터베이스 생성

- application.yml 작성

- JSP파일 생성 및 서버실행

1. pom.xml 수정

 

생성된 프로젝트의 pom.xml파일에 다음과 같은 두 의존성을 추가해 줍니다

- xml 파일도 계층 적으로 작성되어있기 때문에 가장 바깥쪽의 <dependencies>안에 붙여넣기하면 됩니다.

<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>

[추가한 의존성 설명]

- jstl

: The JavaServer Pages Standard Tag Library (JSTL)은 유용한 JSP 태그들의 모음입니다. JSP application에서 일상적으로 사용되는 핵심 기능들을 encapsulate하여 제공하고 있습니다.

- tomcat-embed-jasper

: SpringBoot에서는 JSP사용을 권장하지 않습니다. 따라서 SpringBoot에서 JSP파일을 컴파일하기 위해서는 tomcat-emebed-jasper를 의존성에 추가해야 합니다.

 

2. Mysql 데이터베이스 생성

- mysql workbench를 통해 프로젝트에 사용될 데이터베이스를 생성하겠습니다.

- 다음과 같은 SQL문을 작성한 뒤 데이터베이스를 생성해주세요

create database coronabook;

use coronabook;

데이터베이스 coronabook 생성완료

3. application.yml 작성

- application.yml에 port, context-path, view resolver, datasource를 설정하겠습니다.

- 다음의 사진과 같이 application.yml의 내용을 작성해주시면 됩니다. datasource의 username과 password는 mysql 사용자 id, 비밀번호를 기입해주시면 됩니다.

[application.yml 설정 설명]

- port : 9090

: 스프링 부트는 Tomcat 서버를 실행하기 위해 기본적으로 8080포트를 사용합니다. yml파일에서는 port번호를 설정할 수 있습니다.

이전프로젝트같은곳에서 톰캣서버는 항상 9090으로 저는 썼기때문에 9090으로 진행합니다.

- context-path

: URL에는 path가 있습니다. ( developer.mozilla.org/ko/docs/Learn/Common_questions/What_is_a_URL : URL이란?) context-path는 URL path의 prefix(path가 나눠진 구획에서 맨앞의 부분)를 의미합니다. ex) 로컬에서 우리의 프로젝트를 구동하면 위의 port와 context-path설정으로 인해 http://localhost:8000/coronabook이 기본 URL이 됩니다.

- spring.mvc.view.prefix & suffix

: 모든 MVC 프레임워크는 views단을 작동하게 하는 방법을 제공합니다. Spring 프레임워크는 view resolvers통해 그런 역할을 제공합니다. prefix와 suffix를 설정함으로서 views네임으로 지정한 String값을 실제 views로 mapping합니다. (이 부분은 현재 이해하기 어려울 수 있습니다. 추후에 Controller 코드를 작성하면서 다시한번 언급하겠습니다.)

- detasource

: datasource는 물리적 data source에 접근하기 위한 factory (factory 디자인 패턴을 참고하면 좋습니다)입니다. JDBC에서 작성했던 DriverManager facility의 대안으로 database connection을 생성하기 위해 URL과 고유식별 코드를 사용합니다.

- driver-class-name : MySQL Connector의 java.sql.Driver를 implements하는 클래스명을 입력합니다.

- url : database의 URL(데이터베이스의 위치)를 나타냅니다.

- username, password : mysql 사용자의 아이디와 비밀번호 입니다

 

4. JSP파일 및 컨트롤러 생성

1) JSP파일 생성

- 다음의 사진에서 노란색으로 하이라이트된 경로에 html파일과 jsp파일을 생성합니다.

[폴더 구조 설명]

- SpringBoot의 프로젝트 내 정적인 파일 (html, css 등)은 static 폴더에 저장합니다.

- JSP와 같은 views파일은 src/main/webapp/WEB-INF/views 안에 저장합니다.

* Spring MVC에서 View는 사용자가 보게 될 화면입니다. 이번 프로젝트는 View단을 JSP로 구성하겠습니다. (최종적으로는 react로 View단을 바꿔보는 작업을 진행할 예정입니다) ( JSP란? )

- JSP파일은 url을 통한 직접적인 접근을 하지 못하게 WEB-INF폴더 아래 위치하게 됩니다.

* WEB-INF 디렉토리는 외부에서 접근이 불가능합니다. Spring의 내부적인 동작방식을 통해 jsp파일에 접근할 수 있습니다. ( lhoris.tistory.com/32 )

 

2) Controller 생성

- 다음으로 com.coronabook.controller패키지를 생성한 뒤 HelloController.java파일을 만들어줍니다.

->여기서 필자는 오류가 발생했습니다. 블로그를 따라했지만 콘트롤러로직을 애플리케이션측에서 받질못해서 This application has no explicit mapping for /error, so you are seeing this as a fallback.

There was an unexpected error (type=Not Found, status=404).

No message available 이런오류가 떠서 2시간의 장정을통해.. 컨트롤럴가 애플리케이션 패키지랑 같이있으면 해결되는것을 확인하였고 실제로 구현을시켰습니다. 경로는 1)jsp생성 에 패키지경로를 참고하시면 됩니다.

또 WEB-INF 폴더를 webapp 폴더에 포함시켰어야했는데 별도로 폴더를 찢어놨어서 경로를 못찾는 그런 상황도 있었으니 저같은 실수를하셔서 시간을 낭비하지 마시기 바랍니다 ㅠㅠ

- HelloController.java의 내용은 다음 사진과 같이 작성합니다.

[HelloController 코드 설명]

- @Controller

: Spring의 Controller class는 @Controller으로 간단하게 어노테이션 될 수 있습니다. @Controller을 작성함으로써 classpath scanning으로 해당 클래스를 인식하게 되며, 특정한 interface나 다른 class를 상속하지 않아도 Controller의 기능으로 사용할 수 있습니다.

* Controller란?

: MVC패턴에서 Controller단에서는 사용자의 data를 받아, 유효성 검사를 하며 business로직의 기능들을 요청하고 요청에따른 결과값을 받아 다시 사용자에게 가공된 data를 리턴합니다.

- @GetMapping(value= "/")

: @GetMapping은 DispathcerServlet에게 URL에 "/" path로 들어온 GET방식의 요청을 받아 Hello 메서드를 실행시라고 말해줍니다. 즉, 사용자의 요청(request)와 controller의 method를 매핑해줍니다.

- model.addAttribute("message", "Hello World!");

: response할 페이지(index.jsp)에 model값을 제공합니다. model은 map자료형으로 Key와 Value를 갖습니다. "message"라는 이름에 "Hello World!"의 값이 들어고 해당 값은 response될 index.jsp페이지에서 ${message}와 같은 방식으로 사용할 수 있습니다.

- return "index";

: Hello 메서드는 String을 리턴하지만 여기서 리턴하는 index는 단순한 String값이 아닙니다. application.yml에서 설정한 prefix와 suffix가 index에 부착되어 결과적으로 Hello메서드는 view단인 index.jsp페이지를 리턴하게 됩니다.

 

3) index.jsp 작성

- index.jsp는 다음과 같이 작성해줍니다.

스프링스타트 프로젝트를 만들었는데 뭔진모르겠지만..

html하고 jsp 파일생성이 안되더라구요, 이건 아직조치를 못해서 일단 file로 생성해서 확장자명만 넣고 진행했습니다.

5. 서버 실행

- JSP파일 작성까지 완료됐으면 이제 SpringBoot Server를 실행합니다.

- src/main/java -> com.coronabook.springboot 패키지에 있는 CoronabookProjectSpringbootApplication.java 파일에서 오른쪽 마우스는 클릭하면 Run as를 선택할 수 있고 Run as에서 SpringBootApp을 실행하면 서버가 작동합니다.

- 서버가 작동한 뒤 브라우저를 열고 http://localhost:9090/coronabook를 주소창에 붙여 넣으면 다음 그림과 같이 Hello World와 테스트문구가 출력되는것을 확인할 수 있습니다.

MVC로 구현이 된것을 확인 하실수 있습니다.

728x90
반응형