728x90
반응형

JAVA 개요

- 자바는 썬 마이크로 시스템즈(현재는 Oracle로 인수됨) 에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어

- 웹 브라우저인 넷스케이프에서 사용할 수 있는 객체 지향 프로그래밍 언어로서 보안성이 뛰어나며 컴파일한 코드는 다른 운영체제에서 사용할 수 있도록 클래스(class)로 제공된다. 객체 지향 언어인 C++언어의 객체 지향적인 장점을 살리면서 분산 환경을 지원하며 더욱 효율적이다.

 

JAVA의 역사

- 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체지향적 프로그래밍 언어이며, 썬 마이크로시스템즈에서 무료로 제공했다.

- 1991년 그린 프로젝트라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다.

- 자바는 유닉스 기반의 배경을 가지고 있기 때문에 문법적인 특성은 C언어와 비슷하다.

자바를 다른 컴파일언어와 구분짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 실행하기 위해서 JVM(자바 가상 머신, Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU나 운영체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.

 

JAVA의 특징

간단하여 배우기 쉽다.

 - 자바 언어는 C++를 기반으로 개반되었음에도 C++에서 혼란을 일으키는부분을 제거했다.

객체지향 언어이다.

 - 소프트웨어를 개발할 때 재활용 측면에서 많은 장점을 가진다.

 - 다양한 기종의 컴퓨터와 다양한 플랫폼(윈도우,솔라리스,매킨토시 등의 운영체제)에서 실행 가능하다.

보안에 강하다.

 - 자바는 바이러스가 침투하지 못하는 구조를 가지고 메모리에서 데이터접글을 제한할 수 있다.

이식성이높다.

자동 메모리 관리지원

네트워크와 분산처리 지원

멀티쓰레드 지원

동적 로딩지원


JVM(Java Virtual Machine) 자바 가상 기계

 - 자바 바이트 코드와 컴퓨터의 운영 시스템 간의 번역기 역할을 한다.

 JVM을 이용하여 사용자는 매킨토시,윈도우, 유닉스 등 다양한 컴퓨터 플랫폼에서 자바를 실행시킬 수 있다.

 - 사용자가 JAVA파일을 생성한 후 JDK의 컴파일을 거쳐 바이트코드(class)가되어 JVM을 거치면 컴퓨터가 사용할 수 있는 기계언어로 변경해주는 역할을 한다.

 - 자바 실행 흐름 :: 소스코드(*.java)생성 -> JDK컴파일 -> 클래스 파일(*.class)생성 -> JVM -> 실행




변수의 종류

 값  -  문자 -> char

      -  숫자 -> 정수(byte, short, int, long)  실수(float, double)

      -  논리 -> boolean


변수의 타입

 기본형 - 8개(boolean, char, byte, short, int, long, float, double)

           - 실제 값을 저장하는 변수


 참조형 - 기본형을 제외한 나머지 (String, System 등)


< 기본형 >

 논리형

 - true와 false중 하나를 값으로 가지며, 조건식과 논리적 계산에 사용된다.

  -> boolean (1byte)

 문자형

 - 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

  -> char (4byte)

 정수형

 - 정수 값을 저장하는데 사용된다. 주로 사용하는 것음 int 와 long이며, byte는 이진데이터를 다루는데 사용되며, short는 c언어와의 호환을 위해 추가되었다.

  -> byte(1byte), short(2byte), int(4byte), long(8byte)

 실수형

 - 실수 값을 저장하는데 사용된다. float와 double이 있다.

  -> float(4byte), double(8byte)



자료형의 크기와 범위

 논리 :: boolean   1byte    false        false,true

 문자 :: char        2byte    \u0000    0 65,535

 정수 :: byte        1byte      0            -128 ~ 127

            short       2byte      0            -32,768 ~ 32,767

            int           4byte      0            -2,147,483,648 ~ 2,147,483,647

            long        8byte      0            -9,223,370,036,854,775,808 ~ 9,223,372,036,854,775,807      

 실수 :: float        4byte      0.0f         -3.4E38 ~ +3.4E38

            double    8byte      0.0          -1.7E308 ~ +1.7E308


변수의 선언방법

선언형식 : 변수타입(자료형) 변수명

 예) int score;         //정수형 변수 선언

      score = 100;     //변수 초기화

      int score =100;  //정수형 변수 선언과 초기화

      String str = new String("abc");   //문자열 변수 선언과 초기화


