※이 과정은 spring 아키텍쳐를 이해하기 위함. Controller를 만드는 것 이외의 모든 과정을 해주는 기능들이 spring에 존재한다.
Spring 공홈
Project-Spring Framework-Learn-Refernce Doc, API Doc
version 5.3.25의 Reference Doc의 Web Servlet
여러 정보와 설명들이 있지만, 자세히 알려주거나 모든 내용이 있는 것은 아니다.
JSP에 Maven을 이용한 스프링 조립하기
JSP에 Maven을 붙이고, Maven을 통해 스프링 프레임워크를 추가하는 방법
스프링 프로젝트는 어떻게 생성하냐에 따라 프로젝트 구조가 다를 수 있다.
JSP에 빌드툴을 사용하는 방법은 대표적으로 2가지이다.
1.Maven-스프링에서 주로 사용
2.Gradle-스프링부트에서 주로 사용
둘다 같은 역할
스프링 설정파일을 사용하는 방법은 대표적으로 2가지이다.
1.xml을 이용하는 방법
2.자바코드를 이용하는 방법
Dynamic web project 생성, web.xml생성하기
- build path와 facet을 자바 11로.
- 서버 VMware를켜서 port번호를 8080에서 8181로(8080이 오라클 기본포트번호와 같다.)
- 폴더의 run on server를해서 실행되면 ok.
- 우클릭-configure-convert to maven project
gourpid를 com.simple, artifactid는 그대로 - 생성된 porm.xml에서 필요한 라이브러리 다운받기
https://mvnrepository.com/에서 spring 검색
하면 굉장히 많은 모듈들이 나온다. - mvc, context 모듈 필요
context모듈중 5.3.20버전
Maven이라는 곳에 코드가 있다. 복사해서 porm.xml에 packaging과 build태그 사이에 dependencies태그 만들고 그 안에 넣음. - Spring web MVC에서 똑같은 버전 가져와서 넣음
하고 프로젝트 우클릭-maven에 update project
버전을 3.1.1.RELEASE로 다운그레이드. 핸들러를 구현해보기 위해. 처음부터 3버전으로 받아도 무방.
+).xml에서 변수선언
<!-- 변수선언 -->
<properties>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
</properties>
사용은 ${org.springframework-version}으로.
SpringMake/porm.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.simple</groupId>
<artifactId>SpringMake</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 변수선언 -핸들러를 구현해보기위해서 3버전을 활용-->
<properties>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
</properties>
<!-- 필요한 라이브러리 다운로드 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
</project>
web.xml
welcomelist 지우고
<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/config/spring-servlet.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
추가.
web.xml이 생기는 경로가 WEB-INF 하위경로로.
이유? 프로젝트를 압축해서 뽑을 때 이 폴더의 하위경로가 실제 경로로 들어간다.
여기에 config폴더 만들고, spring bean configuration file로 spring-servlet.xml파일 만들어서
위의
<param-value>
/WEB-INF/config/spring-servlet.xml
</param-value>
와 똑같이 만들어준다.
전역으로 사용할 초기설정 파일
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/database-servlet.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
전역으로 등록하는 이유는 서블릿이 여러개 생길 때,
전역으로 똑같아야 하는 설정파일(데이터베이스 관련 설정이 들어간 것들)이 있기 때문.
param-value안에 들어갈 파일이 여러개라면, 줄바꿈으로 표현해주면 된다.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0">
<display-name>SpringMake</display-name>
<!-- 전역으로 사용할 초기설정 파일 -->
<!-- 모든 서블릿에서 공통으로 참조할 파일은 전역으로 선언할 수 있습니다. -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/database-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 서블릿 등록 -->
<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/config/spring-servlet.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
spring-servlet 핸들러 구축
빈 생성
<bean id="aaa" class="com.simple.controller.MainController" />-메인컨트롤러.
SimpleUrlHandlerMapping-핸들러매핑클래스.
props-property객체의 약자.
<prop key="/test/aaa">aaa</prop>
=>/test/aaa라는 주소가 들어오면 aaa라는 bean을 실행시켜라 라는 의미임.
->즉, 만들어놓은 메인컨트롤러를 연결시키는 것.
spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 메인컨트롤러를 빈으로 등록 -->
<bean id="xxx" class="com.simple.controller.MainController" />
<!-- 핸들러맵핑 등록 -->
<!-- /test/aaa 요청이 들어오면 xxx빈으로 핸들러맵핑 -->
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/test/aaa">xxx</prop>
<prop key="/test/bbb">xxx</prop>
</props>
</property>
</bean>
<!-- 뷰 합성기(뷰 리졸버) -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
database-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 데이터베이스 설정이 추후에 추가됩니다. -->
</beans>
메인컨트롤러 생성
핸들러 클래스로 등록이되려면 특정 기능을 가지고 있어야 한다.
MultiActionController -스프링 3버전에서 컨트롤러의 역할을 할 수 있도록 제공되는 클래스 중 1개
이 클래스를 상속받아야 함.
상속받고 handleRequestInternal메서드를 오버라이딩하면 동작한다.
MainController.java
package com.simple.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
//핸들러 클래스로 등록이 되려면 특정 기능을 가지고 있어야 합니다.
//MultiActionController 스프링 3버전에서 컨트롤러의 역할을 할 수 있도록 제공되는 클래스 중 1개
//상속받고 handleRequestInternal메서드를 오버라이딩하면 동작합니다.
public class MainController extends MultiActionController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String path=request.getContextPath();
String uri=request.getRequestURI();
String command=uri.substring(path.length());
if(command.equals("/test/aaa")) {
System.out.println("aaa실행");
//프로그램코드 확장...
//model과 view정보를 담는 객체
ModelAndView mv=new ModelAndView();
//mv.setViewName("/WEB-INF/views/home.jsp"); //뷰의 정보
mv.setViewName("home");
mv.addObject("data","hello world"); //데이터정보
return mv;
}else if(command.equals("/test/bbb")) {
System.out.println("bbb실행");
}
return super.handleRequestInternal(request, response);
}
}
.setViewName의 경로는 spring-wervlet에 만든 뷰 합성기의 prefix, suffix를 통해 완전한 경로로 만들어진다.
home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
hello world!
</body>
</html>
콘솔출력문
Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0
1월 31, 2023 7:58:06 오후 org.apache.catalina.startup.Catalina load
INFO: [2,183] 밀리초 내에 서버가 초기화되었습니다.
1월 31, 2023 7:58:09 오후 org.apache.catalina.startup.Catalina start
INFO: 서버가 [3,640] 밀리초 내에 시작되었습니다.
bbb실행
aaa실행
home
'Spring' 카테고리의 다른 글
230201 Spring Spring Legacy Project 생성하기 (0) | 2023.02.01 |
---|---|
230201 Spring mvc모듈과 @Controller, @RequestMapping (0) | 2023.02.01 |
230131 Spring MVC2 웹서비스 (0) | 2023.01.31 |
230131 Spring xml파일을 java파일로 변경하기 (0) | 2023.01.31 |
230131 Spring 의존객체 자동주입 실습 (0) | 2023.01.31 |