스프링01_컨트롤러 만들기, 데이터 전송

charl hi·2022년 1월 13일
0

Spring

목록 보기
2/25

설명?

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	<!-- 이 서블릿의 요청 처리 인프라를 정의한다. -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<!-- Spring MVC @Controller 프로그래밍 모델을 활성화한다. -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<!-- ${webappRoot}/resources 디렉토리에서 정적 리소스를 효율적으로 제공하여 /resources/**에 대한 HTTP GET 요청을 처리한다. -->
	<resources mapping="/resources/**" location="/resources/" />
	<!-- src/main/resources/ -->

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<!-- /WEB-INF/views 디렉토리의 .jsp리소스에 대한 @Controllers의 렌더링을 위해 선택한 보기를 해결한다. -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- 위의 경로를 바탕으로 클래스를 생성 후, 스프링 컨테이너에 bean(자바 객체)을 등록하겠다. -->
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<!-- 위 클래스의 속성이 prefix(접두사)인 애에게 value를 넣어준다. -->
		<beans:property name="suffix" value=".jsp" />
		<!-- 접미사로 .jsp -->
	</beans:bean>
	
	<context:component-scan base-package="com.kh.template" />
	<!-- src/main/java/com.kh.template/HomeController 을 스캔하라. 이게 없으면 HS 에 S가 사라짐 -->
	
	
	
</beans:beans>


HomeController.java

package com.kh.template;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
//@Controller : 컴포넌트로서 스캔가능하게 한다. 없으면 S가 사라짐
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}



페이지 생성

페이지 생성 규칙

  1. 컨트롤러 생성

  2. jsp 생성

  3. 컨트롤러 등록, 연동



1. 컨트롤러 생성 : MyController.java

  • src/main/java/com.kh/app03.controller/MyController.java
  1. 메소드 접근제한자는 무조건 public

  2. return 값은 주소를 가지고 있어야 한다.

  3. 매개변수는 있어도 되고, 없어도 된다.

  4. 메소드 이름은 자유


1) 직접 만들기

MyController.java

package com.kh.app03.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.kh.app03.common.UrlHandler;

@Controller
public class MyController {

	/*
	 * 	1. 메소드 접근제한자는 무조건 public
		2. return 값은 주소를 가지고 있어야 한다.
		3. 매개변수는 있어도 되고, 없어도 된다.
		4. 메소드 이름은 자유
	 * 
	 */
	
	@RequestMapping(value = "/home")
	public String home() {
		return new UrlHandler().urlHandle("home");
	}
	
	@RequestMapping("/test")
	public String test() {
		return new UrlHandler().urlHandle("test");
	}
	
	@RequestMapping("/join")
	public String join() {
		return new UrlHandler().urlHandle("join");
	}

}


UrlHandler.java

package com.kh.app03.common;

public class UrlHandler {
	public String urlHandle(String str) {
		return "/WEB-INF/views/" + str + ".jsp";
	}
}


2. ViewResolver 사용

servlet-context.xml

  • 아래를 주석처리 안하면
	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
 	<resources mapping="/resources/**" location="/resources/" />
	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>


MyController.java

package com.kh.app03.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyController {

	/*
	 * 	1. 메소드 접근제한자는 무조건 public
		2. return 값은 주소를 가지고 있어야 한다.
		3. 매개변수는 있어도 되고, 없어도 된다.
		4. 메소드 이름은 자유
	 * 
	 */
	
	@RequestMapping(value = "/home")
	public String home() {
		return "home";
	}
	
	@RequestMapping("/test")
	public String test() {
		return "test";
	}
	
	@RequestMapping("/join")
	public String join() {
		return "join";
	}

}



데이터 전송하기

✨✨ MemberController.java

  • ✨✨✨get / post 구분
package com.kh.app05.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/member")
public class MemberController {

	//get일 때만 처리하게끔 아래처럼
//	@RequestMapping(value = "/join", method = RequestMethod.GET)
	@GetMapping("/join")
	public String join() {
		System.out.println("join get 요청 처리함");
		// get+post해서, 구분을 안해놔서 두번 나옴
		// 페이지 로딩할때, submit할 때
		return "member/join";
	}
	
	//post일 때만 처리하게끔 아래처럼
//	@RequestMapping(value = "/join", method = RequestMethod.POST)
	@PostMapping("/join")
	public String join2() {
		System.out.println("join post 요청 처리함");
//		회원가입 성공하면 아래로
		return "member/join_result";
	}
}


join.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>join</h1>
	<form action="join" method="post">
		<!-- id, pwd, nick -->
		id : <input type="text" name="id"><br>
		pwd : <input type="text" name="pwd"><br>
		nick : <input type="text" name="nick"><br>
		<input type="submit" value="가입">
	</form>
</body>
</html>         


  • 가입버튼 누르면 ->

0개의 댓글