툴은 sts를 사용할 것이다.
혹시라도 프로젝트를 만들 때 mvc가 뜨지 않는다면 만들어둔 파일 spring-workspace에 들어가서 metadata들어가서 플러그 인스 들어가서 아래쪽에 있는 content.core안에 https-content.xml파일을 넣어줘야 한다.



버전이 안맞는다면 프로젝트 팩트 들어가서 자바 버전을 11로 맞춰주셔야 합니다.



① 웹브라우저에게 정보요청을 받은 디스패쳐서블릿은 어느 컨트롤러에 해당 요청을 전송할지 결정
② 디스패쳐 서블릿은 핸들러 매핑에 어느 컨트롤러를 사용할건지 물어봄.
③ 결정된 컨트롤러는 해당요청을 수행하게 됨
④ 해당요청을 처리한 컨트롤러는 디스패쳐서블릿에 결과를 보냄. 이 과정에서 Model이 생성되어 View(JSP)에서 같이 사용됨
⑤ ModelAndView는 실제 JSP정보를 갖고 있지 않기 때문에 뷰리졸버가 실제 JSP이름으로 변환하여 해당 view를 검색함.
⑥ 검색한 결과를 View에 전송
⑦ View는 모든 과정에서 처리된 결과를 화면으로 표현함
⑧ 마지막으로 디스패쳐서블릿이 웹브라우저에 최종결과를 출력


servlet-context.xml 파일은 Spring MVC 애플리케이션에서 웹 요청을 처리하고, 컨트롤러와 뷰 파일을 연결하며, 정적 리소스를 제공하기 위한 다양한 설정을 관리하는 역할을 한다. 이 파일을 통해 컨트롤러, 뷰 리졸버, 리소스 경로 등을 정의하고 애플리케이션의 웹 구성 요소를 설정할 수 있다.
이클립스에 있던 멤버 폴더를 스프링 web-inf 안에다가 넣는다. 이건 외부에서 접근을 할 수가 없는 폴더.

왜 <%=request.getContextPath() %>를 붙여야 하냐고요?
애플리케이션이 어떤 서버에 배포되더라도, 또는 경로가 바뀌더라도 <%=request.getContextPath() %>를 사용하면 JSP 페이지가 항상 현재 애플리케이션의 루트 경로를 기준으로 파일을 찾는다.
예를 들어, 애플리케이션의 Context Path가 /myApp일 경우, <%=request.getContextPath() %>/resources/css/style2.css는 /myApp/resources/css/style2.css로 변환된다. 이렇게 하면 JSP 파일이 항상 루트 경로를 기준으로 CSS 파일을 찾을 수 있다.
요약하자면 <%=request.getContextPath() %>는 애플리케이션의 위치나 배포 환경이 달라지더라도 JSP 페이지에서 상대적인 파일 경로를 일관되게 지정할 수 있도록 돕는 방식.
자꾸 까먹는데 까먹지 말기..ㅠㅠ



메소드를 하나 만들어줍니다.
1.
@RequestMapping은 특정 URL 경로와 이 메서드를 매핑하는 역할을 한다.
value 속성으로 URL 경로를 지정하고, method 속성으로 HTTP 요청 방식을 설정. 여기서는 GET 방식만을 받도록 RequestMethod.GET으로 지정했다.
@RequestMapping으로 특정 URL과 메서드를 매핑하여, 각각의 URL 요청에 맞는 JSP 페이지가 화면에 출력되도록 설정했다. WEB-INF 폴더에 있는 JSP 파일은 직접 URL로 접근할 수 없기 때문에 Spring MVC에서 이렇게 컨트롤러 메서드를 통해 접근하게 된다.
public String?
public String이 사용된 이유는 Spring MVC에서 컨트롤러 메서드가 반환하는 값이 뷰 이름으로 해석되기 때문이다. 이 반환 값은 JSP 페이지나 HTML 페이지를 렌더링할 때 사용된다.




MemberController 클래스 안에
private static final Logger logger =LoggerFactory.getLogger(MemberController.class); 를 적어준다.
?? : 이 코드는 Spring 프로젝트에서 로깅(logging)을 위해 사용하는 Logger 객체를 초기화하는 부분. Spring을 포함한 Java 애플리케이션에서는 Logger를 통해 애플리케이션의 실행 정보를 기록하여 개발 및 유지보수에 활용한다.
Maven 프로젝트에서 사용하는 설정 파일로, 프로젝트의 의존성(dependencies), 빌드 설정(build configurations), 플러그인(plugins) 등을 관리하는 역할을 한다. Spring이나 Java 프로젝트에서 pom.xml 파일을 통해 라이브러리와 버전 정보를 정의하면, Maven이 해당 라이브러리를 자동으로 다운로드하고 프로젝트에 포함시켜준다.




버전을 바꿔준다. 자바버전 11 4.3.3
스프링 버전을 바꾼뒤에 저장하고 창을닫은 다음에 레파지토리스 안에 있는 파일을 전부 지운다.
버전 맞추기 위해서!!! 전부 지운뒤에 다시 스프링을 실행하면 자동으로 다운이 받아지고 레파지스토리에는 파일들이 생성된다.
혹시라도 프로젝트에 느낌표가 뜨면 프로젝트 리플레쉬 해주면 됩니다.

서비스 패키지 안에 test class 패키지 하나생성.


Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다.
Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다.
스프링 프로젝트를 처음 실행시
xml 설정파일에서 bean 태그에 등록된 특정 클래스는
스프링 어플리케이션이 bean에 등록되어있는 클래스를 객체 생성시켜서 메모리에 위치시킨다.
bean은 쉽게말하면 개발자가 스프링에게 객체 생성 요청하는 방법이라고 보면 된다.
Bean 등록 방법 2가지 방법
클래스에 @등록
xml 설정파일에 직접 bean 태그를 등록

멤버 컨트롤러로 가서 Test를 주입한다.

로거를 찍고 프로젝트를 run as를 돌려보면 콘솔창에 이렇게 뜨게 된다.
아~ 이클립스에서는 객체를 new로 생성해서 사용하고 그랬는데 스프링에서는 bean에 등록을 하고 불러서 사용을 하는구나~~~ 라고 생각해
서블릿 컨텍스트 xml 에 들어가서 설정해주기
<beans:bean id="uploadPath" class="java.lang.String">
<beans:constructor-arg value="D:/dev/springUpload"></beans:constructor-arg>
</beans:bean>
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="10485760" />
</beans:bean>

클래스를 String 타입으로 주고 이름을 uploadPath로 지정하겠다.
경로는 D드라이브 안에 dev안에 springUpload 안에다가 넣겠다.
스프링은 좀 더 편리하지만 아무래도 설정을 하는것이 어렵고 에러가 났을 때 무조건 404에러가 뜨기 때문에 에러를 잡기가 좀처럼 쉽지 않다고 한다. 팀 프로젝트를 스프링으로 한다고 하는데 에러 나지 않게 조심해야할듯...