명명규칙

 1. 대소문자가 구분되며 길이에 제한이 없다.

    -> True와 true는 서로 다른 것으로 간주된다.

 2. 예약어를 사용해서는 안된다. (int,false,long,double,for,char 등등...)

    -> true는 예약어라 사용할 수 없지만, True는 가능하다.

 3. 숫자로 시작해서는 안 된다.

    -> top10은 허용하시만, 7up은 허용되지 않는다.

 4. 특수문자는 '-'와 '$'만을 허용한다.

    -> $harp은 허용되지만 S#arp는 허용되지 않는다.


명명규칙 < 권장사항 >

 1. 클래스 이름의 첫 글자는 항상 대문자로 한다.

    -> 변수와 메서드 이름의 첫 글자는 항상 소문자로 한다.

 2. 여러 단어의 조합은 단어의 첫 글자를 대문자로 한다.

    -> LastIndexOf,StringBuffer

 3. 상수의 이름은 대문자로 한다. 단어는 '_'로 구분한다.

   -> PI, MAX_NUMBER



<변수 선언 규칙>






<변수, 상수, 리터럴>

  변수(variable) :: 하나의 값을 저장하기 위한 공간, 변하는 수

  상수(constant) :: 한 번만 값을 저장할 수 있는 공간, 변하지 않는 수

  리터럴(literal) :: 그 자체로 값을 의미하는 것



728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

java 연산자  (0) 2018.08.29
java 문자열 오버플로우 형변환 특수문자  (0) 2018.08.29
java 예외 try catch finally  (0) 2018.08.29
JAVA Method 클래스  (0) 2018.08.29
Spring PostConstruct 어노테이션  (0) 2018.08.29
728x90
반응형

예외 (exceptional event)

- 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의해 발생하는 오류

- 예) 0으로 나누는 것과 같은 잘못된 연산이나 배열의 인덱스가 한계를 넘을 수도 있고, 디스크에서는 하드웨어 에러가 발생할 수 있다.

- 대부분의 경우, 예외가 발생하면 프로그램이 종료된다. 그러나 무조건 종료하는 것보다 프로그램에서 사전에 오류를 처리하도록 한 후에 실행한다면 더 나은 프로그램이 될 수 있다. 이것을 예외처리라고 한다.


프로그램 오류

- 컴파일 에러 : 컴파일할 때 발생하는 에러

- 런타임 에러 : 실행할 때 발생하는 에러

JAVA의 런타임 에러 - 에러(error)와 예외(exception)


에러는 어쩔 수 없지만, 예외는 처리해야 한다.

 에러(error) -> 프로그램 코드에 의해서 수습될 수 없는 심각한 오류

 예외(exception) -> 프로그램 코드에 의해서 수습될 수 있는 미약한 오류


예외처리의 정의와 목적

 정의 -> 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것

 목적 -> 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

 

<강제 예외>

 고의적으로 0으로 나누어서 강제적으로 예외를 발생시킨다.



예외 처리기

 try 블럭은 예외가 발생할 수 있는 위험한 코드이고, catch블럭은 예외를 처리하는 코드이다.


예외 처리기의 기본 형식

 try {

      // 예외가 발생할 수 있는 코드

  } catch (예외종류 참조변수) { 

       // 예외를 처리하는 코드

  }

  finally {

       // 여기 있는 코드 try 블록이 끝나면 무조건 실행된다. 생략이 가능하다.

  }


<예외처리 1>

 0으로 나누는 예외를 발생시켜 예외처리한다.





<예외처리 2>

 배열의 크기를 벗어나는 경우에 발생되는 예외를 처리한다.




<예외처리 3>

 예외가 발생하지 않은 경우 (Exception : 정확한 예외의 이름은 모를 경우에 사용)




​<예외처리 4>

- try블럭에서 예외가 발생하면, 발생한 예외를 처리할 catch블럭을 찾는다. 첫번째 catch블럭부터 순서대로 찾고, 일치하는 catch블럭이 없으면 예외는 처리되지 않는다.

- 예외의 최고 조상인 Exception을 처리하는 catch블럭은 모든 종류의 예외를 처리할 수 있다. (반드시 마지막 catch블럭이어야 한다.)




finally 블럭

- 오류 발생과 상관없이 항상 실행되어야 하는 코드는 finally 블럭에 넣는다.

