- Maven 프로젝트
- java app, dynamic web project, spring mvc project 를 만들 수 있다.
- 특징
- pom.xml 문서가 존재한다.
- pom.xml 에는 프로젝트의 설정, 주로 의존 라이브러리의 목록이 들어 있다.
- 필요한 의존 라이브러리가 있다면 pom.xml 에 dependency 설정을 추가하는 것만으로 자동 다운로드되고 사용할 준비가 된다.
- Maven 프로젝트를 사용하기 위해서는 다운로드 받아야 한다.
- Dependency 설정하기
- MvnRepository 에서 Dependency 라이브러리를 찾아 복사해서 pom.xml의 Dependencies 태그 안에 붙여 넣는다.
- Tomcat Server
- web.xml 에서 서버의 동작 방식을 설정한다.
- Servlet
- WEB-INF 폴더 내에 web.xml 파일
- servlet 태그 존재
- DispatcherServlet을 사용할 수 있도록 Servlet 설정
- servlet-mapping 태그의 url-pattern에서 루트 요청을 맵핑을 한다.DispatcherServlet이 Spring을 동작할 수 있도록 하는 핵심 요소이다.
<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
- DispatcherServlet
- servlet-context.xml 에서 DispatcherServlet 동작 방식을 설정
- DispatcherServlet 동작
- servlet-context.xml 파일에서 동작 설정 가능
↪ Spring Framework가 동작하는 방식을 설정하는 파일이다.
- 서버 동작 방식
1. 클라이언트 요청
2. Web Server로 요청이 이동
3. DispatcherServlet이 요청을 처음으로 받아 Controller에게 전달
4. Controller에서 데이터(Model)를 처리
5. Request에 데이터(Model)을 담아 jsp 페이지(View)로 forward
6. jsp 페이지(View)는 데이터(Model)을 클라이언트에게 응답한다.
- MVC
- M : Model, 데이터 (Request에 담겨지는 데이터)
- V : View (클라이언트에게 응답되어지는 페이지)
- C : Controller (요청을 받아 데이터를 처리하는 @Controller 객체)
- 특징
- 유지보수 용이성 : 객체들간의 의존관계가 느슨해져서 용의하다.
- 의존관계를 느슨하게 하는 방법
- 필요한 핵심 의존 객체의 생성과 관리를 프레임워크에게 맡긴다.
- interface type을 적극 활용한다.
1. pom.xml 파일 수정
<!-- 추가 의존 라이브러리 --> <!-- MyBatis 라이브러리 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.0</version> </dependency> <!-- Spring JDBC 라이브러리 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 파일업로드 처리를 위한 라이브러리 (SmartEditor 에서도 필요함)--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- json, xml 응답을 편하게 할수 있도록 도와 주는 라이브러리 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.0</version> </dependency> <!-- Aop 용 라이브러리 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.0</version> </dependency> <!-- Spring Security 관련 라이브러리 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 트렌젝션 처리를 위한 라이브러리 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 오라클 라이브러리 --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.1.0.0</version> </dependency>
2. web.xml 파일 수정
<!-- post 방식 전송될때 한글 깨지지 않도록 Spring 인코딩 필터 정의하기 --> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <!-- Spring 인코딩 필터 맵핑하기 --> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3. HomeController.java 파일 수정
4. web.xml 파일 수정
- Controller에서 /home.do로만 요청 맵핑했기 때문에 루트 경로에 접근해도 아무런 페이지가 뜨지 않는다.
- web.xml 파일에 welcome-file-list를 추가한다.
- RequestMapping 메소드
- 반환값은 String으로 반환할 수 있다.
- 요청으로 온 파라미터의 이름과 동일하게 메소드의 인자값으로 받을 수 있다.(req 사용 X)@RequestMapping("/send.do") public String send(HttpServletRequest req) { String msg = req.getParameter("msg"); req.setAttribute("msg", msg); return "result"; } @RequestMapping("/send2.do") public String send2(HttpServletRequest req, String msg) { req.setAttribute("msg", msg); return "result"; }