앞서 살펴본 내용과 같다. 스프링 컨테이너를 생성 할 때 설정 경로를 같이 넣어 주면 생성과 설정을 동시에 할 수 있다. 

설정을 따로 할시에는 ctx.refresh(); 를 꼭 해야한다.


이제 빈의 생명 주기에 대해서 알아보겠다. 빈을 생성하고 종료할 때 어떤 작업을 하고 싶다면 이렇게 사용하면 된다.

첫 번째는 implements를 이용한 방법이다. 처음 클래스를 만들 때 afterPropertiesSet과 destroy를 implement 한다. 그런 후 자신이 원하는 것을 밑에 기재한다.


두 번째 방법은 어노테이션을 이용한 방법이다. implement 하지않고 @PostConstruct 와 @PreDestroy를 어노테이션해서 간단히 쓰면 된다.


=====================================================================================================================

다음은 스프링 빈 범위(scope) 에 대해서 알아보자

 Spring에서는 Bean관리는 기본적으로 싱글톤으로 관리를 한다

하지만 필요에 따라 싱글톤이 아닌 경우가 필요한데, 이를 위해 scope를 이용한다

scope종류는 다음과 같다

 

1. singleton : 기본 싱글톤 스코프

2. prototype : 어플리케이션에서 요청시 (getBean()) 마다 스프링이 새 인스턴스를 생성

3. request : HTTP 요청별로 인스턴스화 되며 요청이 끝나면 소멸 (spring mvc webapplication 용도)

4. session : HTTP 세션별로 인스턴스화되며 세션이 끝나며 소멸 (spring mvc webapplication 용도)

5. global session : 포틀릿 기반의 웹 어플리케이션 용도. 전역 세션 스코프의 빈은 같은 스프링 MVC를 사용한 포탈 어플리케이션 내의 모든 포틀릿 사이에서 공유할 수 있다

6. thread : 새 스레드에서 요청하면 새로운 bean 인스턴스를 생성, 같은 스레드에 대해서는 항상 같은 bean 인스턴스가 반환

7. custom : org.pringframework.beans.factory.config.Scope를 구현하고 커스텀 스코프를 스프링의 설정에 등록하여 사용

 

, request, session, global session의 스코프는 일반 spring 어플리케이션이 아닌, Spring MVC Web Application에서만 사용되는 용도

 

scope를 정의하는 방법은 두가지가 있다.

 

1. XML 사용 

<bean id="~~" class="~~" scope="singleton"/>


2. Annotation 사용

@Scope("singleton")

public class A{ 

}


'프로그래밍 > Spring Framework' 카테고리의 다른 글

자바 Spring framework MVC 모델  (0) 2018.08.06
Spring AOP  (0) 2018.08.03
Spring Environment 객체  (0) 2018.08.02
스프링을 이용한 객체 생성과 조립(DI 설정)  (0) 2018.08.01
Spring 이란?  (0) 2018.07.31

객체를 생성 할 때는 두 가지 방법이 있다. 첫 번째는 객체를 클래스안에 선언하여 그것을 사용하는 것이고 두 번째는 클래스 밖에 객체를 생성하여 클래스에서 불러오는 것이다. 스프링 프레임워크는 두 번째 방법을 채택하고 있다. 이유는 나중에 찾아서 재업로드 할 예정이다.

보는 것과 같이 기존에 사용하던 방식과는 좀 다르게 객체를 선언해줘야 한다. spring 프로젝트 안에 있는 src/main/resources 파일 안에 xml 파일을 하나 만들어 주어 위와 같이 변수를 설정해 주고 객체를 생성해 줘야 한다. 변수를 설정하고 필드가 있으면 필드도 property로 설정을 해줘야한다.


객체를 생성할 때 classpath를 xml로 만들었던 파일로 지정하고 모든 파일의 글을 ctx에 저장한뒤 getBean으로 원하는 클래스 객체를 불러온다. 


필드이름을 선언 해주고 setter 하는 것도 잊지 않아야 한다.


한 가지 팁 # setter로 생성 할 때는 xml에서 property를 사용해주고 # pulbic 생성자를 사용할 때는 xml에서 constructor-arg를 사용한다


※추가 DI 사용하는 이유 : JAVA 파일의 수정 없이 스프링 설정 파일(xml)만을 수정하여 부품들을 생성/조립할 수 있다.

즉, 큰 프로젝트의 유지보수에서 큰 장점을 가지고 있다.



namespace의 기능을 하는 것을 보자. c: 나 p:를 사용하면 constructor-arg나 property 를 간단하게 선언할 수 있다.

이렇게 객체를 불러 올때 한꺼번에 여러개의 클래스를 불러올 수 있다. 


=========================================================================================================================


이제 XML파일을 자바 파일로 바꾸어서 쓰는 방법에 대해서 살펴보겠다.


@Configuration 을 붙여줘야지 사용 가능하다.

@Bean 은 객체를 생성할 때 사용 한다. 생성자에 설정, 프로퍼티에 설정을 동일하게 할 수 있다.

xml을 많이 사용하는지, java를 많이 사용하는지는 재업로드 할 예정이다.


