Skip to content
hkd0694 edited this page Dec 10, 2017 · 1 revision

데이터베이스와 연동한 homeworkmvc 프로젝트를 실행시키면 우선 home.jsp가 실행됩니다.

여기서 security-context에서 등록한 아이디와 비밀번호 로그인폼을 만들어주어 데이터베이스 테이블 을 따로 만들어 접속가능한 아이디와 비밀번호를 입력해 줍니다. 그 후, home.jsp 를 들어가게 되면 만들어준 로그인폼이 뜨게 되고 , 자신이 등록한 아이디가 아니면 접속을 못하게 해주었고, 등록한 아이디와 비밀번호가 맞는경우 한번만 접속을 하면 그 후에 있는 페이지들은 자동적으로 들어갈수 잇게 해주었습니다.

<security:intercept-url pattern="/" access="isAuthenticated()" /> <-- 이것이 security 문으로 접속을 막게 해주는 것입니다.

아이디를 등록 후 , home.jsp를 들어가게되면

Show current College

Add a new offer

이런식으로 화면이 나오게 됩니다.

여기서 ${pageContext.request.contextPath} 이것은 현재 context의 root를 나타나게 합니다.

${pageContext.request.contextPath}/colleges 로 해주면 /colleges란 Mapping되어있는 Controller로 이동하게 합니다..

Controller

.jsp 에 있는 ${pageContext.request.contextPath}/? 여기서 ? 가 Controller 에 있는 @RequestMapping("?") RequestMapping에 있는 ? 곳으로 들어오게 된다. 만약 ${pageContext.request.contextPath}/colleges 로 지정해주면 Collegecontroller에 있는

@RequestMapping("/colleges") public String showOffers(Model model) { List colleges = collegeService.getCurrent(); model.addAttribute("colleges", colleges); return "colleges"; } @RequestMapping("/colleges")로 들어와 showOffers()함수를 실행시키게 됩니다.

Service

함수안에있는 CollegeService를 통하여 함수를 호출하여 Model로 지정한 것과 DAO를 통하여 함수를 완성시키고 return "colleges"를 해주면 이름에 맞는 .jsp로 이동하게 해준다.

Model

말그대로 데이터베이스를 이용하기 위해 모델을 지정해주어 필요할때마다 Model 안에잇는 값들을 가져다가 쓸수 있다. @Getter @Setter @NoArgsConstructor @ToString public class CollegeDivider { } lombok를 통하여 다양하게 변수들을 가져다 쓸수있다.

DAO

Model과 함께 DAO를 통하여 데이터베이스를 쿼리문을 통하여 가지고 오는 것입니다. //query and return a single object public College getCollege(String name) { String sqlStatement = "select * from college where name=?"; return jdbcTemplate.queryForObject(sqlStatement,new Object[]{name}, new RowMapper(){ @Override public College mapRow(ResultSet rs, int rowNum) throws SQLException { College college = new College(); college.setNum(rs.getInt("num")); college.setC_year(rs.getInt("c_year")); college.setC_term(rs.getInt("c_term")); college.setC_code(rs.getString("c_code")); college.setC_subject(rs.getString("c_subject")); college.setC_division(rs.getString("c_division")); college.setC_credit(rs.getInt("c_credit")); return college; } } ); }

String sqlStatement = "select * from college where name=?"; 이런식으로 쿼리문을 작성하고 안에있는 값들을 하나씩 불러올수있습니다.

과제

home.jsp에 있는 Show current College Show current College를 눌러주게 되면 내가 지금까지 들었던 과목들을 차례대로 테이블형태로 불러오게 됩니다. @RequestMapping("/colleges") public String showOffers(Model model) { List colleges = collegeService.getCurrent(); model.addAttribute("colleges", colleges); return "colleges"; } return "colleges"; 로 하게되면 colleges.jsp로 가게 되어 <c:forEach var="college" items="${colleges}"> jstl로 표현하여 출력해 주었습니다.

Add a new offer 를 누르게 되면

