Spring MVC (스프링 웹 MVC) 강의 01 - Spring MVC란
Spring MVC 라이브러리
(DispathcerServlet.class)
https://late90.tistory.com/125?category=1013269
Spring MVC (스프링 웹 MVC) 강의 02 - 실습환경 준비하기
STS4 설치
이클립스로 대체해도 될 듯?
https://late90.tistory.com/127?category=1013269
Spring MVC (스프링 웹 MVC) 강의 03 - 메이븐을 이용한 기본 웹 프로젝트 생성하기
1. Java EE
2. Create a Maven Project
3. D:\apache-tomcat-9.0.54\webapps\ROOT폴더에서 WEB_INF폴더 복사해서 webapp폴더에 붙여넣기
그러면 WEB_INF폴더 하위에 web.xml이 있다.
4. (pom.xml)
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
5. [window탭]-[Preferences]-[JSP, HTML,CSS]-[EUC -> UTF-8]
[웹폴더 우클릭] - [Properties] - [Resource]-[UTF-8]
6. JSP라이브러리 없어서 오류 뜸
(pom.xml)
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>9.0.54</version>
</dependency>
7.[Window탭]-[Web Browser]-[1.Default system web browser]
https://late90.tistory.com/128?category=1013269
Spring MVC (스프링 웹 MVC) 강의 04 - Dispatcher Servlet 라이브러리 설정하기
(pom.xml)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
https://late90.tistory.com/130?category=1013269
Spring MVC (스프링 웹 MVC) 강의 05 - dispatcher-servlet.xml 파일
1. Dispatcher는 소스가 없기때문에 어노테이션을 할 수 없다.
Dispatcher서블릿 클래스에 URL맵핑을 해야하는데
이 URL맵핑을 web.xml에서 한다.
--------------------------------------------------참고----------------------------------------------------
[DispatcherServlet.class 우클릭]-[Copy Qualified Name]
----------------------------------------------------------------------------------------------------------
(web.xml)
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2. [WEB-INF]-[new]-[Other]-[dispatcher-sevlet.xml]
여기 매핑 정보는 뭘 넣어야 하는지는 다음 강의에 계속
https://late90.tistory.com/131?category=1013269
Spring MVC (스프링 웹 MVC) 강의 06 - 스프링 컨트롤러 IndexController 작성하기
(dispatcher-sevlet.xml)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
(IndexController.java)
package webprj;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class IndexController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("data", "Hellow Spring MVC~");
mv.setViewName("index.jsp");
return mv;
}
}
https://late90.tistory.com/132?category=1013269
Spring MVC (스프링 웹 MVC) 강의 07 - View 페이지를 위한 위치
지난시간 *
지웠는데 이건 이거대로 문제가 있음
Controller 통제 하에 뷰 문서들이 열람되어야 하기 때문이다.
그래서 뷰문서들 숨기도록 함.
[WEB-INF 하위]-[view 폴더 하위]-[index.jsp]
(IndexController.jsp )
mv.setViewName("/WEB-INF/view/index.jsp");
webapp이란 폴더는 루트 폴더인 듯 하다
--------------------------------------------------꼼수----------------------------------------------------
webapp폴더 하위 index(내용 무)을 새로 생성하여 이걸 Ctrl+f11로 하면 주소 수정없이 편하게 작업가능하다.
----------------------------------------------------------------------------------------------------------
https://late90.tistory.com/138?category=1013269
Spring MVC (스프링 웹 MVC) 강의 08 - ViewResolver 사용하기

(dispatcher-servlet.xml)
<bean id="/index" class="com.newlecture.web.controller.IndexController">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
(IndexController.java)
public class IndexController implements Controller{
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("index controller");
ModelAndView mv = new ModelAndView("index");
mv.addObject("data", "Hellow Spring MVC~");
//mv.setViewName("/WEB-INF/view/index.jsp");
return mv;
}
}
https://late90.tistory.com/139?category=1013269
Spring MVC (스프링 웹 MVC) 강의 09 - HTML 파일 설정하기
뉴렉 싸이트 html파일 index.jsp로 복붙

