728x90
Spring - 회원목록 페이지 구현
1. 컨트롤러(흐름제어)
HomeController(루트 페이지 변경)
package com.example.spring01; 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; // Controller 애노테이션 @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); // 시작페이지 mapping 변경 @RequestMapping("/") public String main(Model model){ // model : 데이터를 담는 그릇 역할, map구조로 저장된다. // model.addAttribute("변수명", 값); model.addAttribute("msg", "홈페이지 방문을 환영합니다!"); return "main"; // main.jsp로 포워딩 } // url mapping // 기본, 루트 페이지 => home메서드 호출 @RequestMapping(value = "home.do", 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); // 모델(서블릿의 request 객체를 데체한 것) model.addAttribute("serverTime", formattedDate ); // home.jsp로 포워딩 // => servlet-context.xml // <beans:property name="prefix" value="/WEB-INF/views/" /> // <beans:property name="suffix" value=".jsp" /> // 디렉토리(접두어)와 jsp(접미어)확장자를 제외하고 이름만 작성하도록 세팅 return "home"; } } | cs |
MemberController(목록페이지 url mapping)
package com.example.spring01.member.controller; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.example.spring01.member.model.dto.MemberVO; import com.example.spring01.member.service.MemberService; @Controller // 현재의 클래스를 controller bean에 등록시킴 public class MemberController { // MemberService 객체를 스프링에서 생성하여 주입시킴 @Inject MemberService memberService; // 01 회원 목록 // url pattern mapping @RequestMapping("member/list.do") public String memberList(Model model){ // controller => service => dao 요청 List<MemberVO> list = memberService.memberList(); model.addAttribute("list", list); return "member/member_list"; } } | cs |
2. 모델(비지니스로직, DB연동)
MemberVO(아이디, 비밀번호, 이름, 이메일, 회원가입일자, 회원정보수정일자)
Getter/Setter, toString 메서드 세팅
package com.example.spring01.member.model.dto; import java.sql.Date; public class MemberVO { private String userId; private String userPw; private String userName; private String userEmail; private Date userRegdate; // java.sql.Date private Date userUpdatedate; // Getter/Setter public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserPw() { return userPw; } public void setUserPw(String userPw) { this.userPw = userPw; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail; } public Date getUserRegdate() { return userRegdate; } public void setUserRegdate(Date userRegdate) { this.userRegdate = userRegdate; } public Date getUserUpdatedate() { return userUpdatedate; } public void setUserUpdatedate(Date userUpdatedate) { this.userUpdatedate = userUpdatedate; } // toString() @Override public String toString() { return "MemberVO [userId=" + userId + ", userPw=" + userPw + ", userName=" + userName + ", userEmail=" + userEmail + ", userRegdate=" + userRegdate + ", userUpdatedate=" + userUpdatedate + "]"; } } | cs |
MemberDAO(기본메서드 세팅)
package com.example.spring01.member.model.dao; import java.util.List; import com.example.spring01.member.model.dto.MemberVO; public interface MemberDAO { // 회원 목록 public List<MemberVO> memberList(); // 회원 입력 public void insertMember(MemberVO vo); // 회원 정보 상세보기 public MemberVO viewMember(); // 회원삭제 public void deleteMember(String userId); // 회원정보 수정 public void updateMember(MemberVO vo); } | cs |
MemberDAOImpl(회원목록 구현)
package com.example.spring01.member.model.dao; import java.util.List; import javax.inject.Inject; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Repository; import com.example.spring01.member.model.dto.MemberVO; // 현재 클래스를 DAO bean으로 등록시킴 @Repository public class MemberDAOImpl implements MemberDAO { // SqlSession 객체를 스프링에서 생성하여 주입시켜준다. // 의존관계 주입(Dependency Injection, DI) // 느스한 결함 // IoC(Inversion of Control, 제어의 역전) @Inject // Inject애노테이션이 없으면 sqlSession은 null상태이지만 // Inject애노테이션이 있으면 외부에서 객체를 주입시켜주게 된다. // try catch문, finally문, 객체를 close할 필요가 없어졌다. SqlSession sqlSession; // 회원목록 @Override public List<MemberVO> memberList() { return sqlSession.selectList("member.memberList"); } @Override public void insertMember(MemberVO vo) { } @Override public MemberVO viewMember() { // TODO Auto-generated method stub return null; } @Override public void deleteMember(String userId) { // TODO Auto-generated method stub } @Override public void updateMember(MemberVO vo) { // TODO Auto-generated method stub } } | cs |
memberMapper.xml(회원목록 select쿼리추가)
<?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와 중복되지 않도록 네임스페이스 기재 --> <mapper namespace="member"> <select id="memberList" resultType="com.example.spring01.member.model.dto.MemberVO"> SELECT user_id AS userId, user_name AS userName, user_email AS userEmail, user_regdate AS userRegdate FROM tbl_member ORDER BY userName </select> </mapper> | cs |
3. 서비스(비지니스로직, DB연동이외의 작업)
MemberService(기본메서드 세팅)
package com.example.spring01.member.service; import java.util.List; import com.example.spring01.member.model.dto.MemberVO; public interface MemberService { // 회원 목록 public List<MemberVO> memberList(); // 회원 입력 public void insertMember(MemberVO vo); // 회원 정보 상세보기 public MemberVO viewMember(); // 회원삭제 public void deleteMember(String userId); // 회원정보 수정 public void updateMember(MemberVO vo); } | cs |
MemberServiceImpl(회원목록 구현)
package com.example.spring01.member.service; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.example.spring01.member.model.dao.MemberDAOImpl; import com.example.spring01.member.model.dto.MemberVO; // 현재 클래스를 스프링에서 관리하는 service bean으로 등록 @Service public class MemberServiceImpl implements MemberService { // MemberDAOImpl 객체를 스프링에서 생성하여 주입시킴 @Inject MemberDAOImpl memberDao; @Override public List<MemberVO> memberList() { return memberDao.memberList(); } @Override public void insertMember(MemberVO vo) { } @Override public MemberVO viewMember() { return null; } @Override public void deleteMember(String userId) { } @Override public void updateMember(MemberVO vo) { } } | cs |
4. 뷰
member_header.jsp(기본세팅 - jstl core태그, jQuery3.1.1)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- jstl 코어 태그 --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!-- context 경로 --> <c:set var="path" value="${pageContext.request.contextPath}"/> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> </head> | cs |
member_menu.jsp(회원관리 a태그 링크추가)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- jstl 코어 태그 --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!-- context 경로 --> <c:set var="path" value="${pageContext.request.contextPath}"/> <div style="text-align: center;"> <a href="${path}/member/list.do">회원관리</a> </div> <hr> | cs |
member_list.jsp(회원목록페이지 구현완료)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>회원 목록</title> <%@ include file="../include/member_header.jsp" %> </head> <body> <%@ include file="../include/member_menu.jsp" %> <h2>회원 목록</h2> <table border="1" width="700px"> <tr> <th>아이디</th> <th>이름</th> <th>이메일</th> <th>회원가입일자</th> </tr> <c:forEach var="row" items="${list}"> <tr> <td>${row.userId}</td> <td>${row.userName}</td> <td>${row.userEmail}</td> <td>${row.userRegdate}</td> </tr> </c:forEach> </table> </body> </html> | cs |
5. 실행화면
main.jsp
member_list.jsp