0929 Spring Framework

onnbi·2022년 11월 28일
0

web

목록 보기
8/8
post-thumbnail

Framework

코드의 재사용성을 증가시키기 위해 일련의 클래스 묶음이나 뼈대 틀을 제공하는 라이브러리

정형화되어있고 일정 이상의 퀄리티를 보장해주지만 습득에 시간이 걸리고 같은 라이브러리가 아니면 이해하기 어려움

  • 데이터(영속성) 프레임워크 : Mybatis
  • 자바 프레임워크 : Spring
  • 화면 구현 프레임워크 : Bootstrap
  • 기능 및 지원 프레임워크 : jUnit5 (자동화 테스트 도구)

Spring

MAVEN

자바용 프로젝트 관리 도구, project object model(POM) XML문서를 통해 해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합하여 관리하는 프레임워크

다운이 멈추는 경우 삭제하고 다시 받아야 한다

Maven을 사용하면 pom.xml (Project Object Model) 문서에 사용하고자 하는 라이브러리를 등록하여 자동으로 프로젝트에 추가되게 하여 라이브러리 관리의 편리성을 제공한다

spring (3ver)

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크

동적인 웹사이트를 개발하기 위한 여러가지 서비스를 제공하고 있으며, 전자정부 표준 프레임워크의 기반 기술로 사용되고 있다

http://spring.io/

특징

  1. DI (Dependancy Injection / 의존성 주입)
  2. Spring AOP (관점지향 프로그래밍) : 공통기능을 묶기 위해 관점을 바꾼다
  3. Spring JDBC
  4. Spring MVC

기본 setting

  1. Spring 버전 3 다운로드 > spring-tool-suite
  2. maven 다운로드 > https://maven.apache.org/ > apache-maven-3.8.6
  3. apache-maven 폴더 안에 repository 폴더 생성 (다운받은 라이브러리 저장소)
  4. conf > vs코드으로 settings.xml 열기 > repository 폴더가 라이브러리 저장소임을 알리기
    • <localRepository>C:\apache-maven-3.8.6\repository</localRepository>
  5. C:\sts-bundle\sts-3.9.13.RELEASE > STS.ini 열기
    • sts에 자바버전 명시
    • C:\Program Files\Java\jre1.8.0_144\bin java 설치 주소 가져와서
    • sts에 -vm C:\Program Files\Java\jre1.8.0_144\bin\javaw.exe 추가
  6. Spring workspace를 실행한다
  7. 기본 workSpace와 editor, json, jsp, css... utf-8로 지정한다
    general > workspace > utf-8 / general>editors>textEditors>spelling>utf-8
    / JSON>JSONfiles>utf-8 / web>cssfiles,jspfiles>utf-8
  8. server>runtimeEnvironments>apache로 지정
  9. maven>use settings > C:\apache-maven-3.8.6\conf\settings.xml > repository 뜨는지 확인
  10. lagacyProject 생성 > mvc 선택 > 패키지 앞 a.b.c 폴더 입력 > 생성
  11. pom.xml > overview에서 자바 (1.8), 아파치(5.0.6) 버전으로 올리기
  12. 생성한 project에서 마우스 우클릭>properties>projectFacets>자바버전 올리고, runtime apache로 변경
  13. 서버설정 serve modules without publishing 체크 / http 포트 80 설정
  14. 주소창 http://192.168.10.55/iei/ 프로젝트 초기 설정한 kr.or.iei 중 마지막 추가
  15. 서버 module에서 /iei > /로 변경

<정리>

sts, maven 초기 설정

  1. maven 폴더에 라이브러리 저장할 폴더 생성

  2. maven 설정파일에서 폴더지정 (conf)

  3. sts.ini에 자바 버전 명시 (-vm)

    ======================== sts 실행

  4. 인코딩 설정(6개), Maven UserSetting, Server-RuntimeEnvuronment(C:\Users\greys\apache-tomcat-8.5.82)

  5. maven 설정 파일 읽기

프로젝트 생성마다 할 일

  1. 새 프로젝트 생성 (Spring Legacy Project)
    • Spring MVC project 선택
    • 기본 패키지 지정 (3단계 a.b.c)
  2. 기본 라이브러리 다운로드 (자동)
  3. 버전변경
    • pom.xml에서 java버전 1.8, Spring버전 5.0.6
    • 프로젝트 속성에서 java버전, 서버설정
  4. webapp/WEB-INF/lib/폴더에 jstl라이브러리 추가
  5. 서버 실행 시, / 로 변경

UTF-8 설정

General

  • workSpace
  • TextEditors (spelling)

JSON

  • JSON Files

Web

  • CSS
  • HTML
  • JSP
    ( XML - 이미 설정되어 있음)

Maven

Spring IoC, DI

Inversion of Control (제어의 역행 )

객체 생성에 대한 생성, 변경 등의 관리를 개발자가 아닌 컨테이너(스프링)에서 직접 관리하는 것, 개발 시간 단축

<스프링으로 객체 만들기>

XML 파일

시작할 때 만들어짐 / 라이브러리로 추가되는 객체

Spring bean configuration > next > beans

<!--
		비어있는 Member 객체 생성 후 setter로 값 대입
		Member member1 = new Member();
		member1.setName("임라떼");
		member1.setAge(20);
		member1.setAddr("영등포구");