정적파일들 제대로 출력되지 않는 문제
CSS, images, js 폴더 webapp 폴더로 옮김
https://late90.tistory.com/140?category=1013269
Spring MVC (스프링 웹 MVC) 강의 10 - 정적파일 서비스하기
기본적으로 스프링이 정적인 파일 서비스 불가능하게 막아 놨기 때문이다.
<mvc:~~~~>태그를 쓰기 위해
스키마 파일 등등 설정을 추가해줘야한다.
(dispatcher-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<bean id="/index" class="com.newlecture.web.controller.IndexController">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:resources location="/static/" mapping="/**"></mvc:resources>
</beans>
webapp 폴더로 옮겼던 CSS, images, js 폴더를 다시 html폴더로 옮기고 폴더명 static으로 변경

주소란에 static을 루트 취급하여 지우고 실행하면 404오류가 아닌 정상적으로 된다
그래서 최하단 index파일 실행하면 정상 출력됨
https://late90.tistory.com/141?category=1013269
Spring MVC (스프링 웹 MVC) 강의 11 - 공지사항 컨트롤러 추가하기
detail.html
list.html
파일 내용을 복사하여
detail.jsp
list.jsp
파일에 붙이자
(ListController.java)
package com.newlecture.web.controller.notice;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class ListController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView("notice/list");
//mv.setViewName("/WEB-INF/view/notice/list.jsp");
return mv;
}
}
(dispatcher-servlet.xml)
<bean id="/index" class="com.newlecture.web.controller.IndexController"/>
<bean id="/notice/list" class="com.newlecture.web.controller.notice.ListController"/>
<bean id="/notice/detail" class="com.newlecture.web.controller.notice.DetailController"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:resources location="/static/" mapping="/**"></mvc:resources>
</beans>
https://late90.tistory.com/142?category=1013269
Spring MVC (스프링 웹 MVC) 강의 12 - Detail 컨트롤러 추가와 View 페이지 집중화의 필요성
Detail컨트롤러 추가 및 헤더부분이 페이지마다 중복되어 있는 점을 지적한 짧은 강의편이었음.
https://late90.tistory.com/143?category=1013269
Spring MVC (스프링 웹 MVC) 강의 13 - 페이지 공통분모 집중화
JSP는 include 지원하지만 문제점이 있으므로 사용하지 않을 것임
각 페이지마다 include하는 구문이 반복되서 생길수 있다.
이것마저도 불편해 보이므로
스프링의 Tiles라는 기능으로 대체할 것이다.
https://late90.tistory.com/144?category=1013269
Spring MVC (스프링 웹 MVC) 강의 14 - 페이지 모듈 분리하기
그냥 header footer aside 영역별 페이지 분리함.
https://late90.tistory.com/145?category=1013269
Spring MVC (스프링 웹 MVC) 강의 15 - Tiles 지시서 작성하기
이번 강의에서는
1. 어떤 조합으로 붙일지 지시사항
(tiles.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="notice.list" template="/WEB-INF/view/inc/layout.jsp">
<put-attribute name="title" value="Tiles tutorial homepage" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/list.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
<definition name="notice.detail" template="/WEB-INF/view/inc/layout.jsp">
<put-attribute name="title" value="Tiles tutorial homepage" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/detail.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
</tiles-definitions>

notice/detail
==>notice.detail
로 수정
https://late90.tistory.com/146?category=1013269
Spring MVC (스프링 웹 MVC) 강의 16 - 레이아웃 페이지 만들기와 Tiles 라이브러리 설정하기
(pom.xml)
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>


<tiles:insertAttribute name="명칭"/>
여기 추가된 "명칭"들은
tiles.xml
에서 지정한 name="명칭"과 이름이 같아야 한다.
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
https://late90.tistory.com/147?category=1013269
Spring MVC (스프링 웹 MVC) 강의 17 - Tiles ViewResolver 설정하기
(dispatcher-servlet.xml)
<bean id="/index" class="com.newlecture.web.controller.IndexController"/>
<bean id="/notice/list" class="com.newlecture.web.controller.notice.ListController"/>
<bean id="/notice/detail" class="com.newlecture.web.controller.notice.DetailController"/>
<bean
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="1" />
</bean>
<bean
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions" value="/WEB-INF/tiles.xml" />
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
<property name="order" value="2" />
</bean>
<mvc:resources location="/static/" mapping="/**"></mvc:resources>
</beans>
https://late90.tistory.com/148?category=1013269
Spring MVC (스프링 웹 MVC) 강의 18 - Tiles 설정에 Wildcard 이용하기
(tiles.xml)
<definition name="notice.*" template="/WEB-INF/view/customer/inc/layout.jsp">
<put-attribute name="title" value="공지사항" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/{1}.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
외 이름 설정시 가능한 여러 방법들name="test.definition*.message*"
name="bank/*"
name="bank/*/"
<definition name="notice.*" template="/WEB-INF/view/customer/inc/layout.jsp">
여기서 쓰인 첫번째 와일드카드
<put-attribute name="body" value="/WEB-INF/view/customer/notice/{1}.jsp" />
{1}이 첫번째 와일드 카드를 불러오는 의미임.
https://late90.tistory.com/149?category=1013269
Spring MVC (스프링 웹 MVC) 강의 19 - Root 페이지들을 위한 Layout 페이지 만들기
(tiles.xml) 수정
<tiles-definitions>
<definition name="root.*" template="/WEB-INF/view/inc/layout.jsp">
<put-attribute name="title" value="공지사항" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="body" value="/WEB-INF/view/{1}.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
<definition name="notice.*" template="/WEB-INF/view/customer/inc/layout.jsp">
<put-attribute name="title" value="공지사항" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/{1}.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
</tiles-definitions>
--------------------------------------------------설명----------------------------------------------------
name="*"라고 쓰면 모든 페이지가 해당되므로 name="root.*"이라고 썼다.
그래서 밑에 내용 계속
----------------------------------------------------------------------------------------------------------
</definition name="root.*" template=">
구문을 써줬으므로

IndexController에도 root.를 붙여주자
https://late90.tistory.com/150?category=1013269
Spring MVC (스프링 웹 MVC) 강의 20 - 데이터 서비스 클래스(NoticeService) 준비하기
com.newlecture.web.service
패키지 만들고 첨부한
NoticeService.java 붙여넣기

복사 후 오류나는 부분들 수정하기
Change~ 클릭
entity패키지 및 자바 파일(Notice.java) 붙여넣기(첨부참고)
오라클이 깔려있어야 한다.
--------------------------------------------------테이블 구조-------------------------------------------------
CREATE TABLE NOTICE
( ID NUMBER NOT NULL,
TITLE NVARCHAR2(100) NOT NULL,
WRITER_ID NVARCHAR2(50) NOT NULL,
CONTENT CLOB,
REGDATE TIMESTAMP (6) DEFAULT systimestamp NOT NULL,
HIT NUMBER DEFAULT 0 NOT NULL,
FILES NVARCHAR2(1000),
PUB NUMBER(1,0) DEFAULT 0 NOT NULL,
CONSTRAINT "NOTICE_PK" PRIMARY KEY ("ID")
)
------------------------------------------------------------------------------------------------------------------
https://late90.tistory.com/151?category=1013269
Spring MVC (스프링 웹 MVC) 강의 21 - 서비스 객체 사용하기
데이터 베이스 연결하기 위한 라이브러리 설정
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc10</artifactId>
<version>19.7.0.0</version>
</dependency>
NoticeService.java 개체를 어떻게 생성할거냐?
(dispatcher-servlet.xml)
내용 많으니 게시글 가서 보기
package com.newlecture.web.controller.notice;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.newlecture.web.entity.Notice;
import com.newlecture.web.service.NoticeService;
public class ListController implements Controller {
private NoticeService noticeService;
public void setNoticeService(NoticeService noticeService) {
this.noticeService = noticeService;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView("notice.list");
//mv.setViewName("/WEB-INF/view/notice/list.jsp");
List<Notice> list = noticeService.getList(1, "TITLE","");
mv.addObject("list", list);
return mv;
}
}

Notice.java의 getId, getTitle등을 활용하여 EL작성

items="${list}"
로 변경
여기서 한 대부분은 나중에 어노테이션 방식 및 정리하며 또 바뀔 것들..
https://late90.tistory.com/163?category=1013269
Spring MVC (스프링 웹 MVC) 강의 22 - 서비스 객체 분리하기
기존에 JDBC로 구현
갑자기 JPA로 구현해야 한다면?
이럴때 인터페이스로 결합시켜놨다면 바꾸기 어렵지 않아진다.
인터페이스로 구현 해보자



Create~

그러면 인터페이스에 메소드 생성된다.
JDBC 가서 NoticeService implements한다

내용 복사

커서 블록에
커서내용 지우면서 복사한 부분 붙여넣기



이건 구현하지 않을 것임
나중에 DAO를 만들어서 계층 나눠서 거기서 구현할 예정

만약 JDBC로 구현하던걸 JPA로 구현해야 한다고 하면
<bean id="noticeService" class="com.newlecture.web.service.JPANoticeService" />
이부분만 바꿔주면 되기 때문에 매우 편리해진다.
https://late90.tistory.com/170?category=1013269
Spring MVC (스프링 웹 MVC) 강의 23 - 연결정보 분리하기

이렇게 자바에 적어 놓으면
나중에 배포 후 비밀번호 변경시
변경시마다 재배포해야하는 문제가 있다.
객체화 후 DI하여 배포하자

DB접속 주석처리
DataSource추가
세터추가
Class.~주석
커넥션 추가
<bean id="noticeService" class="com.newlecture.web.service.jdbc.JDBCNoticeService" >
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521/orclpdb"/>
<property name="username" value="NEWLEC"/>
<property name="password" value="1111"/>
</bean>
비밀번호나 주소가 변경될 시 여기서 수정해주면 된다.
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
https://late90.tistory.com/171?category=1013269
Spring MVC (스프링 웹 MVC) 강의 24 - 스프링 설정파일 분리하기
dispatcher-servlet.xml 내용을 3개로 나눌 예정

(web.xml)
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/service-context.xml
/WEB-INF/spring/security-context.xml
</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
기본 위치 및 지정한 이름의 설정파일이 아니라면
<init-param>으로 변경된 내용의 디렉토리주소와 이름을 알려줘야한다.
---------------------------------고정값(암기 대상 아님)-----------------------------------------
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>디렉토리 주소 및 파일명</param-value>
</init-param>
여기는 파일을 하나만 지정할 수 있다.
---------------------------------------------------------------------------------------------------
나머지 파일 지정방법은 <listener>
톰캣이 시작할때 끝날때, 세션이 시작할때 끝날때 이벤트 처리할때 사용
이 <listener>는 <context-param>이란 값 가질 수 있다.
이걸 DispatcherServlet 가 이용할 수 있다.
그리고
서블릿은 URL 첫번째 요청이 오면 메모리가 올라간다.
xml은 그때 올라가면 늦다.
톰캣이 시작할때 로드되도록 하고 싶다면
<load-on-startup>1</load-on-startup>
우선 순위 1
그리고 비동기적으로 로드되는 걸 원하면
<async-supported>true</async-supported>
값을 넣으면 된다.
https://late90.tistory.com/172?category=1013269
Spring MVC (스프링 웹 MVC) 강의 25 - 객체 DI를 Annotaion으로 변경하기

4, 10, 11, 13, 17행에 추가 및 변경
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
<context:annotation-config/>
<!-- <property name="noticeService" ref="noticeService"/> -->

블럭 삭제 후 기본 생성자에 바인딩하는 방식으로 강의에선 진행함.

18행 주석

블럭 삭제 후 25행 어노테이션

서비스.xml에
어노테이션 config 설정 마저 해주기
https://late90.tistory.com/173?category=1013269
Spring MVC (스프링 웹 MVC) 강의 26 - Annotation으로 서비스 객체 생성하기

지난 시간에는 인젝션만 주석했으나
22~24행 통채로 주석하면 객체도 컨테이너에서 사라진다.
그러면
컨트롤러에서 오류가 발생할 것이다.

13행 삭제 혹은 주석하고
14행 추가

https://late90.tistory.com/174?category=1013269
Spring MVC (스프링 웹 MVC) 강의 27 - Annotation으로 URL 매핑하기

@RequestMapping("/index")
매핑 기능을 사용하려면
<mvc:annotation-driven/>
이라는 태그를 .xml에 추가해줘야 한다.

이렇게 실행하면

이렇게 실행된다.
tiles 없이 내용만 출력된다
https://late90.tistory.com/175?category=1013269
Spring MVC (스프링 웹 MVC) 강의 28 - HomController 만들기
1. URL이 매핑되는건 클래스가 아니라 함수에 매핑되어 있는 중이다.
(.xml 때는 클래스별로 매핑)

2. 이제 클래스는 매핑되는 함수들의 폴더 개념이므로 IndexController->HomeController
3. 뷰 정보 전달
3.1 return "root.index";
tilesResolver매칭되는 뷰 정보 전달


3.2 return "index";
지난 27강때 처럼 @RequestMapping("/index")로 찾을때 처럼 묵시적으로 찾게된다?

https://late90.tistory.com/176?category=1013269
Spring MVC (스프링 웹 MVC) 강의 29 -컨트롤러 정리하기

/notice/list
/notice/detail
컨트롤러를 하나의 NoticeController 클래스로 합침
그리고 클래스단에 쓴 매핑과 함수단 매핑은 결합된다

삭제하고 난 후 트리 구조

삭제했으니 .xml 정리하자
https://late90.tistory.com/177?category=1013269
Spring MVC (스프링 웹 MVC) 강의 30 -컨트롤러를 위한 Annotation 개념정리


https://late90.tistory.com/178?category=1013269
Spring MVC (스프링 웹 MVC) 강의 31 - 문서 출력방법 4가지 @ResponseBody
방법1) 서블릿 객체를 얻어서 문자열 출력
package com.newlecture.web.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/")
public class HomeController {
@RequestMapping("index")
public void index(HttpServletResponse response) {
PrintWriter out;
try {
out = response.getWriter();
out.println("hello Index");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return "root.index";
}
}
이렇게 서블릿 객체 얻어서 하는 방법도 있겠지만
이것보다 바람직한 방법은
방법2)@ResponseBody설정을 통한 문자열 출력
@ResponseBody를 쓰면 뷰 리졸버를 사용하지 않고 사용자에게 문자 그대로 출력함

