ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Boot] Gradle
    Spring/Boot 2022. 9. 10. 20:41

    workspace 폴더 바꾸기

     

    기본 설정

     
     

     

    프로젝트 생성

     


    server 연결

    build.gradle

     

    src\main\resources\application.properties

    # Server port
    server.port = 8070

     

    html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>index.html</title>
    </head>
    <body>
    	<h1>스트링 부트 시작페이지</h1>
    	<img src="images/베어배경1.jpg" width="500">
    </body>
    </html>

     

    open web browser


    JSP

    build.gradle

    plugins {
    	id 'org.springframework.boot' version '2.5.3'
    	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    	id 'java'
    }
    
    group = 'com.ecl'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    
    repositories {
    	mavenCentral()
    }
    
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    	
    	implementation 'javax.servlet:jstl'
        implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
    }
    
    test {
    	useJUnitPlatform()
    }

     

    src\main\resources\application.properties

    # Server port
    server.port=8070
    
    # about JSP 
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp

     

    package com.ecl.g02;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class SpringBootController {
    	@RequestMapping("/")
    	public @ResponseBody String root() {
    		return "<h1>JSP in Gradle</h1>";
    		//@RequestMapping 값이 "/"이고 리턴값이 "main"이라면
    		// http://localhost:8070/ 의 결과는 main.jsp이겠지만(별도 경로 설정 및 폴더 생성 필요)
    		// 함수 이름에 @ResponseBody가 있으면 리턴되는 문자열이 웹 브라우져에 직접 쓰여지게 됨
    	}
    }

     

    package com.ecl.g02;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class SpringBootController {
    	@RequestMapping("/")
    	public @ResponseBody String root() {
    		return "<h1>JSP in Gradle</h1>";
    		//@RequestMapping 값이 "/" 이고 리턴값이 "main" 이라면
    		// http://localhost:8070/ 의 결과는 main.jsp  이겠지만(별도 경로 설정 및 폴더 생성 필요)
    		// 함수 이름에 @ResponseBody 가 있으면 리턴되는 문자열이 웹 브라우져에 직접 쓰여지게 됩니다
    	}
    	
    	@RequestMapping("/test1")     // localhost:8070/test1
    	public String test1() {
            return "main";          
            // 실제 호출 될 webapp/WEB-INF/views/main.jsp       
        }
    	
    	@RequestMapping("/test2")    // localhost:8070/test2
        public String test2() {
            return "sub/sub";      // 실제 호출 될 /WEB-INF/views/sub/sub.jsp       
        }
    }

     

    src\main\webapp\WEB-INF\views\main.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>

     

    src\main\webapp\WEB-INF\views\sub\sub.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>

    Model

    build.gradle

    plugins {
    	id 'org.springframework.boot' version '2.7.2'
    	id 'io.spring.dependency-management' version '1.0.12.RELEASE'
    	id 'java'
    }
    group = 'com.ecl'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    repositories {
    	mavenCentral()
    }
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    
    	implementation 'javax.servlet:jstl'
        implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
    }
    tasks.named('test') {
    	useJUnitPlatform()
    }

    src\main\resources\application.properties

    # Server port
    server.port=8070
    
    # about JSP 
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp
     
    refresh 해주기

     

    package com.ecl.g03;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class ModelController {
    	@RequestMapping("/")
    	public @ResponseBody String root() throws Exception{
    		return "<h1>Model & View</h1>";
    	}
    이 안에 코드 추가
    }

     

    	@RequestMapping("/test1")
    	public String test1(Model model, HttpServletRequest request){
    		// 리턴되는 jsp 파일까지만 해당 내용을 전달할 수 있는 1회용 자료 전달 도구
    		model.addAttribute("name1","홍길동");
    		// request의 수명이 다하는 순간까지는 내용을 살려서 다시 전달할 수 있는 전달 도구
    		request.setAttribute("name2", "김하나");
    		return "test1";
    	}

    src\main\webapp\WEB-INF\views\test1.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>test1</title>
    </head>
    <body>
    
    <h1><%out.println("Model:Hello World"); %></h1>
    <h1>당신의 이름은 ${name1 }</h1>
    <h1>당신의 또 다른 이름은 ${name2 }</h1>
    
    </body>
    </html>
     

     

    ModelController 코드 추가

    	@RequestMapping("/test2")
        public String test2(Model model, HttpServletRequest request) {
            model.addAttribute("name1", "홍길동");
            request.setAttribute("name2", "김하나");
            return "redirect:/test3?name1=홍길동";       
        }
    	@RequestMapping("/test3")
    	 public String test3(Model model, HttpServletRequest request) {
        	String name1=(String)model.getAttribute("name1");
        	String name2=(String)model.getAttribute("name2");
            model.addAttribute("name1", name1);
            request.setAttribute("name2", name2);
        	System.out.println(name1+" "+name2);
    		return "test3";   
        }

    src\main\webapp\WEB-INF\views\test3.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>test3</title>
    </head>
    <body>
    
    <h1><%out.println("Model:Hello World"); %></h1>
    <h1>당신의 이름은 ${name1 }</h1>
    <h1>당신의 또 다른 이름은 ${name2 }</h1>
    
    </body>
    </html>

     

    	String name4;
    	String name5;
    	@RequestMapping("/test2")
        public String test2(Model model, HttpServletRequest request) {
    		
    		model.addAttribute("name1", "홍길동");
    		request.setAttribute("name2" , "김하나");
    		
    		request.setAttribute("model", model);
    	
    		name4 = "홍길동";
    		name5 = "김하나";
    		
    		return "redirect:/test3";
    	}
    	
    	
    	@RequestMapping("/test3")
    	 public String test3(Model model, HttpServletRequest request) {
            // 새로운 객체가 매개변수로 지정되어 전달되어지는 model과 request가 적용되지 않음.
            // test2 메서드에서 보내려고 했던 model과 request는 전달인수로 보낸게 아니기 때문에 
            // test3 메서드의 매개변수에 저장되지 않음.
            // request와 model의 내용을 꺼내쓰는 건 return 되는 jsp 파일 내부만 가능
    		// model=(Model)request.getAttribute("model"); // 전달 불가능
    		model.addAttribute("name1", name4);
    		request.setAttribute("name2", name5);
    		return "test3";   
        }
     

     

    ModelController 코드 추가

    	@RequestMapping("/test4")
        public ModelAndView test2() {
        	// 데이터와 뷰를 동시에 설정이 가능
            ModelAndView mav = new ModelAndView();
            List<String> list = new ArrayList<String>();
            list.add("test1");   
            list.add("test2");     
            list.add("test3");
            mav.addObject("lists", list);      
            mav.addObject("ObjectTest", "테스트입니다."); 
            mav.addObject("name", "홍길동");	   
            mav.setViewName("view/myView");
            return mav;     
        }

    src\main\webapp\WEB-INF\views\myView.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <h1><%out.println("Model(Sub):Hello World"); %></h1>
    <h1> ${ObjectTest }</h1>
    <h1>${lists }</h1><br>
    <c:forEach var="mylist" items="${lists }">
    	<h1>${mylist }</h1>
    </c:forEach>
    
    </body>
    </html>

    Parameter

    src\main\java\com\ecl\g04\MemberDto.java

    package com.ecl.g04;
    
    public class MemberDto {
    	private String id;
    	private String name;
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }

    src\main\java\com\ecl\g04\FormDataController.java

    package com.ecl.g04;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class FormDataController {
    	@RequestMapping("/")
        public String root() throws Exception{
            return "testForm";
        }
    추가될 내용
    }

    src\main\webapp\WEB-INF\views\testForm.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>
    
    <form action="test1">
    	<table border="1" cellspacing="0">
    		<tr><th>아이디</th><td><input type="text" name="id"/></td></tr>
    		<tr><th>이름</th><td><input type="text" name="name"/></td></tr>
    		<tr><td colspan="2" align="center">
    			<input type="submit" value="전송"/></td></tr>
    	</table>
    </form>
    
    </body>
    </html>
     
     
    @RequestParam
    	@RequestMapping("/test1")
        public String test1(HttpServletRequest request, Model model) {
        	String id = request.getParameter("id");
    		String name = request.getParameter("name");
    		model.addAttribute("id", id);
            model.addAttribute("name", name);
            return "test1";       
        }
     

    다른 방법

    	@RequestMapping("/test1")
        public String test1(HttpServletRequest request, Model model,
        		@RequestParam("id") String id,
        		@RequestParam("name") String name) {
    		model.addAttribute("id", id);
            model.addAttribute("name", name);
            return "test1";       
        }

    src\main\webapp\WEB-INF\views\test1.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <body>
    	<h1><%  out.println("#01 Hello World");%></h1>
    	<h1>당신의 이름은 ${id} 입니다.</h1>
    	<h1>당신의 이름은 ${name} 입니다.</h1>
    </body>
    </html>
     

     

    Dto객체 멤버변수 이용하기

    	@RequestMapping("/test2")
        public String test2(
        		MemberDto memberdto, Model model)  {
    		// 파라미터와 일치하는 멤버변수가 있는 객체를 만들고
    		// 이 객체를 매개변수로 사용 가능
    		// 전달된 파라미터는 매개변수에 자동 입력됨
    		model.addAttribute("id", memberdto.getId());
            model.addAttribute("name", memberdto.getName());
            return "test2";       
        }

    src\main\webapp\WEB-INF\views\test2.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <body>
    	<h1><%  out.println("#02 Hello World");%></h1>
    	<h1>당신의 이름은 ${id} 입니다.</h1>
    	<h1>당신의 이름은 ${name} 입니다.</h1>
    </body>
    </html>
    testForm에서 action test2로 변경

     

     
    Dto객체 멤버변수를 @ModelAttribute로 전송하기
    	@RequestMapping("/test2")
        public String test2(
        		@ModelAttribute("member")MemberDto memberdto, Model model)  {
    		// @ModelAttribute 매개변수를 메서드 시작과 함께 Model에 넣음
    		// 전송될 준비 완료
    		// @ModelAttribute의 역할은 model.addAttribute("member", memberdto); 라고 쓴 것과 같음
            return "test2";     
    		// 위 동작의 필수 조건
    		// 1. 파라미터 이름과 Dto 객체 멤버변수의 이름 반드시 같아야 함
    		// 2. 객체 매개변수의 이름과 클래스 이름과 반드시 같아야함. 다만 모두 소문자로 표시.  
        }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <body>
    	<h1><%  out.println("#02 Hello World");%></h1>
    	<h1>당신의 이름은 ${member.id } 입니다.</h1>
    	<h1>당신의 이름은 ${member.name} 입니다.</h1>
    </body>
    </html>
     

     

    주소창에 직접 입력하기(@PathVariable)

    	@RequestMapping("/test3/{studentId}/{name}")
    	public String getStudent(
    			@PathVariable String studentId,
    			@PathVariable String name,  
    			Model model){
    		model.addAttribute("id", studentId);
    		model.addAttribute("name", name);
    		return "test3";
    	}
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <body>
    	<h1><%  out.println("#03 Hello World");%></h1>
    	<h1>당신의 이름은 ${id} 입니다.</h1>
    	<h1>당신의 이름은 ${name} 입니다.</h1>
    </body>
    </html>

     

    'Spring > Boot' 카테고리의 다른 글

    [Boot] Transaction  (0) 2022.09.10
    [Boot] MyBatis  (0) 2022.09.10
    [Boot] JDBC  (0) 2022.09.10
    [Boot] Validation  (0) 2022.09.10
    [Boot] Lombok  (0) 2022.09.10

    댓글

Designed by Tistory.