또한 XML파일에 JAVA을, JAVA파일에 XML파일을 사용하는 방법이 있다

'프로그래밍 > Spring Framework' 카테고리의 다른 글

자바 Spring framework MVC 모델  (0) 2018.08.06
Spring AOP  (0) 2018.08.03
Spring Environment 객체  (0) 2018.08.02
스프링 생명 주기와 범위  (0) 2018.08.01
Spring 이란?  (0) 2018.07.31

Spring Framework에 대해서 알아보자




Spring Framework 특징


POJO (Plain Old Java Object)

일반적인 J2EE 프레임워크에 비해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 사용하기 편하고 객체가 가볍다.

POJO 어플리케이션을 빌드하는 것도 가능하고, POJO 에 비-침입적(non-invasively) 으로 엔터프라이즈 서비스를 적용하는 것도 가능하다.


DI (Dependency Injection)

각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.


IoC (Inversion of Control)

컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서, IoC 컨테이너가 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 이 객체를 bean 이라고 한다.


AOP (Aspect-Oriented Programming)

로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 따로 분리하여 개발하고 실행 시에 다시 조합할 수 있다.


Data Access

JDBC, iBATIS(MyBatis), Hibernate 등의 데이터베이스에 접속하고 자료를 저장 및 읽어오기 위한 인터페이스를 제공한다.


MVC Pattern

웹 프로그램밍 개발 시 거의 표준적인 방식인 Spring MVC라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다. 

DispatcherServlet 이 Contoller 역할을 담당하여 각종 요청을 적절한 서비스에 분산, 이를 각 서비스들이 처리, 그 결과를 다양한 형식의 View 서비스로 화면에 표시할 수 있다.


Batch

Quartz 기반으로 특정 시간대에 실행하거나 대용량의 자료를 처리할 수 있다.




'프로그래밍 > Spring Framework' 카테고리의 다른 글

자바 Spring framework MVC 모델  (0) 2018.08.06
Spring AOP  (0) 2018.08.03
Spring Environment 객체  (0) 2018.08.02
스프링 생명 주기와 범위  (0) 2018.08.01
스프링을 이용한 객체 생성과 조립(DI 설정)  (0) 2018.08.01


MVC 패턴은 M(Model) V(View) C(Controller)로 구성이 된다. 알기 쉽게 얘기 하자면 M은 데이터베이스, V는 우리가 눈으로 보는 화면, C는 동작을 하는 기능들로 말할 수 있다. M은 Servlet JAVA파일로 만들고 C도 마찬가지 JAVA, V는 JSP로 만드는 것이 일반적이다. 


두 가지 형태로 MVC 모델을 나누는데 Model1은 비교적 작은 프로젝트에 빠른 시일내에 프로그램을 만들기 위해 사용한다. Model2는 큰 프로젝트에 적용한다.


Model1은 빠르게 프로그램을 만들 수 있다는 장점이 있지만 유지보수에서는 힘들 수 있다. 보는 것과 같이 뷰와 컨트롤러가 같이 있다는 것을 볼 수 있다.


Model2는 모듈화를 통해서 프로그램을 만들기 때문에 유지보수를 Model1에 비해 훨씬 쉽게 할 수 있다.



프로그램을 설계 할 때는 당연한 얘기이지만 프로그램 전체 로직을 도식화 시키는 것이 제일 처음 할 일이다.


memberSelect.jsp


<%@page import="exx.MemberDTO"%>

<%@page import="exx.MemberDAO"%>

<%@page import="java.util.ArrayList"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

MemberDAO memberDAO = new MemberDAO();

ArrayList<MemberDTO> dtos = memberDAO.memberSelect();

for(int i=0;i<dtos.size(); i++){

MemberDTO dto = dtos.get(i);

String name = dto.getName();

String id = dto.getId();

String pw = dto.getPw();

String phone = dto.getPhone1()+"-"+dto.getPhone2()+"-"+dto.getPhone3();

String gender = dto.getGender();

out.println("이름:"+name+"아이디:"+id+",비밀번호:"+pw+",연락처:"+phone+",성별:"+gender+"<br/>");

}

%>

</body>

</html>


--------------------------------------------------------------------------------------

MemberDAO.java


package exx;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;


import javax.naming.Context;

import javax.naming.InitialContext;


import org.apache.tomcat.jdbc.pool.DataSource;


public class MemberDAO {

private DataSource dataSource;

public MemberDAO() {

try {

}catch(Exception e) {

e.printStackTrace();

}

}

public ArrayList<MemberDTO> memberSelect(){

ArrayList<MemberDTO> dtos = new ArrayList<MemberDTO>();

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

con =DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");

stmt = con.createStatement();

rs = stmt.executeQuery("select *from member");

while(rs.next()) {

String name = rs.getString("name");

String id = rs.getString("id");

String pw = rs.getString("pw");

String phone1 = rs.getString("phone1");

String phone2 = rs.getString("phone2");

String phone3 = rs.getString("phone3");

String gender = rs.getString("gender");

MemberDTO dto = new MemberDTO(name,id,pw,phone1,phone2,phone3,gender);

dtos.add(dto);

}

}catch(Exception e) {

e.printStackTrace();

}finally {

try {

if(rs!=null) rs.close();

if(stmt!=null)stmt.close();

if(con!=null)con.close();

}catch(Exception e) {

e.printStackTrace();

}

}

return dtos;

}

}



