java
springProj - controller 처리요청
rewind
2024. 1. 22. 13:16
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
<%@ 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
<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
학생 등록