-->
	<bean id="member1" class="kr.or.iei.vo.Member">
		<property name="name" value="임라떼"/>
		<property name="addr" value="서울시 영등포구"/>
		<property name="age">
			<value type="java.lang.Integer">20</value>
		</property>
	</bean>


<!-- 
		생성자를 이용하여 객체를 생설하며 데이터를 넣기
		Member member2 = new Member("임락데", "30", "서울시 여의도동");
-->
	 <bean id="member2" class="kr.or.iei.vo.Member" scope="prototype">
	 	<constructor-arg value="이윤수1"/>
	 	<constructor-arg>
	 		<value type="java.lang.Integer">30</value>
	 	</constructor-arg>
	 	<constructor-arg value="부산"/>
	 </bean>

scope=prototype : 객체를 재사용할 것인지 새로 만들어줄 것인지에 대한 속성

@ : annotation

XML 파일에 과도한 설정을 하게 되면 부담

클래스에 어노테이션을 붙여 스캔 범위를 지정한 후 사용할 수 있다

@Component

  1. 클래스 위에 component를 붙인다

  2. servlet-context.xml 에서<context:component-scan base-package="kr.or.test"/>

    서버는 web.xml을 보면서 실행한다 > appServlet에 servlet-context.xml에 있다고 쓰여있다 > servlet-context에 가보면 <context:component-scan base-package="kr.or.iei" /> 해당 태그에 초기에 설정하면서 입력했던 패키지 앞 세 자리가 들어있다

@Controller : component의 세분화 컨트롤러에 지정

@Service : component의 세분화 서비스에 지정

@Repository : component의 세분화 dao에 지정

@Autowired : 프로그램 가동 시 객체를 찾아 연결해 준다

@Inject

@Qualifier

@Reaource

Spring MVC

VIEW-Controller-Model-Controller-VIEW

DispatcherServlet : 유일한 servlet 클래스 HTTP프로토콜을 통해 들어오는 요청을 가장 먼저 처리

HandlerMapping : 클라이언트의 요청을 어떤 Controller가 처리할지 Mapping값을 가지고 있다

Controller : 실질적인 클라이언트 요청을 처리

ViewResolver : Controller가 반환한 view 이름으로 실행될 jsp 경로를 가지고 있다

View : 실제 클라이언트에게 보여지는 페이지

자동화 시스템 이해를 위한 직접 구현

	<form action="/login.do" method="post">
		아이디 : <input type="text" name="memberId"><br>
		비밀번호 : <input type="password" name="memberPw"><br>
		<input type="submit">
	</form>
	<hr>
	<form action="/search.do" method="get">
		조회할 아이디 : <input type="text" name="memberId"><br>
		<input type="submit" value="조회">
	</form>

2개의 form태그를 만든다

package kr.or.iei.controller;

import javax.servlet.http.HttpServletRequest;

public interface Controller {
	public String request(HttpServletRequest request);
}

Controller interface - request를 받아 String으로 돌려주는 추상메서드

package kr.or.iei.controller;

import javax.servlet.http.HttpServletRequest;

public class SearchController implements Controller {

	@Override
	public String request(HttpServletRequest request) {
		// 값추출
		String memberId = request.getParameter("memberId");
		// 비즈니스로직
		// memberId=user01
		boolean result = memberId.equals("user01");
		// 결과처리
		if(result) {
			return "searchSuccess";
		}else {
			return "searchFail";
		}
	}
}

Controller를 구현한 SearchController

package kr.or.iei.controller;

import javax.servlet.http.HttpServletRequest;

public class LoginController implements Controller {

	@Override
	public String request(HttpServletRequest request) {
		// 값추출이 일어나는 곳
		String memberId = request.getParameter("memberId");
		String memberPw = request.getParameter("memberPw");
		
		// 비즈니스로직
		// 실제 해야 하는 일 = (서비스를 통한 id/pw 검증)
		// user01-1234 가상으로 DB 설정
		boolean result1 = memberId.equals("user01");
		boolean result2 = memberPw.equals("1234");
		boolean result = result1 && result2;
		
		// 결과처리
		if(result) {
			return "loginSuccess";
		}else {
			return "loginFail";
		}
	}
}

Controller를 구현한 LoginController

		// 인코딩(filter 없으므로)
		request.setCharacterEncoding("utf-8");
		// 사용자가 요청한 컨트롤러의 주소를 확인한다
		String uri = request.getRequestURI();	// dispatcherServlet의 첫번째 역할
		System.out.println("사용자 요청 uri : "+uri);

		/*
		if(uri.equals("/login.do")) {
			LoginController controller = new LoginController();
		}else if(uri.equals("/search.do")) {
			SearchController controller = new SearchController();
		}
		*/

		HandlerMapping mapping = new HandlerMapping();
		Controller controller = mapping.getController(uri);
		String result = controller.request(request);
		
		// 결과를 처리할 viewResolver
		ViewResolver resolver = new ViewResolver();
		String view = resolver.getView(result);
		response.sendRedirect(view);

DispatcherServlet

자동화

web.xml에서 appServlet을 조작한다

<!-- Processes application requests -->
<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>*.do</url-pattern>
</servlet-mapping>

servlet-context.xml에서 viewResolver를 가져와 사용한다

<!-- view Resolver -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
</beans:bean>
profile
aelatte coding journal

0개의 댓글