------------------------------------------------------------------------------------


MemberDTO dto = new MemberDTO(name,id,pw,phone1,phone2,phone3,gender);

dtos.add(dto);


ArrayList에 add한다. 

JAVA 백준 1977번 완전제곱수

math.sqrt(); 를 잘 써주면 쉽게 풀 수 있는 문제이다

두 가지 방법이 있다.


첫 번째 코드이다.


두 번째 코드이다.

첫 번째 방법은 RequestDispatcher 클래스를 이용한 위임 방법이다



이렇게 jsp에서 서블릿으로, 서블릿에서 jsp로 객체를 위임할 수 있게 하는것이 RequestDispatcher 클래스이다. 쉽게 사용할 수 있으니 활용이 많이 될듯쉽다.


두 번째는 HttpServletResponse 클래스로 위임하는 방법이다


redirect.jsp에서 HttpServletResponse 클래스를 내부적으로 상속받기 때문에 request.setAttribute(); 메소드를 사용할 수 있는데 이곳에서 set 해서 response로 넘겨 주었다고 해서 왼쪽 RequestObj.java에서 받는 것이 아니라 새로운 객체를 하나 생성하는 것이다. 즉 속성을 참고해서 사용할 수가 없다.

'프로그래밍 > JSP' 카테고리의 다른 글

MVC 패턴  (0) 2018.07.31
JSP ArrayList로 모든 멤버 보여주기  (0) 2018.07.30
FrontController 패턴과 Command 패턴  (0) 2018.07.29
JSP EL(Expression Language)  (0) 2018.07.29
JSP 파일 업로드  (0) 2018.07.29

지금은 확장자 패턴을 사용해 보겠다


FrontController 패턴이다 

모든 처리를 하나의 클래스 안에서 처리를 하는 방식이다.


이렇게 각각의 요청을 하나의 클래스에서 받아 비교를 한뒤 처리를 한다.

이렇게 하면 if 절 하나하나마다 코드량이 엄청 나게 늘어날 수 있다. 그래서 이제 설명할 Command 패턴을 사용한다.



이제 서블릿에서 받은 클래스에서 DAO로 접근을 해서 로직을 수행한다. 이것을 Command 패턴이라고 한다. MVC프로젝트에서는 이런 구조를 많이 사용한다. 



JSP EL(Expression Language) 알아보도록 하자

EL(Expression Language) 은 기존의 JSP 문법을 다른 사람이 알아보기 쉽도록 간략화 해주는 기법이다. 유지보수에 도움이 된다.

기존 <% %> 를 ${ }로 바꾸어 표기하는 방식이다.


 이름 : <jsp:getProperty name= "member" property="name"/><br/> 

이렇게 코딩 되어있는것을

 이름 : ${member.name}<br/> 처럼 간단하게 변경가능하게한다.


뿐만아니라 다양한 내장객체를 사용할 수 있어 보기 좋게 표현 가능하다.


왼쪽에서 초기화해준 값들을 오른쪽에서와 같이 사용하게 해준다.


위쪽 context 초기화 파라미터 값들을 문서 어디에서든 사용할 수 있게 값을 지정해주는 web.xml 코드이다.

'프로그래밍 > JSP' 카테고리의 다른 글

JSP 포워딩(RequestDispatcher 클래스  (0) 2018.07.29
FrontController 패턴과 Command 패턴  (0) 2018.07.29
JSP 파일 업로드  (0) 2018.07.29
DAO, DTO / PrepareStatement / 커넥션풀(DBCP)  (0) 2018.07.27
jdk tomcat 오류  (0) 2018.07.27

파일 업로드를 만들기 앞서 라이브러리를 다운로드 받는다

http://www.servlets.com 에 들어가 com.oreilly.servlet를 클릭 한 후 Download에 cos-26Dec2008.zip 을 다운 받아 준다


그 후 압축을 푼뒤 자신의 프로젝트 파일 WebContent 안에 fileForder를 만들어주어 파일업로드가 될때 파일이 저장될 폴더를 만든다.


실제 파일이 저장되는 경로는

C:\Users\kim\Downloads\apache-tomcat-9.0.10\apache-tomcat-9.0.10\wtpwebapps\ex2\fileForder

자신이 아파치 톰캣 서버를 설치한 곳의 프로젝트 fileForder가 되겠다


다음은 코드이다


파일 업로드 화면


파일 업로드 동작

'프로그래밍 > JSP' 카테고리의 다른 글

FrontController 패턴과 Command 패턴  (0) 2018.07.29
JSP EL(Expression Language)  (0) 2018.07.29
DAO, DTO / PrepareStatement / 커넥션풀(DBCP)  (0) 2018.07.27
jdk tomcat 오류  (0) 2018.07.27
자바 빈 사용  (0) 2018.07.26

+ Recent posts