학기별 이수 학점 조회

이수 구분별 학점 조회

2018년 1학기 수강 신청하기

2018년 1학기 수강 신청 조회

4가지 경우로 선택하는 곳 이 나오게됩니다.

학기별 이수 학점 조회

학기별 이수학점 조회를 누르게 되면

Controller

@RequestMapping("/college1") public String showCollege1(Model model) { List csum = collegeService.getCollegeSum(); model.addAttribute("cSums", csum); return "divisionsum"; }

Service

public List getCollegeSum(){ return collegeDao.getCollegeSum(); }

DAO,Model

public List getCollegeSum() { String sqlStatment="select c_year,c_term, sum(c_credit) from college group by c_year,c_term"; return jdbcTemplate.query(sqlStatment, new RowMapper() { @Override public CollegeSum mapRow(ResultSet rs,int rowNum) throws SQLException{ CollegeSum csum = new CollegeSum(); csum.setC_year(rs.getInt("c_year")); csum.setC_term(rs.getInt("c_term")); csum.setC_credit(rs.getInt("sum(c_credit)")); return csum; } }); }

이수 구분별 학점 조회

Controller

@RequestMapping("/divider") public String showDivider(Model model) { List cdivide = collegeService.getDivider(); model.addAttribute("cdivide", cdivide); return "divide"; }

Service

public List<CollegeDivider> getDivider(){
	return collegeDao.getDivider();
}

DAO,Model

public List getDivider() { String sqlStatment="select c_division,sum(c_credit) from college group by c_division;"; List list = jdbcTemplate.query(sqlStatment, new RowMapper() { @Override public CollegeDivider mapRow(ResultSet rs,int rowNum) throws SQLException{ CollegeDivider cdivider = new CollegeDivider(); cdivider.setC_division(rs.getString("c_division")); cdivider.setC_credit(rs.getInt("sum(c_credit)")); return cdivider; } }); int sum=0; for(int i=0;i<list.size();i++) { sum+=list.get(i).getC_credit(); } list.add(new CollegeDivider("충점",sum)); return list; }

2018년 1학기 수강 신청하기

Controller

@RequestMapping("/incollege") public String incollege(Model model) { College college = new College(); college.setC_year(2018); college.setC_term(1); model.addAttribute("college",college); return "incollege"; }

DAO,Model

public boolean insert(College college) { int num = college.getNum(); int c_year = college.getC_year(); int c_term = college.getC_term(); String c_code = college.getC_code(); String c_subject = college.getC_subject(); String c_division = college.getC_division(); int c_credit = college.getC_credit(); String sqlStatement = "insert into college (num,c_year,c_term,c_code,c_subject,c_division,c_credit) values(?,?,?,?,?,?,?)";

		return (jdbcTemplate.update(sqlStatement, new Object[] {num,c_year, c_term, c_code, c_subject, c_division, c_credit}) == 1);		
	}

2018년 1학기 수강 신청 조회

Controller

@RequestMapping("/cyear") public String showYear(Model model) { List cyear = collegeService.getCollegeYear(); model.addAttribute("cyear", cyear); return "cyear"; }

Service

public List getCollegeYear(){ return collegeDao.getCollegeYear(); }

DAO,Model

public List<CollegeYear> getCollegeYear() {
	String sqlStatment="select c_year,c_term,c_code,c_subject,c_division,c_credit from college where c_year='2018';";
	return jdbcTemplate.query(sqlStatment,
			new RowMapper<CollegeYear>() {
			@Override
			public CollegeYear mapRow(ResultSet rs,int rowNum) throws SQLException{
				CollegeYear cyear = new CollegeYear();
				cyear.setC_year(rs.getInt("c_year"));
				cyear.setC_term(rs.getInt("c_term"));
				cyear.setC_code(rs.getString("c_code"));
				cyear.setC_subject(rs.getString("c_subject"));
				cyear.setC_division(rs.getString("c_division"));
				cyear.setC_credit(rs.getInt("c_credit"));
				return cyear;
			}
	});
}