- 선택적으로 사용할 수 있으며, try-catch-finally의 순서로 구성된다.

- 예외가 발생한 경우 : try -> catch -> finally의 순서로 실행

- 예외가 발생 안한 경우 : try -> finally의 순서로 실행

- try 또는 catch블럭에서 return문을 만나도 finally블럭은 수행된다.




<finally 블럭 1>

  예외가 발생한 경우




<finally블럭 2>

 예외가 발생 안한 경우




예외의 종류

 Error : 자바 가상 기계 안에서 치명적인 오류가 발생

 RuntimeException : 프로그래밍 버그나 논리 오류에서 발생한다.




 <예외를 처리하는 방법>

① 예외를 잡아서 그 자리에서 처리하는 방법 : 해당 메서드 안에서 try - catch 블럭을 사용하여 예외를 잡고 처리한다.

② 메소드가 예외를 발생시킨다고 기술하는 방법 : 메서드가 발생되는 예외를 바로 처리하지 않고, 자신을 호출한 상위 메서드로 예외를 전달하는 방법. throws를 사용하여 다른 메서드한테 예외 처리를 맡긴다.


예외 생성하기

- 예외는 throw 문장을 이용하여 생성한다.

- new 키워드로 생성하고, throw키워드로 발생시킨다.

1.먼저, 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음

     Exception e = new Exception("고의로 발생시켰음");

2.키워드 throw를 이용해서 예외를 발생시킨다.

      throw e;        throw new Exception("고의로 발생시켰음");


<예외 생성 1>

 Exception 인스턴스를 생성할 때, 생성자에 문자열을 넣어주면 Exception 인스턴스에 메시지로 저장된다. 이 메시지는 getMessage()와 printStackTrace()를 사용하여 출력할 수 있다.




<예외 생성 2>

 참조변수 ae를 통해 생성된 ArithmeticException인스턴스에 접근할 수 있다.




예외 클래스의 계층구조

- 예외 클래스는 크게 두 그룹으로 나뉜다.

  RuntimeException클래스들 -> 프로그래머의 실수로 발생하는 예외 <-예외처리 선택

  Exception클래스들 -> 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 <- 예외처리 필수


- RuntimeException 클래스들 : 배열의 범위 벗어나는 것, 값이 null인 참조변수의 멤버를 호출하는 것, 클래스간의 형변환을 잘못한 것, 정수를 0으로 나누려고 하는것 등

- Exception 클래스들 : 존재하지 않는 파일의 이름을 입력한 것, 실수로 클래스의 이름을 잘못 입력한 것, 데이터 형식이 잘못된 것 등



<예외 클래스 1>

 컴파일 단계에서 발생하는 오류




<예외 클래스 2>

 try ~ catch문으로 예외처리를 해주어야 컴파일이 성공적으로 된다.




<예외 클래스 3>

 예외처리를 하지 않았지만 컴파일은 성공적으로 된다. 하지만 파일을 실행하면 아래와 같이 RuntimeException이 발생하여 비정상적으로 종료된다. RuntimeException 클래스들은 예외처리를 해주지 않아도 컴파일러가 문제삼지 않는다.



728x90
반응형
728x90
반응형

15) 스프링 MVC 프로세스

 

* 스프링 MVC 프로세스 모델

 

 

 

 

* 스프링 MVC의 주요 구성 요소
1) DispatcherServlet : 클라이언트의 요청을 전달 받는 역할. 컨트롤러(Controller)에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과 값을 뷰(View)에 전달하여 알맞은 응답을 생성하도록 함. (스프링 제공)
2) HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지를 결정. (스프링 제공)
3) Controller : 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServle에 알려준다. (실제 로직을 담당)
4) SQL 쿼리를 통한 데이터 질의문 전달.
5) 데이터베이스가 반환(Return)한 데이터 획득.
6) ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음.
7) ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정. (스프링 제공)
8) View : 컨트롤러의 처리 결과 화면을 생성 (Freemarker 등)


 

*  스프링 MVC 구조 및 처리 순서
1) 클라이언트의 요청이 DispatcherServlet에 전달됨.
2) DispatcherServlet은 HandleMapping을 사용하여 클라이언트의 요청을 처리할 컨트롤러(Controller)를 검색.
3) 매치되는 컨트롤러가 있다면 요청을 해당 컨트롤러에게 전달.
    DispatcherServlet은 컨트롤러 객체의 handleRequest() 메서드를 호출하여 클라이언트 요청을 처리 .
