목록분류 전체보기 (444)
코딩항해기
[Spring] springframework.DispatcherServlet 구조org.springframework.web.servlet.DispatcherServlet DispatcherServlet은 이름에도 쓰여있듯이 Servlet 파일이다. Spring에서는 페이지 이동 구분을 ViewResolver가 해주기 때문에 ViewResolver에 대한 의존성을 가지고 있으minibcake.tistory.com 기존에 DispatcherServlet을 사용하기 위해 xml로 의존성을 주입했다. 밸류 값--> login boardWrite ..
JSTL이 있는 페이지에 접근을 시도하면 500 에러가 발생했다.NoClassDefFoundError로 클래스를 찾을 수 없다는 내용이다. dependency 문제였는데, https://mvnrepository.com/ 에서 dependency 태그를 찾아 넣으면서 구버전을 넣은 것이 문제였다. 톰캣 10.1을 사용하고 있으므로 개발 환경에 맞는 의존성을 주입해 해결했다. jakarta.servlet.jsp.jstl jakarta.servlet.jsp.jstl-api 3.0.2 org.glassfish.web jakarta.servlet.jsp.jstl 3.0.1 javax에서 jakarta로, jakarta로 바뀌며 jstl 구현체(org.glassfish.we..
이 경우 문제는 대체로 요청 url 패턴을 잘못 작성한 것이지만 분명 코드를 제대로 작성했고, DispatcherServlet이 생성되었다는 로그까지 확인했는데도 불구하고, 설정해둔 url패턴 요청이 될 때마다 이를 처리하지 못하고 화이트페이지를 띄우는 문제가 발생했다. 정말 xml을 몇 번을 뜯어봤는지 모르겠다...원인은 프로젝트를 생성할 때 추가된 example 코드가 문제였다. 해당 코드가 간섭을 일으켜 오류가 발생한 것으로 example 폴더를 통채로 삭제하니 DispatcherServlet이 설정해둔 url패턴에 따라 정상적으로 요청을 처리했다. 정말 Spring은 하나하나 꼼꼼하게 살펴봐야하는 것 같다...ㅠㅠ
org.springframework.web.servlet.view.InternalResourceViewResolver DispatcherServlet이 의존성을 가지고 있는 두 가지 객체 중 하나인 ViewResolver는 포워드랑 리다이렉트에 따라 path를 완성해준다. ViewResolver는 DispatcherServlet xml에 태그로 정의할 수 있다. 이 구조를 풀어보면 이러한 형태가 된다.package com.koreait.app.view.controller;public class ViewResolver { private String prefic; private String suffix; //단어의 앞 뒤에 S..
Spring Boot에서 지원하는 내장 서버 말고 로컬 서버를 추가하는 방법이다.JSP 기반 웹프로젝트를 진행할 때(eclipse에서 Servers) 사용한 아파치톰캣이다. 먼저 상단의 Run/Debug Configuration에 있는 Edit Configurations를 연다. Edit Configuration에서 +를 눌러 서버를 추가할 수 있다. 그 중 이번에 연결할 톰캣 local를 고른다. Configure...를 눌러 서버 폴더를 연결해주면 되며, 포트 번호는 HTTP port에서 설정할 수있다.Name은 자유롭게 설정할 수 있지만 Application server이름과 동일하게 하는 것을 권장하고 있다. 이 때 VM options에 -Dfile.encoding=UTF-8 를 작성하면 한글..
현재 배운 내용으로 board insert 구현하기 1. 글 작성 페이지로 사용자의 요청 받기2. 요청 추출하기 (/boardWrite)3. 요청 처리하기 (boardWriteController)4. 응답하기 (메인페이지로 이동, main.do) 톰캣 서버 세팅을 해본다고 했는데, 서버는 켜지는데 페이지 접근이 되지 않는다..ㅠ 해서 테스트를 해보지 못했기 때문에 오류가 있을 수 있다. 1번을 수행하기 위해서는 사용자로부터 입력을 받을 페이지가 필요하다.게시글 작성 페이지 글 작성을 완료하면 boardwrite.do요청이 POST형식으로 가게 된다.이 요청은 web.xml에 작성된 .do로 끝나는 모든 요청을 받는 DispatcherServlet인 ds로 가게 된다.여기에 사용된..
org.springframework.web.servlet.DispatcherServlet DispatcherServlet은 이름에도 쓰여있듯이 Servlet 파일이다. Spring에서는 페이지 이동 구분을 ViewResolver가 해주기 때문에 ViewResolver에 대한 의존성을 가지고 있으며, 객체관리를 위해 HandlerMapping을 사용하기 때문에 HandlerMapping에 대한 의존성도 가지고 있다. 그 외의 형태는 JSP기반 FrontController와 유사한 형태를 가지고 있다. 1. 사용자의 요청을 추출2. 요청에 해당하는 기능을 수행 (HandlerMapping사용)3. 응답 (ViewResolver사용) Servlet으로 구조를 보면 이러한 형태를 가지고 있다고 볼 수 있다.@W..
org.springframework.web.servlet.mvc.Controller 구조분석 JSP 기반 프로젝트에서 oooAction으로 사용자의 요청을 처리했던 것처럼 Spring에서도 oooController가 사용자의 요청을 처리한다. oooController는 스프링 프레임워크에서 제공하는 Controller를 구현한다. Controller를 구현하는 이유는 메서드 시그니처, 즉 선언부를 통일해 HandlerMapping을 사용할 수 있도록 하기 때문이다. 다 각기 다른 메서드 시그니처를 사용하면 한 번에 사용할 수도 없고, 다른 객체이기 때문에 업캐스팅 할 수도 없다. //메서드 오버라이딩 강제 == 메서드 시그니처 (선언부) 강제public interface Controller { //Act..
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping DispatcherServlet이 의존성을 가지고 있는 두 가지 객체 중 하나인 HandlerMapping은 팩토리 패턴을 지킬 수 있도록 new를 줄여주고 호출 시 해당 객체를 반환해주는 역할을 한다. DispatcherServlet xml에 태그로 정의할 수 있는데, 이러한 구조를 가진다. 밸류 값--> login main 이 구조를 java Class로 풀어보면 JSP 기반 프로젝트에서 사용했..
IoCInversion of Control 제어의 역전역전이 일어나기 전에는 직접 객체를 생성해 코드를 제어했다. 즉, 직접 관리하는 것을 의미한다. 제어의 역전이란 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 말한다. IoC 필요성직접 객체를 생성해 내부에서 관리하게 되면 변동이 생길 때마다 코드에 큰 변화가 생기게 된다. 그러나 외부에서 관리하게 되면, 제어의 역전이 일어나게 되면 외부에서 객체를 관리하므로 값이 변동되어도 코드에는 변화가 생기지 않는다. 객체 지향의 원칙을 잘 지키기 위해 필요하며, 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며, 이에 따라 변경이 유연한 코드를 성할 수 있는 구조가 되기 때문이다. 할리우드 법칙 Hollywood Principl..