방법3) 뷰 페이지 활용 (지난 시간에 배웠다는데? 찾으면 재 정리 해야겠다. 지금은 잘 모르겠음)
방법4) 타일즈 (지난 시간에 배웠다는데? 찾으면 재 정리 해야겠다. 지금은 잘 모르겠음)
https://late90.tistory.com/179?category=1013269
Spring MVC (스프링 웹 MVC) 강의 32 - @RestController와 한글출력 설정
@RestController는 문서를 만드는 것보단 데이터를 제공해주는 것이 주된 역할인 컨트롤일때 쓴다.
@RestController를 하면
@ResponseBody 한것과 같은 효과가 난다.

@RestController("이름")을 지정해주면

패키지명 달라도 동일한 클래스명을 가진 Controller 클래스가 있을 때
같은 클래스명으로 인한 중복?충돌? 오류가 발생하지 않도록 할 수 있다.
한글출력 설정
(servlet-context.xml)
<mvc:annotation-driven>
<mvc:message-converters> <!-- @ResponseBody로 String 처리할때 한글처리 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
인코딩 말고 다른 변환이 필요할때도
<mvc:message-converters>안에 쓸 수 있다.
https://late90.tistory.com/180?category=1013269
Spring MVC (스프링 웹 MVC) 강의 33 - JSON 출력하기
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>