4) DB 관련 처리 (DB 질의 요청)

5) DB 관련 처리 (DB 질의 결과)
6) 컨트롤러의 handlerRequest()메서드는 처리 결과 정보를 담은 ModelAndView 객체를 리턴.
7) DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 뷰 객체를 구함.
    JSP, Velocity, Freemarker 등 다양한 뷰를 지원.
    - AbstractCachingViewResolver

    - XmlViewResolver

    - ResourceBundleViewResolver

    - UrlBasedViewResolver

    - InternalResourceViewResolver

    - FreeMakerViewResolver

    -  ViewResolvers Chaining
8) 뷰는 클라이언트에 전송할 응답을 생성.



출처: http://ooz.co.kr/226?category=818548 [이러쿵저러쿵]

728x90
반응형

'Web Programming > spring' 카테고리의 다른 글

스프링 프레임워크 (Spring Framework)란?  (0) 2018.08.29
Dependency Injection (의존성 주입)이란?  (0) 2018.08.29
Spring AOP with Annotation  (0) 2018.08.29
Spring AOP with XML  (0) 2018.08.29
Spring MVC jsp jstl  (0) 2018.08.29
728x90
반응형

14) AOP with Annotation(애노테이션)

 

* 애노테이션(Annotation) & 오토와이어링(Autowiring)

 

 - 하나의 컨트롤러(Controller)와 하나의 페이지를 매핑하는 것은 작업도 번거롭고, 관리도 힘듬.

   그렇다면 하나의 함수에 하나의 URL을 어떻게 매핑할것인가?

  -> 애노테이션(Annotation)을 사용하자!

 

 - 그럼 애노테이션은 무엇인가??

  -> 주석(Comments) 단순한 주석?

  -> 컴파일러를 거친 후에도 코드에 남아있는 특수한 주석!!

 

 애노테이션은 특수한 주석으로 자체적으로 어떠한 기능을 수행하는 것은 아니지만, 애노테이션이 가리키는 지시어(정보)를 기반으로 컴파일러는 애노테이션이 적용된 클래스 또는 매서드, 프로퍼트 등에 적절한 기능을 부여한다.

 

  -> 애노테이션은 @(골뱅이) 로 주석을 시작하며, 클래스, 매서드, 변수 등에 적용됨.

 

// dispatcher-servlet.xml (객체를 생성해주고, Injection해줌)

<context:component-scan base-package=“controller”></context:component-scan>

<bean name=“noticeDao” class=“dao.NoticeDao”> // Autowired 어노테이션을 통해서 자동 매핑됨.

 

// CustomerController.java

package controllers;

 

@Controller

@RequestMapper(“/customer/*”)

public class CustomerController {

 

    private NoticeDao noticeDao;

 

    @Autowired

    public void setNoticeDao(NoticeDao noticeDao) {

        this.noticeDao = noticeDao;

    }

 

    @RequestMapping(“notice.oz”)

    public String notices(String pg, String f, String q, Model model) throws ClassNotFoundException {

        int page = 1;

        String field = “TITLE”;

        String query = “%%”

 

        if(pg == null && pg.equals(“”))            page = Integer.parseInt(pg);

        if(f == null && f.equals(“”))                 field = _field;

        if(q == null && q.equals(“”))               query = _query;

 

        List<Notice> list = noticeDao.getNotices(page, field, query); // 페이지번호검색항목검색어

        mv.addObject(“listData”, list);

 

        return “notice.jsp“; // VIEW로 사용되는 페이지 문자열(String)

    }

 

    @RequestMapping(“noticeDetail.oz”) // 게시물 상세 내용 보기

    public String noticeDetail(String seq, Model model) throws ClassNotFoundException {

        Notice notice = noticeDao.getNotice(seq);

        model.addAttribute(“notice”, notice);

        return “noticeDetail.jsp“;
    }

 

    @RequestMapping(“noticeReg.oz”) // 게시물 등록

    public String noticeReg(Notice n /* String title, String content */) throws ClassNotFoundException {

       

        /* Notice n = new Notice();

        n.setTitle(title);

        n.setContent(content); */

        noticeDao.insert(n);

        return “redirect:notice.oz“;
    }

 

    @RequestMapping(“noticeEdit.oz”) // 게시물 수정

    public String noticeEdit(Notice n /* String title, String content */) throws ClassNotFoundException {

       

        /* Notice n = new Notice();

        n.setTitle(title);

        n.setContent(content); */

        noticeDao.update(n);       

        return “redirect:noticeDetail.oz?seq=“ + n.getSeq();
    }

}

 

 - 코드 설명 -

 

 * Context:component-scan : Controller 패키지에서 URL-메쏘드 매핑된 정보를 자동으로 검색(Auto-Scan)함. 단 Controller 애노테이션된 클래스에서 해당 메서드를 찾음. 위에서 /customer/notice.oz 서브 URL이 호출되면 notices 메서드가 수행됨.

