SPRING 설치

sts(spring tool suite)3 검색 - 첫번째꺼 접속 - Download STS3 -

https://download.springsource.com/release/STS/3.9.18RELEASE/dist/e4.21/spring-tool-suite-3.9.18.RELEASE-e4.21.0-win32-x86_64.zip - 압축풀기(sts-bundle) - STS.exe 실행

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING 설정

Servers - 기존 서버 삭제 / Package Explorer - Servers 삭제 (삭제할때 체크하고 삭제)

Servers - 파란글 클릭 - apache Tomcat v9.0 - Browse 설정 - Finish

https://github.com/ChoHeeWon00/spring - code클릭 - Download ZIP - 압축(plugins, sts템플릿)풀기

 

plugins - https-content.xml 복사 -

workspace\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core 붙여넣기

프로젝트 생성 - (crtl + n) - Spring Legacy Project - Spring MVC Project 선택 - next - 다운 안됨

 

sts템플릿 - (template.xml, template.zip, wizard.json) 복사 - 

workspace\.metadata\.sts\content\org.springframework.templates.mvc-3.2.2 붙여넣기

프로젝트 생성 - (crtl + n) - Spring Legacy Project - Spring MVC Project 선택 - next

- 패키지 생성 : com.care.abc(형식 중요) - finish

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING DI (1)

DI : 객체를 만들고, 그 안에서 또 다른 객체와 연결되어있는 관계

IOC : 개체를 보관하고 있는 틀(저장소)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING 시작

(ctrl + n) - Spring Legacy Project - Spring MVC Project 선택 - 생성

* 업데이트 : (alt + F5) - ok

Maven Dependencies : Spring에서 제공해주는 기능

webapp - resources : css. javascript, 이미지 등이 들어있는 곳 

root-context.xml : db관련 설정

target : 배포된 파일이 저장되는 곳

pom.xml : 특정 기능을 설정하면, Maven Dependencies에 저장된다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING XML 객체 생성

 (ctrl + n) - Spring Bean Configuration File : xml 파일 생성

객체 생성 : <bean id="이름" class="위치" />

* Beans Graph를 통해 확인 가능

의존성 주입 : 받는 <bean>태그 안에 <property name="이름"><ref bean="객체명"></property>

의존성 주입 및 값 설정 : 받는 <bean>태그 안에 <property name="이름" value="값" />

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING XML로 설정한 객체 꺼내오기

String path = "classpath:applicationST.xml" : classpath = src/main/resources

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext (path) : 해당 경로에 있는 파일을 IOC에 등록

ctx.getBean("가져올 객체명", 자료형) : 등록한 기능 가죠오기

<?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="st01" class="com.care.ex01.Student" />
	<bean id="stb" class="com.care.ex01.STBean">
		<property name="st">
			<ref bean="st01"/>
		</property>
		<property name="name">
			<value>김말이</value>
		</property>
		<property name="age" value="55">
		</property>
	</bean>
	
</beans>
package com.care.ex02;

import org.springframework.context.support.GenericXmlApplicationContext;

import com.care.ex01.STBean;

