이전 글에 이어서 작성해보도록 하겠습니다.
실습에 필요한 파일들을 다음과 같이 준비합니다.
MemberVO 를 작성하겠습니다.
package com.spring.member.vo;
import java.sql.Date;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
public MemberVO() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
1. MemberControllerImpl 클래스를 다음과 같이 구현합니다. 자신의 속성 memberService에 설정 파일에서 생성된 memberService 빈을 주입하기 위해 반드시 setter를 구현해야 합니다.
package com.spring.member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
public interface MemberController {
public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
package com.spring.member.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import com.spring.member.service.MemberService;
public class MemberControllerImpl extends MultiActionController implements MemberController {
private MemberService memberService;
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception {
String viewName = getViewName(request);
List membersList = memberService.listMembers();
ModelAndView mav = new ModelAndView(viewName);
mav.addObject("membersList", membersList);
return mav;
}
private String getViewName(HttpServletRequest request) throws Exception {
String contextPath = request.getContextPath();
String uri = (String) request.getAttribute("javax.servlet.include.request_uri");
if (uri == null || uri.trim().equals("")) {
uri = request.getRequestURI();
}
int begin = 0;
if (!((contextPath == null) || ("".equals(contextPath)))) {
begin = contextPath.length();
}
int end;
if (uri.indexOf(";") != -1) {
end = uri.indexOf(";");
} else if (uri.indexOf("?") != -1) {
end = uri.indexOf("?");
} else {
end = uri.length();
}
String fileName = uri.substring(begin, end);
if (fileName.indexOf(".") != -1) {
fileName = fileName.substring(0, fileName.lastIndexOf("."));
}
if (fileName.lastIndexOf("/") != -1) {
fileName = fileName.substring(fileName.lastIndexOf("/"), fileName.length());
}
return fileName;
}
}
2. MemberServiceImpl 클래스에서는 자신의 속성인 memberDAO에 빈을 주입하기 위해 setter를 구현합니다.
package com.spring.member.service;
import java.util.List;
import org.springframework.dao.DataAccessException;
public interface MemberService {
public List listMembers() throws DataAccessException;
}
package com.spring.member.service;
import java.util.List;
import org.springframework.dao.DataAccessException;
import com.spring.member.dao.MemberDAO;
public class MemberServiceImpl implements MemberService {
private MemberDAO memberDAO;
public void setMemberDAO(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
@Override
public List listMembers() throws DataAccessException {
List membersList = null;
membersList = memberDAO.selectAllMembers();
return membersList;
}
}
3. MemberDAOImpl 클래스에서는 자신의 속성 jdbcTemplate에 dataSource 빈을 주입하기 위해 setter를 이용합니다.
package com.spring.member.dao;
import java.util.List;
import org.springframework.dao.DataAccessException;
import com.spring.member.vo.MemberVO;
public interface MemberDAO {
public List selectAllMembers() throws DataAccessException ;
public int addMember(MemberVO memberVO) throws DataAccessException ;
}
package com.spring.member.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import com.spring.member.vo.MemberVO;
public class MemberDAOImpl implements MemberDAO {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public List selectAllMembers() throws DataAccessException {
String query = "select id,pwd,name,email,joinDate" + " from t_member " + " order by joinDate desc";
List membersList = new ArrayList();
membersList = this.jdbcTemplate.query(query, new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
MemberVO memberVO = new MemberVO();
memberVO.setId(rs.getString("id"));
memberVO.setPwd(rs.getString("pwd"));
memberVO.setName(rs.getString("name"));
memberVO.setEmail(rs.getString("email"));
memberVO.setJoinDate(rs.getDate("joinDate"));
return memberVO;
}
});
return membersList;
}
@Override
public int addMember(MemberVO memberVO) throws DataAccessException {
String id = memberVO.getId();
String pwd = memberVO.getPwd();
String name = memberVO.getName();
String email = memberVO.getEmail();
String query = "insert into t_member(id,pwd, name,email) values ("
+ "'" + id + "' ,"
+ "'" + pwd + "' ,"
+ "'" + name + "' ,"
+ "'" + email + "') ";
System.out.println(query);
int result = jdbcTemplate.update(query);
System.out.println(result);
return result;
}
}
4. listMembers.jsp에서는 조회한 회원 정보를 표시해줍니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta charset=UTF-8">
<title>회원 정보 출력창..</title>
</head>
<body>
<table border="1" align="center" width="80%">
<tr align="center" bgcolor="lightgreen">
<td ><b>아이디</b></td>
<td><b>비밀번호</b></td>
<td><b>이름</b></td>
<td><b>이메일</b></td>
<td><b>가입일</b></td>
</tr>
<c:forEach var="member" items="${membersList}" >
<tr align="center">
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
</tr>
</c:forEach>
</table>
<a href="${contextPath}/member/memberForm.do"><h1 style="text-align:center">회원가입</h1></a>
</body>
</html>
저의 db에 있는 회원 목록이 표시되네요