(기존 XML 방식에서는 특정 페이지의 URL과 컨트롤러를 하나씩 배정했지만, context:component-scan을 통해서는 사용자로부터 URL이 입력된 경우 @Controller 애노테이션을 가지고 있는 클래스 내부의 RequestMapping 정보를 자동으로 스캔하여 처리 함수를 찾아 연결하여 줌.)

 

 * @RequestMapping – 표시된 URL에 해당 메서드를 매핑 (지정된 URL요청이 들어오면 해당 메서드를 실행함)


 * 그런데! XML을 사용하지 않으므로 URL-Controller 맵핑 정보(빈(Bean) 객체) 자체가 XML 파일에서 사라지게 되는데 이렇게 되면 빈(Bean) 객체를 생성하고, 프로퍼티(AOP관련 포함) 값을 세팅해줄 수가 없음.

 -> 이 문제는 @Autowired 애노테이션을 통해 해결! 

 -> component-scan을 사용하는 경우 빈(Bean)객체를 세팅하고 값을 할당해 줄 수 없지만, @Autowired를 사용하여 자동으로 객체와 변수를 연결 및 설정해 줌.

 * 메서드에서 반환하는 모델이 있다면 메서드 내에 파라메터 Model model을 선언만 해주면 됨. 해당 Model 객체가 생성되어 참조가 자동으로 됨.

[ 동일한 페이지를 다르게 처리 ]
@RequestMapping(value={“/customer/noticeReg.oz”}, method=RequestMethod.GET)
@RequestMapping(value={“/customer/noticeReg.oz”}, method=RequestMethod.POST)

 

[ 매핑된 컨트롤러의 함수가 처리하는 JSP페이지와는 다른 페이지로 결과를 넘길때 ]
return “redirect:notice.oz” // redirect 처리

 

 * Request로부터 넘어오는 인자는 1:1로 함수 매개변수로 대입 가능. 더 나아가 Request를 통해서 넘어오는 개별 어트리뷰트(Attribute) 인자의 이름(변수명)이 처리 함수의 매개 변수 레퍼런스 클래스의 인스턴스(속성 값)의 이름(변수 명)과 동일하다면 이를 자동으로 맵핑(대입)하여 줌.

 



출처: http://ooz.co.kr/225?category=818548 [이러쿵저러쿵]

728x90
반응형

'Web Programming > spring' 카테고리의 다른 글

Dependency Injection (의존성 주입)이란?  (0) 2018.08.29
Spring MVC 프로세스  (0) 2018.08.29
Spring AOP with XML  (0) 2018.08.29
Spring MVC jsp jstl  (0) 2018.08.29
Spring MVC Model2  (0) 2018.08.29
728x90
반응형
 

// NoticeController.java // 공지사항 리스트

package controllers.customer;

 

public class NoticeController implements Controller { // 스프링이 제공 (Controller)

 

    private NoticeDao noticeDao;

 

    public void setNoticeDao(NoticeDao noticeDao// setter

        this.noticeDao = noticeDao;

    }

 

    @Override

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

        throws Exception {

        String _page = request.getParameter("pg");

        String _field = request.getParameter("f");

        String _query = request.getParameter("q");

 

        int page = 1;

        String field = "TITLE";

        String query = "%%"

 

        if(_page == null && _page.equals(""))            page = Integer.parseInt(_page);

        if(_field == null && _field.equals(""))               field = _field;

        if(_query == null && _query.equals(""))          query = _query;

 

        List<Notice> list = noticeDao.getNotices(page, field, query); // 페이지번호검색항목검색어    

        ModelAndView mv = new ModelAndView("notice.jsp");

        mv.addObject("listData", list);

 

        return mv;

    }

}

 

 