public class MainClass {
	public static void main(String[] args) {
		String path = "classpath:applicationST.xml"; // classpath : src/main/resources
		GenericXmlApplicationContext ctx = // 해당하는 경로에 있는 파일을 번역해, IOC(저장소)에 등록
				new GenericXmlApplicationContext(path);
		STBean s = ctx.getBean("stb", STBean.class); // 등록한 기능 가져오기 (가져올 객체명, 자료형)
//		s.setName("김개똥");
//		s.setAge(30);
		s.namePrint();
		s.agePrint();
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 01

풀이 과정

<?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="ps" class="com.care.di_test.PrintString" />
	<bean id="pb" class="com.care.di_test.PrintBean">
		<property name="ps" ref="ps" />
		<property name="print" value="안녕" />
	</bean>
</beans>
package com.care.di_test;

import org.springframework.context.support.GenericXmlApplicationContext;


public class MainClass {
	public static void main(String[] args) {
		String path = "classpath:application_test.xml"; 
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext(path);
		PrintBean s = ctx.getBean("pb", PrintBean.class); 
		s.print();
	}
}
package com.care.di_test;

public class PrintBean {
	private String print;
	private PrintString ps;
	
	public void print() {
		ps.printString(print);
	}
	
	public String getPrint() {
		return print;
	}
	public void setPrint(String print) {
		this.print = print;
	}
	public PrintString getPs() {
		return ps;
	}
	public void setPs(PrintString ps) {
		this.ps = ps;
	}
	
}
package com.care.di_test;

public class PrintString {
	public void printString(String print) {
		System.out.println("입력값 => " + print);
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING 외부 파일(db)

외부 파일 생성 : src/main/resources - (ctrl + n) - file 

외부파일 불러오기 설정 : xmlt파일 - Namespaces - context 체크 

- <context:property-placeholder location="classpath:db.properties(불러올 파일 경로)" />

생성자 호출 : <constructor-arg value="가져올 데이터" /> ($표시를 통해 가져옴)

db.id = java
db.pwd = 1234
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<context:property-placeholder location="classpath:db.properties"/>
	
	<bean id="db01" class="com.care.ex03.DBClass">
		<property name="id" value="aaa"></property>
		<property name="pwd" value="bbb"></property>
	</bean>
	
	<bean id="db02" class="com.care.ex03.DBClass">
		<constructor-arg value="${db.id}"/>	
		<constructor-arg value="${db.pwd}"/>	
	</bean>

</beans>
package com.care.ex03;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {
		String path = "classpath:application_db.xml"; 
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext(path);
		DBClass db01 = ctx.getBean("db01", DBClass.class);
		System.out.println("id : " + db01.getId());
		System.out.println("pwd : " + db01.getPwd());
		
		System.out.println("------------------");
		
		DBClass db02 = ctx.getBean("db02", DBClass.class);
		System.out.println("id : " + db02.getId());
		System.out.println("pwd : " + db02.getPwd());
	}
}
package com.care.ex03;

public class DBClass {
	String id, pwd;
	public DBClass() {
		
	}
	public DBClass(String id, String pwd) {
		this.id = id;
		this.pwd = pwd;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING list & map

<list>태그 안에 <value>값 지정

<map>태그 안에 <entry>값 지정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING interface설정

implements "클래스명" : 해당 클래스명이 부모형태이다.

<?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="car" class="com.care.ex04.CarServiceImpl02"></bean>
</beans>
package com.care.ex04;

public interface CarService {
	public void speed();
}
package com.care.ex04;

public class CarServiceImpl01 implements CarService{

	@Override
	public void speed() {
		System.out.println("속력을 올립니다!!");
	}

}
package com.care.ex04;

public class CarServiceImpl02 implements CarService{

	@Override
	public void speed() {
		System.out.println("새로운 기능 속도 올림!!");
	}

}
package com.care.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {
		//CarService car = new CarServiceImpl02();
		
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext("classpath:application_car.xml");
		CarService car = ctx.getBean("car", CarService.class);
		
		System.out.println("main 클래스에서 자동차 사용");
		car.speed();
		
		SubClass sc = new SubClass();
		sc.subFunc();
	}
}
package com.care.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class SubClass {
	public void subFunc() {
		//CarService car = new CarServiceImpl02();
		
		GenericXmlApplicationContext ctx = 
				new GenericXmlApplicationContext("classpath:application_car.xml");
		CarService car = ctx.getBean("car", CarService.class);
		
		System.out.println("서브 클래스 자동차!!");
		car.speed();
	}
}

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING web 설정

pom.xml - 

자바 버전 변경 : <java-version>1.8</ java- version>

스프링 버전 변경 : <org.springframework-version>5.2.1.RELEASE</org.springframework-version>

 

servlet 버전 변경 (95번째 줄, 96번쨰 줄) : 

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

 

maven 버전 변경 (139번째 줄, 141번째 줄, 142번째 줄) : 

  <plugin>
       <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
       <version>3.5.1</version>
     <configuration>
        <source>1.8</source>
       <target>1.8</target>
       <compilerArgument>-Xlint:all</compilerArgument>
            <showWarnings>true</showWarnings>
                   <showDeprecation>true</showDeprecation>
      </configuration>
    </plugin>

 

* maven 업데이트 : (alt + F5) - ok 

 

encoding 적용 방법 : web.xml - 마지막 </web-app> 안에 작성

<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>
<init-param>
<param-name>forceEncoding</param-name>  
<param-value>true</param-value>
</init-param>
  </filter>    
<filter-mapping>
<filter-name>encodingFilter</filter-name>
                    <url-pattern>/*</url-pattern>                 
</filter-mapping> 

 

서버 에러 발생시 : Servers - tomcat - server.xml 

- 다른 프로젝트와 path가 같을 경우, 이전에 사용한 path를 변경 및 주석처리

 

web broser 설정 : window - WebBroser - chrome

jsp파일 encoding : window - preferences - General - workspace - other - UTF-8설정

window - preferences -  web - css & html & jsp - UTF-8 설정

 

* jsp파일에서 실행하지 않고, 프로젝트에 실행

* 해당 HomeController.java - package명(ex01)을 기준으로 경로를 지정,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING web

@ = annotation

@Controller : 컨트롤러로 인식

@RequestMapping(value="/경로(index)" : localhost:8080/패키지명/해당경로(index) (get, post둘다 가능)(value생략 가능

return "경로" : views를 기준으로 경로 설정 

@GetMapping : get방식으로만 보내겠다

Model model : 해당 jsp파일에게 데이터를 보내줄 떄 사용

model.addAttribute("변수명", 데이터) : 해당 jsp파일에 전달

model을 만들어서 전체를 보낼 수 있다.(model type = ModelAndView)

package com.care.ex01;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class MyController {
	
	@RequestMapping(value="/index")
	public String memberIndex() {
		return "/member/index";
	}
	
	@GetMapping("/logout")
	public String memberLogout(Model model) {
		model.addAttribute("test", "로그아웃 되었습니다");
		return "/member/logout";
	}
	@GetMapping("/login")
	public ModelAndView login() {
		ModelAndView model = new ModelAndView();
		model.addObject("login", "로그인 성공!!!");
		model.setViewName("member/login");
		return model;
	}
}
<%@ 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>
	<h1>index 페이지</h1>
</body>
</html>
<%@ 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>
	<h1>login 페이지</h1>
	login : ${login }
</body>
</html>
<%@ 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>
	<h1>logout 페이지</h1>
	request : <%= request.getAttribute("test") %><br>
	el : ${ test }<br>
</body>
</html>

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Quiz 02

풀이 과정

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SPRING MVC2 모델 & Spring 동작 구조

Controller : 연결

Service : 연산

DAO : db와 연결

 

Web Browser에서 사용자가 요청하면, DispatcherServlet에서 요청을 받아, 

HandlerMapping에게 정보를 보내, 컨트롤러 위치 정보를 받아, 

HandlerAdapter에서 위치정보를 받아 Controller에 연결한 후,

컨트롤러 실행 결과를 ModelAndView객체로 변화 후,

DispatcherServlet에서 .jsp이름을 ViewResolver에게 보낸 후,

jsp 정보를 DispatcherServlet 받은 후,

View에게 jsp를 요청한 후, jsp 랜더링을 전달 받아 사용자에게 전달한다.

 

web.xml(9번째 줄) : db에 대한 설정은 해당 위치에서 설정

DispatcherServlet 설정 위치 : web.xml(23번째 줄)

+ Recent posts