https://late90.tistory.com/181?category=1013269
Spring MVC (스프링 웹 MVC) 강의 34 - 지금까지 다루었던 내용과 이번에 다루게 될 사용자 입력 5가지

https://late90.tistory.com/182?category=1013269
Spring MVC (스프링 웹 MVC) 강의 35 - QueryString 입력 #1


이렇게 JSP때 했는데

스프링에선 이렇게 해도 쿼리값 얻어진다
https://late90.tistory.com/183?category=1013269
Spring MVC (스프링 웹 MVC) 강의 36 - QueryString 입력 #2 : 변수명 별칭과 기본 값처리


Null값이 안 뜨도록 하려면 기본값 설정해줘야 한다.


https://late90.tistory.com/184?category=1013269
Spring MVC (스프링 웹 MVC) 강의 37 - @RequestParam Optional 속성

이렇게 하면

이런 오류가 뜬다.
이건 int page에 null값을 넣을 수 없기 때문에 발생하는 오류
Integer page는 null이 들어갈 수 있는 정수형이다.
이러면 오류 안 뜸.

value는 name의 별칭
value를 쓰나 name을 쓰나 같지만
둘 다 같이 쓰면 안된다. 뭘 써야할지 몰라 한다.
https://late90.tistory.com/185?category=1013269
Spring MVC (스프링 웹 MVC) 강의 38 - POST 입력을 위한 Admin 컨트롤러 추가하기
'요약' 카테고리의 다른 글
| 메타코딩 스프링부트 강좌 요약 (0) | 2022.01.24 |
|---|---|
| 뉴렉처 스프링 5~17강 요약 (0) | 2022.01.01 |
댓글