실행 호출 notice.tst?pg={param.pg}&f={param.f}&q={param.q}

실행 결과 공지사항 리스트 정보 (listData)

 

- 코드 설명 -

 * NoticeDao 클래스 인스턴스를 별도로 생성. (기존 예제에서는 handleRequest 함수 이내에서 처리함)
 * Setter 함수도 생성.

 * 이전의 고전적인 JSP 방식에서는 DB처리를 위한 noticeDao 클래스를 만들어 그 인스턴스 객체를 사용하여 작업하였지만, 여전히, 객체를 생성, 호출하는 부분이 분리되지 않음. 매번 만들어야 함. 또한 함수 내에 있는 NoticeDao는 빈(Bean) 객체로 생성할 수도 없고, XML에서 접근 불가. XML을 활용하면 noticeDao의 생성과 초기화, 디펜던시 등을 분리하여 관리할 수 있음. DB등의 정보가 변경되어도 XML파일만 수정.

 

// NoticeDetailController.java // 공지사항 상세 내용

package controllers.customer;

 

public class NoticeDetailController implements Controller { // 스프링이 제공 (Controller)

 

    private NoticeDao noticeDao;

 

    public void setNoticeDao(NoticeDao noticeDao// setter

        this.noticeDao = noticeDao;

    }

 

    @Override

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

        throws Exception {

 

        String seq = request.getParameter("seq");

        Notice notice = noticeDao.getNotice(seq);

 

        ModelAndView mv = new ModelAndView("noticeDetail.jsp");

        mv.addObject("noticeData", notice);

 

        return mv;

    }

}

 

 

실행 호출 noticeDetail.tst?pg={param.pg}&f={param.f}&q={param.q}

실행 결과 noticeData 객체를 페이지에 전달하여 적절한 내용을 출력함.

 

 

// dispatcher-servlet.xml (객체를 생성해주고, 주입(Injection)함.)

<bean name="noticeDaoclass="dao.NoticeDao">

 

// 빈 객체 생성하고 값(레퍼런스)를 주입.

// setNoticeDao() 호출을 통한 값(레퍼런스배정 (value or ref )

<bean name="customer/notice.tstclass="controllers.customer.NoticeController">

    <property name="noticeDaoref="noticeDao"></property>

</bean>

 

<bean name="customer/noticeDetail.tstclass="controllers.customer.NoticeDetailController">

    <property name="noticeDaoref="noticeDao"></property>

</bean>

 

 * XML에서 noticeDao 객체를 각 빈(Bean) noticeController와 NoticeDetailController에 생성하고, 주입.

 

 

// noticeDetail.jsp // 공지사항 상세 정보 표시 페이지

<div id=notice-article-detail">

    <dl class="article-detail-row">

        <dt class="article-detail-title">제목</dt>

        <dd class="article-detail-data">

            ${notice.title}

        </dd>

    </dl>  

 <dl class="article-detail-row">

        <dt class="article-detail-title">작성일</dt>

        <dd class="article-detail-data">

            ${notice.regDate}

        </dd>

    </dl>  

    …

</div>

 

 

 

 

이러한 AOP 구현에 있어서 XML 방식의 문제점.
 * XML에 URL 수만큼 Bean객체를 생성하여 객체 값을 설정 해야하는 어려움이 있음.

 * 문제가 되는 이유는 Controller 클래스에는 URL에 매핑되는 오버라이드(Override)된 handleRequest 함수가 하나씩만 배정되어 있음.
 * URL에 반응하는 Controller가 함수 하나 하나마다 매번 캡슐(java 페이지) 생성해야 하므로, 코드 작성의 어려움이 있음. 즉 소스 페이지(JSP, XML, JAVA 등)가 여러 곳에 산재하게 됨. -> 웹 서비스 규모에 따른 너무 많은 개체 수 관리.



출처: http://ooz.co.kr/224?category=818548 [이러쿵저러쿵]

728x90
반응형

'Web Programming > spring' 카테고리의 다른 글

Spring MVC 프로세스  (0) 2018.08.29
Spring AOP with Annotation  (0) 2018.08.29
Spring MVC jsp jstl  (0) 2018.08.29
Spring MVC Model2  (0) 2018.08.29
Spring 빈 후처리기  (0) 2018.08.29

+ Recent posts