Servlet JSP MVC Spring

[Spring] 게시판 프로젝트

vhxpffltm 2020. 6. 28. 16:16

우리가 이제까지 진행한 게시판을 Spring으로 나타내보자.

 

이전의 장에서 프로젝트를 만들었고 마이바티스 프레임워크를 pom.xml을 이용해 설치했을 것이다.

 

우리는 아래와 같은 프로젝트를 만들어야 한다.

 

Spring 프레임워크를 진행하면서 느낀건 복잡하다고 느겼다. 그래서 다시한번 확인하고 가자

 

pom.xml에서 추가한 마이바티스 라이브러리는 Maven Dependencies에서 확인할 수 있다. 그리고 lib에는 오라클 드라이버인 ojdbc6.jar이 포함된다. 오라클은 오픈소스가 아니므로 드라이버를 직접 다운로드하여 설치해야 한다.

 

web.xml은 다른 설정 파일을 읽어 들이는 부분과 DispatcherServlet을 매핑하는 부분이 자동으로 만들어진다. 여기서는 action-mybartis와 servlet-context를 읽도록 설정한다. action-mybatis에서 jdbc 프로퍼티를 읽어들인다.

 

mybatis의 model에는 modelConfig.xml이 있는데 이것은 MemberVO에 대한 alias를 설정하고 mapper의 member.xml에 실제 SQL쿼리를 처리하는 내용이 들어있다.

 

자바클래스와 JSP는 각각 src/java의 클래스 패키지, view 폴더내부에 jsp파일이 있다. 

 

자바의 브라우저의 URL 요청명 부분만 잠깐 보자

 

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
@Controller("memberController")//Controller 애너테이션을 이용해 maincontroller 클래스를 빈으로 자동 변환
@EnableAspectJAutoProxy//최상위 패키지에 있는 클래스에 Annotation을 적용해서 AOP를 찾을 수 있게 해준다.
public class MemberControllerImpl   implements MemberController {
//    private static final Logger logger = LoggerFactory.getLogger(MemberControllerImpl.class);
    @Autowired//기존 xml 파일에서 각각의 빈을 DI로 주입했던 기능을 코드에서 애너테이션으로 수행하고 생성자나 setter없이 속성에 빈을 주입
    private MemberService memberService;// id가 memberservice인 빈을 자동 주ㅇ입
    @Autowired
    private MemberVO memberVO ;
    
    @Override
    @RequestMapping(value="/member/listMembers.do" ,method = RequestMethod.GET)
    //두 번쨰 요청 url 요청이 위와 같으면 메인 컨트롤러 빈의 value에 있는 메서드에게 요청, get방식
    public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String viewName = getViewName(request);
//        String viewName = (String)request.getAttribute("viewName");
        //System.out.println("viewName: " +viewName);
//        logger.info("viewName: "+ viewName);
//        logger.debug("viewName: "+ viewName);
        List membersList = memberService.listMembers();
        ModelAndView mav = new ModelAndView(viewName); // viewName이 타일즈xml의 <definition>태그에 설정한 뷰이름과 일치
        mav.addObject("membersList", membersList);
        System.out.println("주석 부분은 로그를 출력하기 위한 설정 코드들");
        return mav;
        //ModelAndView 객체에 설정한 뷰이름을 타일즈 뷰리졸버로 반환
    }
 
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 viewName = uri.substring(begin, end);
        if (viewName.indexOf("."!= -1) {
            viewName = viewName.substring(0, viewName.lastIndexOf("."));
        }
        if (viewName.lastIndexOf("/"!= -1) {
            viewName = viewName.substring(viewName.lastIndexOf("/"1), viewName.length());
            //member/listMembers.do로 요청할 경우 member/listMember를 파일이름으로 가져옴
        }
        return viewName;
    }
cs

 

listmember로 게시판의 맴버 목록을 모두 확인할 수 있는 부분이다.

getviewname() 메서드를 통해 요청 URL에서 응답 JSP 파일을 얻는 해당 함수를 호출하여 jsp가 저장된 폴더 이름에 해당하는 첫 번째 요청부터 가져온다. 

 

나머지 xml과 jsp에 대한 프로젝트는 Reference를 참고하자

 

이제 로컬호스트/프로젝트명/member/listMembers.do 로 요청하면 아래와 같은 목록을 얻을 수 있다.

 

 

Reference

자바 웹을 다루는 기술