본문 바로가기
java

springProj - controller 처리요청

by rewind 2024. 1. 22.
package kr.or.ddit.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import kr.or.ddit.service.StudService;
import kr.or.ddit.vo.StudVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequestMapping("/stud")
@Controller
public class StudController {
	//DIP => DI(의존성 주입) , IOC(제어역전)
	@Autowired
	StudService studService;

/*
요청URI : /stud/create?register
요청파라미터 :
Params : register
요청방식 : POST(HTTP method)
 */
	@RequestMapping(value = "/create" , method=RequestMethod.GET , params="register")
	public String create() {
		log.info("create");
		
		return "stud/create";
	}
	
/*
요청URI : /stud/create?register
요청파라미터 : {studId=a001 , studNm=이름 , studPw=java}
Params : register
요청방식 : POST(HTTP method)
*/
	@RequestMapping(value = "/create" , method = RequestMethod.POST , params = "register")
	public String createRegister(String studId , String studNm , String studPw) {	
		StudVO studVO = new StudVO();
		studVO.setStudId(studId);
		studVO.setStudNm(studNm);
		studVO.setStudPw(studPw);
		//StudVO{studId=a001 , studNm=이름 , studPw=java , enabled=null}
		log.info("studVO : " + studVO);
		
		//학생 등록
		int result = this.studService.createRegister(studVO);
		log.info("createRegister -> result : " + result);
		
		//redirect : URL재요청
		return "redirect:/stud/detail?studId="+studId;
		
	}

}

 

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import lombok.extern.slf4j.Slf4j;

// 속성이 하나일 때는 속성명 생략 가능(value생략가능)
// [클래스 레벨]로 요청 경로를 지정
@Slf4j
@RequestMapping("/board")
@Controller // 컨트롤러 어노테이션 선언 => 자바빈등록후 관리해준다
public class BoardController {
	/*
	 * 요청URI : /board/register
	 * 요청파라미터 : x
	 * 요청방식 : get
	 * 반환타입없음(void)
	 */
	//[메소드 레벨]의 요청 경로가 덧붙여져서 최종 경로를 만들어준다
	@RequestMapping(value = "/register" , method = RequestMethod.GET)
	public void register() {
		log.info("register");
	}
	/*
	 요청URI : /board/registerTest
	 요청파라미터 : x
	 요청방식 : get
	 반환타입없음(void)
	 */
	@RequestMapping(value = "/registerTest" , method = RequestMethod.GET)
	public void registerTest() {
		log.info("registerTest");
	}
	/*
	 요청URI : /board/100 , /board/101 , ...
	 요청파라미터 : x
	 요청방식 : get
	 반환타입 : String
	 
	 경로(Path) 변수(Variable) 매핑
	 BorardVO에 boardNo 프로퍼티가 존재한다면
	 */
	@RequestMapping(value ="/{boardNo}" , method = RequestMethod.GET)
	public String read(@PathVariable("boardNo") int boardNo ) {
		log.info("read -> boardNo : " + boardNo);
		//forwarding
		return "board/read";
	}
	/*
    	요청URI : /board/1, /board/2
    	요청파라미터 : 
    	요청방식 : get
    	return 타입 : String
    	메소드명 : readTest
    
    	경로(Path) 변수(Variable) 매핑
    	BoardVO의 seq 프로퍼티
    */
	
	@RequestMapping(value = "/stud/{seq}")
	public String readTest(@PathVariable("seq") int seq) {
	
		log.info("readTest -> seq : " + seq);
		// forwarding : jsp
		return "board/read";
		
	}
	/*
	 Params매핑(잘 사용하는 방식은 아니다)
	  요청URI : /board/read?register
	  요청파라미터 : register
	 요청방식 : get -->
	 */
	@RequestMapping(value="/read" , method=RequestMethod.GET , params="register")
	public String readParams() {
		log.info("readParams");
		return "board/read";
	}
	/*
	Params매핑 
	요청URI : /board/read?modify
	요청파라미터 : register
	요청방식 : get
	*/
	@RequestMapping(value="/read" , method=RequestMethod.GET , params="modify")
	public String readModify() {
		log.info("readModify");
		return "board/read";
	}
	/*
	 Params매핑(잘 사용하는 방식은 아니다)
	  요청URI : /board/read?register
	  요청파라미터 : register
	 요청방식 : post(HTTP method)
	 */
	@RequestMapping(value = "/read" , method = RequestMethod.POST , params = "register")
	public String readParamsPost(String memEmail , String memPass , MultipartFile uploadFile) {
		log.info("readParamsPost");
		log.info("Email : " + memEmail);
		log.info("Pass : " + memPass);
		log.info("File : " + uploadFile);
		// forwarding : jsp
		return "board/read";
	}
}
package kr.or.ddit.dao;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import kr.or.ddit.vo.StudVO;
@Repository
public class StudDao {
	
	// sql 실행 객체 추후에 인터페이스로 변경!
	// view가 아니기때문에 root-context.xml에서 관리한다.
	@Autowired
	SqlSessionTemplate sqlSessionTemplate;

	public int createRegister(StudVO studVO) {
		// insert("namespace.id" , 파라미터
		return this.sqlSessionTemplate.insert("stud.createRegister" , studVO);
	}

}

 

 

package kr.or.ddit.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import kr.or.ddit.dao.StudDao;
import kr.or.ddit.service.StudService;
import kr.or.ddit.vo.StudVO;
//스프링이 자바빈으로 등록해서 관리
@Service
public class StudServiceImpl implements StudService {
	// DI , IOC
	@Autowired
	StudDao studDao;
	
	//학생등록
	@Override
	public int createRegister(StudVO studVO) {
		return this.studDao.createRegister(studVO);
	}

}
// 서비스 클래스 : 비즈니스 로직
// 스프링 MVC 구조에서 Controller와 DAO를 연결하는 역할
/*
스프링 프레임워크는 직접 클래스를 생성하는 것을 지양하고,
인터페이스를 통해 접근하는 것을 권장하고 있기 때문.(확장성)
그래서 서비스 레이어는 인터페이스(BookService)와 클래스(BookServiceImpl)를 함께 사용함

Impl : implement의 약자
*/
//"프링아 이 클래스 서비스 클래야"라고 알려주자. 프링이가 자바빈으로 등록해줌.

 

package kr.or.ddit.service;

import kr.or.ddit.vo.StudVO;

public interface StudService {

	// 학생 등록
	int createRegister(StudVO studVO);
	

}

 

package kr.or.ddit.vo;

import lombok.Data;

// 자바빈 클래스
// lombok -> PoJo에 위배
@Data
public class StudVO {
	private String studId;
	private String studNm;
	private String studPw;
	private String enabled;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="stud">
<!-- mapper.xml 의 가장 기본적인 형태 -->
	<!--
	 StudVO{studId=a001,studNm=개똥이,studPw=java,enabled=null} 
	 -->
	<insert id="createRegister" parameterType="studVO">
		insert into stud(stud_id , stud_NM , stud_PW)
		values(#{studId},#{studNm},#{studPw})
	</insert>

</mapper>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Quick Example

Upload

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Horizontal Form

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

Quick Example

Upload

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

학생 등록