유디의 공간정보·개발일기

5. 0907_Spring MVC(계속), Spring까지 같이 사용하기 본문

Spring, Mybatis

5. 0907_Spring MVC(계속), Spring까지 같이 사용하기

55yudi 2021. 9. 7. 12:29

ctrl + t 를 누르고 비교할 파일들을 선택 -  마우스 우클릭 - Compared - each other

-- 두 파일을 비교할 수 있다.

-- 다른 부분이 있으면 ㅁ로 스크롤바 옆에 보여줌

 

- ctrl + F11 : 서버 실행

 

- 실무에서는 보안때문에 webapp 폴더에 jsp파일을 두지 않는다.

   url을 따라 아무나 접근이 가능하기 때문에 

 

- name을 선택하고 ctrl + shift + R : 해당 이름의 파일을 찾아서 오픈해 줌

 

- 6번째 줄 : Spring bean으로 생성하기 위한 Annotation

- 9번째 줄 " " : url

- 11번째 줄 " " : jsp파일 이름

 

- Spring MVC 개요

컨트롤러 : HomeController.java, EmpController.java 파일

: views폴더 안에 만들었던 emp-list.jsp파일

 

- 왜 이렇게 복잡하게 해야 할까?

   보안 때문

 

- @Controller -> HandlerMapping

- 같은 패키지 안에 Controller 파일이 두 개가 있어서 Mapped url이 두개로 나타남

 

- web.xml에 xml파일 이름이 들어있음

 

- alt + ←, → : 지금 열린 페이지와 이전 페이지를 이동하게 함

 


 MyBatis와 Spring을 쓰기

 

- 패키지 만들어서 파일 넣어둠

- root-context.xml 코드 수정

- servlet-context.xml 코드 수정

- emp-list.jsp / 전체사원목록 출력, 이름만 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>전체사원목록 출력</h1>
	<!-- <%= request.getAttribute("list") %> -->
	<c:forEach items="${list}" var="vo">
		${vo.lastName}<br>
	</c:forEach>
</body>
</html>

다시 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>100번 부서 사원목록출력</h1>
	<c:forEach items="${list}" var="vo">
		${vo.lastName}<br>
	</c:forEach>
</body>
</html>

- EmpVO에 Getter and Setter 생성

 

- 이게 뭐라고 계속 서버 404에러떠서 안되다가 마지막에 됨,, (톰캣 예민한자식,,약올리나,,)

근데 왜 한놈만 나와

- deptId 메서드로 참조하게 바꿈

- EmpController 코드

package lx.edu.team8.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

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

import lx.edu.team8.dao.EmpDAO;
import lx.edu.team8.vo.EmpVO;

@Controller//spring bean을 생성하는 annotation
public class EmpController {

	@Autowired
	EmpDAO dao;
	
	@RequestMapping("emp-list.do")//url
	public  String getForm(HttpServletRequest req) throws Exception {
		//이 메서드에서 무엇을 해야하나?
		//EmpDAO를 가져오고 Autowired를 걸면 된다.
		//db의 데이터를 가져온다.
		List<EmpVO> list = dao.getEmpListByDeptId(100);
		//list를 jsp에 전달해야 한다. -> request에 넣어둔다.
		req.setAttribute("list", list);
		
		return "emp-list";//jsp파일 이름
	}
}

아항


- home.jsp 코드 수정

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" contentType="text/html; charset=UTF-8" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  The time on the server is ${serverTime}. </P>
<form action="emp-list.do">
	dept:<input name="deptId"><br>
	<input type="submit" value="부서원보기">
</form>
</body>
</html>

- 코드 설명

  <form action="emp-list.do">

  <!-- 액션태그대로 서버에 요청이 감->EmpController의 @requestmapping이 작동->그 안의 get메서드가 실행 -->

  dept:<input name="deptId"><br>

  <!-- name: 서버에 전송되는 부분의 key -->

- Maaped url이 잘 연결돼서 전송됨을 볼 수 있다.


- input 박스에 부서번호를 입력한대로 부서원이 나오도록 하기


- addrbook 방명록

- dbeaver에 sql코드 입력

use hr;

CREATE TABLE addrbook (
  ab_id int(11) NOT NULL,
  ab_name varchar(15) NOT NULL,
  ab_email varchar(50) DEFAULT NULL,
  ab_comdept varchar(20) NOT NULL,
  ab_birth varchar(10) NOT NULL,
  ab_tel varchar(20) DEFAULT NULL,
  ab_memo varchar(100) DEFAULT NULL,
  PRIMARY KEY (ab_id)
);

select * from addrbook;

 

- 폴더 생성하고 파일 복붙

 

- AddrbookController.java 클래스 생성

package lx.edu.team8.controller;

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

@Controller
public class AddrbookController {

	@RequestMapping("addrbook_form.do")
	public String getForm() throws Exception {
		return "addrbook/addrbook_form";//.jsp는 생략
	}
}

 

http://localhost:9000/team8/register_addrbook.do

 

- 변수를 VO에 가져오고 toString()해줌

 

- 데이터 입력하기

  VO에 getter and setter 만들기 전이라 값을 넣고 저장버튼 누르면 null값이 나옴

 

- getter and setter 만들어주기

  다시 표에 데이터 넣고 저장 버튼 눌러서 실행하면 입력한 데이터가 그대로 잘 들어온 것을 확인할 수 있다.

 

- AddrbookDAO

- 코드 비교

 

- css 추가

  - addrbook_form.jsp 에 코드 수정

 - 새로고침하면 css가 적용됨

 

- mapper-addrbook.xml 생성

  insert 태그로 insert sql문 넣기 (아니 여태 안되다가 되는건 뭐야..? 농락이야?ㅠㅠ?)

<?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="mapper-addrbook">

   <insert id="create" parameterType="lx.edu.team8.vo.AddrbookVO">
   		insert into addrbook(ab_name, ab_email, ab_comdept, ab_birth, ab_tel, ab_memo)
   		values(#{abName}, #{abEmail}, #{abComdept}, #{abBirth}, #{abTel}, #{abMemo});
   
   </insert>
   
</mapper>

 

- 브라우저에서 다시 데이터 입력하고 저장버튼을 누르면

  이클립스 콘솔창과 dbeaver(select실행)에 입력한 정보가 들어와있다.

이클립스 콘솔창
dbeaver

 

- 실습하기(과제6)

 

목록을 출력하는 기능을 구현하시오.

1. list를보여주는 jsp를 복사합니다.
2. 컨트롤러의 메서드를 구현합니다.
3. 테스트합니다.
4. 등록폼에서 목록으로 요청될 수 있도록 수정합니다.