1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package model; public class Student { private int id; private String name; private int grade; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", grade=" + grade + "]"; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?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 namespace="dao.IStudentDao"> <select id="selectAll" resultType="student"> select * from student </select> <select id="selectOne" parameterType="int" resultType="student"> select * from student where id=#{id} </select> <insert id="insertStudent" parameterType="student"> insert into student values (#{id}, #{name}, #{grade}) </insert> <update id="updateStudent" parameterType="student"> update student set name=#{name}, grade=#{grade} where id=#{id} </update> <delete id="deleteStudent" parameterType="int"> delete from student where id=#{id} </delete> </mapper> | cs* 필요한 쿼리 작성 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package dao; import java.util.List; import model.Student; public interface IStudentDao { public List<Student> selectAll(); public void insertStudent(Student student); public void updateStudent(Student student); public void deleteStudent(int id); public Student selectOne(int id); } | cs필요한 함수작성 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import dao.IStudentDao; import model.Student; @Service public class StudentService { @Autowired private IStudentDao sDao; public List<Student> getStudentList(){ return sDao.selectAll(); } public void addStudent(Student student){ sDao.insertStudent(student); } public void modifyStudent(Student student){ sDao.updateStudent(student); } public void deleteStudent(int id){ sDao.deleteStudent(id); } public void getStudentOne(int id){ sDao.selectOne(id); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import model.Student; import service.StudentService; @Controller public class StudentController { @Autowired private StudentService service; //studentList.do : 학생 리스트 보여주는 페이지를 요청 @RequestMapping("studentList.do") public String studentList(Model model){ model.addAttribute("studentList", service.getStudentList()); return "studentList"; } // - deleteStudent.do : 파라미터로 넘어온 학생을 삭제해주는 요청 -> 요청 처리 후 studentList.do로 리다이렉트 @RequestMapping("deleteStudent.do") public String deleteStudent(int id){ service.deleteStudent(id); return "redirect:studentList.do"; } // - addStudentForm.do : 학생 추가 페이지를 요청 @RequestMapping("addStudentForm.do") public String addStudentForm(){ return "addStudentForm"; } // - addStudent.do : 학생 추가 작업을 처리 요청 -> 요청 처리 후 studentList.do로 리다이렉트 @RequestMapping("addStudent.do") public String addStudent(Student student){ //Student클래스 참조변수를 매개변수에 두면 요청이 들어올때, //Student객체를 만들어서 파라미터 이름과 Student의 멤버변수(세터)와 이름이 같으면 해당 객체의 멤버변수에 값을 넣어줌 service.addStudent(student); return "redirect:studentList.do"; } // - modifyStudentForm.do : 학생 수정페이지를 요청 @RequestMapping("modifyStudentForm.do") public void modifyStudnetForm(){ //반환유형 void이면 받은 요청에서 .do 뗀 문자열이 view네임으로 지정됨 } // - modifyStudent.do : 학생 수정 작업을 처리 요청 @RequestMapping("modifyStudent.do") public String modifyStudent(Student student){ service.modifyStudent(student); return "redirect:studentList.do"; } } | cs |
테스트 해보기
applicationContext 복사후
1 2 3 4 5 6 | public class Test { public static void main(String[] args) { ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml"); } } | cs |
콘솔에 에러뜨나 확인 후 서버 돌려보기, 에러 유무 확인
스프링 인터셉터 : 요청이 컨트롤러에 전달되기 전에 해야될 작업을 수행
HandlerInterceptorAdapter를 상속 받음으로써 구현 가능
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // @Override //요청이 컨트롤러에서 처리 완료 후 수행할 작업 // public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, // ModelAndView modelAndView) throws Exception { // // } @Override //요청이 컨트롤러에 전달되기전에 수행할 작업 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); String userid = (String)session.getAttribute("userid"); if(userid == null){ response.sendRedirect("loginForm.do"); return false; } return true; } | cs |
↓
빈으로 등록
1 2 | @Component //빈으로 등록 public class LoginCheckInterceptor extends HandlerInterceptorAdapter{ | cs |
↓
어떤 요청 url에 대해서 인터셉터가 동작할지 설정
네임스페이스 MVC 체크
1 2 3 4 5 6 7 8 9 10 | <mvc:interceptors> <mvc:interceptor> <!-- 와일드 카드도 되고 , 여러개 중복 등록도 된다. --> <mvc:mapping path="/main.do"/> <mvc:mapping path="/memberUpdateForm.do"/> <ref bean="loginCheckInterceptor"></ref> <!-- interceptor객체가 이미 빈으로 등록되 있는 경우 bean속성에 등록된 bean id를 적어주고 --> <!-- 등록과 동시에 인터셉터 설정을 하려면 <bean class="인터셉터 클래스 풀패키지명"></bean> --> </mvc:interceptor> </mvc:interceptors> | cs |
Log4j
Log4j는 자바기반의 로깅 유틸리티로, Apache에서 만든 오픈소스 라이브러리다. (slf4j도 많이 쓰임)
요소 | 설명 |
Logger | 출력할 메시지를 Appender에 전달한다. |
Appender | 전달된 로그를 어디에 출력할 지 결정한다. (콘솔 출력, 파일 기록, DB 저장 등) |
Layout | 로그를 어떤 형식으로 출력할 지 결정한다. |
Log4j는 다음과 같은 로그 레벨을 가진다.
로그 레벨 | 설명 |
FATAL | 아주 심각한 에러가 발생한 상태를 나타낸다. |
ERROR | 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. |
WARN | 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될수 있는 경고성 메시 지를 나타낸다. |
INFO | 어떠한 상태변경과 같은 정보성 메시지를 나타낸다. |
DEBUG | 개발시 디버그 용도로 사용하는 메시지를 나타낸다. |
TRACE | 디버그 레벨이 너무 광범위한것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다. |
' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글
Day68 네이버 API - 책검색 (0) | 2016.06.24 |
---|---|
Day67 네이버 API (0) | 2016.06.23 |
Day65 Spring-student (0) | 2016.06.21 |
Day64 (0) | 2016.06.20 |
Day63 Spring-member (0) | 2016.06.17 |