프로그래밍

[웹] Java Spring Framework 활용

RainIron 2021. 6. 25. 18:12
반응형

※ Eclipse Spring 설치 및 시작

* 메뉴에서 [Help]-[Eclipse Marketplace]-'STS'검색-Spring Tools 4 설치

 

* 프로젝트 생성

Spring Starter Project 선택

- Name은 프로젝트명

- 사용하는 자바 버전에 맞춰 Java Version을 변경하고

- Packaging을 War로 변경했다. 

- Group은 패키지명을 뜻한다.

 

필요한 환경을 설정해준다.
열심히 돌아가는 Eclipse
demo 프로젝트 생성 완료

- pom.xml: 프로젝트에 포함된 라이브러리를 알 수 있음

- Maven: 프로젝트 관리 오픈소스

Spring Boot App을 실행해 테스트해볼 수 있다.
정상 실행 완료


※ 추가 설정 및 테스트

1) src/main/webapp 안에 WEB-INF 폴더, 하위에 jsp 폴더를 생성(View Component)

2) jsp 폴더 내에 Index.jsp 파일 생성

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>index.jsp</title>
</head>
<body>
<%
   String msg = "Hello World"; // 한글도 가능
%>
<%= msg %>
</body>
</html>

 

3) application.properties 안에 코드 삽입

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

 

4) com.example.demo 패키지 안에 IndexController.class 생성

package com.example.demo.controller;

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

@RestController
public class IndexController {

   @GetMapping("/")
   // 아무 url 지정하지 않았을 경우, 아래의 함수를 실행
   // prefix = /WEB-INF/jsp/ | suffix = .jsp
   // 아래 함수를 실행하면, /WEB-INF/jsp/index.jsp를 실행
   public String index() {
      return "index";
   }
}

오류는 Move to...뭐를 눌러서 해결

 

5) pom.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.5.2</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<!--
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.2.0</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- To compile JSP files -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	
</project>

5) 실행 중 에러 발생

Web server failed to start. Port 8080 was already in use.

netstat -ano | findstr 8080

taskkill /F /pid 마지막 나온 번호

https://stackoverflow.com/questions/34253779/tomcat-server-error-port-8080-already-in-use

 

Tomcat Server Error - Port 8080 already in use

I received the following error while attempting to execute a Servlet program in Eclipse Mars EE. 'Starting Tomcat v8.0 Sever at localhost' has encountered a problem. Port 8080 required by ...

stackoverflow.com

 

그렇지만, 에러 발생

Whitelabel Error Page

단순히, 서버를 재시작하니 해결되었다. 원인 불명..

Eclipse에서 서버를 재시작할 경우, Stop 버튼을 누르고, 바로 옆에 있는 'Remove All Terminated Launches'를 눌러야 한다. 그렇지 않으면 port가 계속 열린 상태가 되어 실행되지 않는다.

(예1)

* IndexConroller.java에 추가(단순 화면 출력)

@GetMapping("/gugu") // http://localhost:8080/gugu?dan=6
//@ResponseBody: 응답 Request body에 return을 삽입
public @ResponseBody String gugu(HttpServletRequest request) {
return request.getParameter("dan");
}

@GetMapping("/gugu2") // http://localhost:8080/gugu2?dan=6
public @ResponseBody String gugu2(@RequestParam("dan") int dan) {
return dan+"";
}

 

(예2)

* IndexConroller.java에 추가(지정한 jsp 파일 호출, Server의 역할)

@GetMapping("/gugu3") // http://localhost:8080/gugu3?dan=6
   public String gugu3(@RequestParam("dan") int dan, Model m) {
	   List<String> list = new ArrayList<>();
	   for(int i = 1;i<=9;i++) {
		   list.add(String.format("%d * %d = %d", dan, i, dan*i));
	   }
	   m.addAttribute("dan", dan);
	   m.addAttribute("list", list);
	   return "gugu";
   }

* gugu.jsp 파일 생성(View)

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% //prefix="c"는 앞으로 쓰일 jstl 태그 앞에 c가 들어가야 한다는 것 %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>구구단 보기</title>
</head>
<body>
	<h3>구구단 ${dan}단 보기</h3>
	<c:forEach var = "line" items="${list}">
		<div>${line}</div>
	</c:forEach>
</body>
</html>

 

반응형