Spring
2-Layered 아키텍처 스타일이라고도 한다.
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
ExamVO
package com.jungbo.k1.exam;
import lombok.Data;
@Data
public class ExamVO {
private String ch1;
private String ch2;
private String sno;
private String sname;
private int kor;
private int eng;
private int math;
private int hist;
}
ExamSerivce & ExamDao
package com.jungbo.k1.exam;
import java.util.List;
public interface ExamService {
void inserExam(ExamVO vo);
void updateExam(ExamVO vo);
void deletExam(ExamVO vo);
ExamVO getExam(ExamVO vo);
List<ExamVO> getExamList(ExamVO vo);
}
ExamServiceImpl
package com.jungbo.k1.exam;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ExamServiceImpl implements ExamService{
@Autowired
private ExamDao dao;
@Override
public List<ExamVO> getExamList(ExamVO vo) {
return dao.getExamList(vo);
}
@Override
public void inserExam(ExamVO vo) {
dao.inserExam(vo);
}
@Override
public void updateExam(ExamVO vo) {
dao.updateExam(vo);
}
@Override
public void deletExam(ExamVO vo) {
dao.deletExam(vo);
}
@Override
public ExamVO getExam(ExamVO vo) {
return dao.getExam(vo);
}
}
ExamDaoImpl
package com.jungbo.k1.exam;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class ExamDaoImpl implements ExamDao{
@Autowired
private JdbcTemplate jdbcTemplate;
String SELECT_ALL = "select * from Examtbl order by sno desc";
String SELECT_SNO = "select * from Examtbl where sno like ? order by sno desc";
String SELECT_SNAME = "select * from Examtbl where sname like ? order by sno desc";
String INSERT = "insert into Examtbl(sno, sname, kor, eng, math, hist)"
+ " values(?,?,?,?,?,?)";
String UPDATE = "update Examtbl set sname=?, kor=? , eng=?, math=?, hist=? where sno=?";
String DELETE = "DELETE FROM Examtbl WHERE sno=?";
String SELECT_ONE = "select * from Examtbl where sno=?";
@Override
public List<ExamVO> getExamList(ExamVO vo) {
if(vo.getCh1()==null || vo.getCh2()=="" || vo.getCh2().equals("")) {
return jdbcTemplate.query(SELECT_ALL, new ExamRowMapper());
}else if(vo.getCh1().equals("sno")) {
Object args[] = {"%" + vo.getCh2() +"%"};
return jdbcTemplate.query(SELECT_SNO, new ExamRowMapper(), args);
}else if(vo.getCh1().equals("sname")) {
Object args[] = {"%" + vo.getCh2() +"%"};
return jdbcTemplate.query(SELECT_SNAME, new ExamRowMapper(), args);
}
return null;
}
@Override
public void inserExam(ExamVO vo) {
Object args[] = {vo.getSno(), vo.getSname(),vo.getKor(),vo.getEng(),vo.getMath(),vo.getHist()};
jdbcTemplate.update(INSERT, args);
}
@Override
public void updateExam(ExamVO vo) {
Object args[] = {vo.getSname(),vo.getKor(),vo.getEng(),vo.getMath(),vo.getHist(), vo.getSno()};
jdbcTemplate.update(UPDATE, args);
}
@Override
public void deletExam(ExamVO vo) {
Object args[] = {vo.getSno()};
jdbcTemplate.update(DELETE, args);
}
@Override
public ExamVO getExam(ExamVO vo) {
Object args[] = {vo.getSno()};
return jdbcTemplate.queryForObject(SELECT_ONE, new ExamRowMapper(), args);
}
}
ExamRowMapper
package com.jungbo.k1.exam;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class ExamRowMapper implements RowMapper<ExamVO>{
@Override
public ExamVO mapRow(ResultSet rs, int rowNum) throws SQLException {
ExamVO m = new ExamVO();
m.setSno(rs.getString("sno"));
m.setSname(rs.getString("sname"));
m.setKor(rs.getInt("kor"));
m.setEng(rs.getInt("eng"));
m.setMath(rs.getInt("math"));
m.setHist(rs.getInt("hist"));
return m;
}
}
ExamController
package com.jungbo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.jungbo.k1.exam.ExamServiceImpl;
import com.jungbo.k1.exam.ExamVO;
@Controller
public class ExamController {
@Autowired
private ExamServiceImpl service;
@RequestMapping(value="getExamList.do")
public ModelAndView getExamList(ExamVO vo, ModelAndView mav) {
mav.addObject("li",service.getExamList(vo));
mav.setViewName("/exam/getExamList.jsp");
return mav;
}
@RequestMapping(value="/getExam.do")
public ModelAndView getExam(ExamVO vo, ModelAndView mav) {
mav.addObject("m",service.getExam(vo));
mav.setViewName("/exam/edit.jsp");
return mav;
}
@RequestMapping(value="/insertExam.do")
public String insertExam(ExamVO vo) {
service.inserExam(vo);
return "getExamList.do";
}
@RequestMapping(value="/updateExam.do")
public String updateExam(ExamVO vo) {
service.updateExam(vo);
return "getExamList.do";
}
@RequestMapping(value="/deleteExam.do")
public String deleteExam(ExamVO vo) {
service.deletExam(vo);
return "getExamList.do";
}
}
jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.jungbo.k1.exam.*" %>
<%@ page import="java.util.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ include file="/include/top.jsp" %>
<section>
<br>
<div align="center">
<h2>학생 성적 처리 조회</h2>
<table border=1>
<tr>
<td>학번</td>
<td>이름</td>
<td>국어</td>
<td>영어</td>
<td>수학</td>
<td>역사</td>
<td>합계</td>
<td>평균</td>
</tr>
<c:forEach items="${li}" var="m">
<tr>
<td>
<a href="<%=path %>/getExam.do?sno=${m.sno}">
${m.sno}
</a>
</td>
<td>${m.sname}</td>
<td>${m.kor}</td>
<td>${m.eng}</td>
<td>${m.math}</td>
<td>${m.hist}</td>
<td>${m.kor + m.eng + m.math + m.hist}</td>
<td>${(m.kor + m.eng + m.math + m.hist)/4}</td>
</tr>
</c:forEach>
</table>
<form action="<%=path %>/getExamList.do">
<table>
<tr>
<td colspan=5 align="center">
<select name="ch1">
<option value="sno">학번</option>
<option value="sname">이름</option>
</select>
<input name="ch2" type="text">
<input type="submit" value="검색">
</td>
</tr>
</table>
</form>
</div>
</section>
<%@ include file="/include/footer.jsp" %>
--------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import ="com.jungbo.k1.exam.*" %>
<%@page import ="java.util.*" %>
<%@ include file = "/include/top.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h2>성적 입력</h2>
<hr>
<form action="<%=path %>/insertExam.do">
<table border=1>
<tr>
<td>번호</td>
<td><input type=text name=sno></td>
</tr>
<tr>
<td>이름</td>
<td><input type=text name=sname></td>
</tr>
<tr>
<td>국어</td>
<td><input type=text name=kor></td>
</tr>
<tr>
<td>영어</td>
<td><input type=text name=eng></td>
</tr>
<tr>
<td>수학</td>
<td><input type=text name=math></td>
</tr>
<tr>
<td>역사</td>
<td><input type=text name=hist></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit value="저장하기">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
--------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import ="com.jungbo.k1.exam.*" %>
<%@page import ="java.util.*" %>
<%@ include file = "/include/top.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h2>성적 상세 보기</h2>
<hr>
<form action="<%=path %>/updateExam.do">
<table border=1>
<tr>
<td>번호</td>
<td><input type=text name=sno value="${m.sno}"></td>
</tr>
<tr>
<td>이름</td>
<td><input type=text name=sname value="${m.sname}"></td>
</tr>
<tr>
<td>국어</td>
<td><input type=text name=kor value="${m.kor}"></td>
</tr>
<tr>
<td>영어</td>
<td><input type=text name=eng value="${m.eng}"></td>
</tr>
<tr>
<td>수학</td>
<td><input type=text name=math value="${m.math}"></td>
</tr>
<tr>
<td>역사</td>
<td><input type=text name=hist value="${m.hist}"></td>
</tr>
<%-- <tr>
<td>합계</td>
<td><input type=text name=sum value="${m.kor + m.eng + m.math + m.hist}"></td>
</tr>
<tr>
<td>평균</td>
<td><input type=text name=avg value="${(m.kor + m.eng + m.math + m.hist)/4}"></td>
</tr>--%>
<tr>
<td colspan=2 align=center>
<input type=submit value="수정하기">
</td>
</tr>
</table>
</form>
<br>
<hr>
  <a href="<%=path %>/exam/exam.jsp">글등록</a>
  <a href="<%=path %>/deleteExam.do?sno=${m.sno}">글삭제</a>
  <a href="<%=path %>/getExamList.do">글목록</a>
</div>
</body>
</html>
Mapping을 통해 불러와 사용할 수 있고,
경로가 가장 중요하다.
어디서 어디로 호출이되는지를 흐름을 잘 이해하고
오타를 줄이도록 하자!