-
Notifications
You must be signed in to change notification settings - Fork 1
Home
웹프레임워크 기말과제 보고서 지식정보학과 1514043 최재호
-
프로젝트 개요 본 프로젝트는 “한성대학교 종합정보시스템” 기능 중 몇 가지 기능을 Spring Framework를 통해 구현한다. 웹페이지는 Spring MVC 패턴을 사용하였고, 데이터베이스의 연동, Spring web Form, Data Binding, Data Validation, Data Buffering 그리고 Spring Security의 기능을 사용하여 구현하도록 했다.
-
프로젝트 구조. 프로젝트의 구조는 다음과 같다.
: Controller
: dao : filter : Model : Service
: resource 파일
: context 파일
: View
- 단계별 수행 과정.
- 인증 관련 파일 security-context.xml
- 첫페이지 home.jsp URL: http://localhost:8080/finalproject/
-
Controller 매핑 정보
-
페이지 화면
여기서 로그인 하기 버튼을 누르면 다음 url로 매핑이된다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<title>종합정보시스템</title> 로그인 하기- 두 번째 페이지 : login.jsp URL : http://localhost:8080/finalproject/login
- 관련 소스
- 페이지 화면
소스 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<title>로그인 사이트</title>로그인 페이지에서는 Spring securtiy를 활용하여 작성하였으며, 아이디를 제대로 출력하지 않았을 경우에 다시 작성하도록 오류 메시지를 나오게 하였다. 또한 로그아웃을 기능을 만들어서, 로그아웃을 할 경우 다시 login페이지로 매핑되도록 구현하였다.
- Logincontroller.java @Controller public class LoginController { @RequestMapping("/login") public String showLogin(@RequestParam (value="error", required=false) String error, @RequestParam (value="logout", required=false) String logout, Model model) { if(error!= null) { model.addAttribute("errorMsg","아이디와 비밀번호를 확인하세요."); } if(logout!= null) { model.addAttribute("logoutMsg","로그아웃 되었습니다."); } return "login"; } }
2-1) 로그인이 실패한 경우 페이지
로그인이 성공한 경우에는 다음 페이지로 이동한다.
로그인을 할 수 있는 멤버의 경우는 DB에서 조회하여 Spring에서 인증을 해준다. DB는 users 테이블과 authorites 테이블을 이용하였다. Spring security 사용하였다.
관련 DB 테이블에 대해서 보자면 이렇다.
- 세 번째 페이지(login성공 이후 ) : menu.jsp
URL :http://localhost:8080/finalproject/menu
- MenuController.java
인증정보 : <intercept-url pattern="/menu“ access="isAuthenticated()" /> :인증을 받은 사용자만이 접근이 가능하다.
@Controller public class MenuController {
@RequestMapping(value = "/menu", method = RequestMethod.GET)
public String showMenu() {
return "menu";
}
}
이후 웹페이지는 모두 인증된 사용자만이 접근이 가능하다.
3_1) 학기별 이수학점 조회 페이지 : courses.jsp
URL : http://localhost:8080/finalproject/courses
학기별 이수 학점 조회 페이지의 경우는 DB에 있는 수강정보를 통해 출력하였다. 수강년도와 수강학기를 group으로
묶어서 출력하도록하였고, 비고 란의 상세보기를 누르면 각 수강 학기의 상세 과목에 대한 정보를 볼 수 있다.
또한 취득학점의 총계도 확인할 수 있다.
//첫화면, 그룹 단위로 볼수 있는 화면 @RequestMapping("/courses") public String showSemesterCourses(Model model) { List courses = courseService.getGroupCurrent(); model.addAttribute("courses", courses); return "courses"; //view를 만들어준다. }
(1) Model : Course.java
(2) DAO : CourseDao.java
(3) Service: CourseService.java
(4) Controller : CourseController.java
이렇게 관련된 model, controller, service, dao 가 있다.
3_1_1) 상세과목 조회 페이지 : semester.jsp
URL:파라미터 값에 따라 다르게 나오도록 구현하였다.
http://localhost:8080/finalproject/courses/semester?year=?&semester=?
@RequestMapping("/courses/semester") public String showSemesterCourses(@RequestParam String year,@RequestParam String semester, Model model) { List courses = courseService.getSemesterCurrent(year, semester); model.addAttribute("courses", courses);
return "semester"; //view를 만들어준다.
}
밑에 이전페이지를 누르면 학기별 이수학점 조회 페이지로 돌아가게 되고,
메뉴로 돌아가기를 누르면 menu 페이지로 돌아가게 된다.
3_2) 수강신청 하기 페이지 : sign.jsp
http://localhost:8080/finalproject/sign
-
2021학년도 1학기 수강신청을 할 수 있는 페이지이다.
-
수강신청을 누르면 action="${pageContext.request.contextPath}/docreate 을 통해 docreate을 RequestMapping 된다.
//수강신청 Db에 저장. data validation 필요 @RequestMapping("/docreate") public String docreate(Model model, @Valid Course course, BindingResult result) { //DB에 저장해야함 if(result.hasErrors()) { System.out.println("== Form data does not validated =="); List errors = result.getAllErrors(); for(ObjectError error:errors) { System.out.println(error.getDefaultMessage()); } return "sign"; //다시 입력을 받게 보냄 }
courseService.insert(course); //수강신청하기.
return "signSuccess"; //view를 만들어준다. 웹폼을 만든다.
}
이 페이지에서 Data Binding , Data Validation, Data Buffering 기술을 사용하였다.
- 아무것도 작성하지 않을 경우에는 data validation을 통해 에러 메시지를 출력하도록 하였다.
- 에러메시지 관련 코드
수강신청을 제대로 안한 경우 위와같이 sign으로 매핑되고, 수강신청을 제대로 작성한 경우 signSuccess로 매핑된다.
3_2_1) 수강신청 성공 페이지 : signSuccess.jsp
http://localhost:8080/finalproject/docreate
수강신청 성공페이지이다. 수강신청 계속하기를 누르면 수강신청페이지로 돌아가고, 수강신청 조회하기를 누르면 수강신청 조회페이지로 가게 된다.
3_3) 수강신청 조회 페이지 : signLookup.jsp
2021학년도 1학기 수강신청을 성공한 과목들을 출력해주는 페이지이다.
수강신청 계속하기를 누르면 수강신청을 할 수 있는 페이지로 돌아간다.
URL : http://localhost:8080/finalproject/signLookup?year=2021&semester=1
url에 직접 year값과 semester값을 주어서, 나오게 하였다.
3_4) 로그아웃 페이지 : login.jsp
로그아웃을 한 경우 login.jsp로 매핑하고, ?logout을 보내주고 로그아웃 메시지를 출력해준다.
컨트롤러에서. error! = null 의 경우에 메시지를 출력하도록 하였다.
- 데이터베이스 구조
- course 테이블
- 결론 및 느낀점
Spring framework를 통해 처음으로 간단한 페이지를 만들어 봤는데, 이전에 JSP를 이용해서 만들때와 정말 다른점이 많다는 것을 느꼈다. 많은 부분이 Spring이 해주고 개발자가 할 일은 어느정도 정해져 있는 것이라고 생각이 들엇다. 프레임워크를 정말 잘 다룰 수 있다면, 개발을 훨씬 효율적으로 할 수 있을 거라고 느꼈고 프레임워크에 대한 공부의 필요성을 정말 많이 느꼈다. 이번 과제를 통해 간단한 웹페이지를 만들었지만 정말 서비스가 되는 페이지를 만들기 위해 공부를 열심히 해야겠다고 다짐하는 좋은 경험이 되었다. 또한 이번 학기 동안 웹프레임 워크 1 과목을 들으면서 배웠던 지식들을 다시한번 적용 시키고 공부해야겟다는 생각이 들었다.