반응형

https://windorsky.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

di 스프링 관련 파일은 위의 티스토리에서 다운 받으셔서 세팅해 주시면 됩니다.

 

이전 글에서는 SETTER을 이용한 DI를 실습해 보았습니다.

이번에는 생성자를 이용한 DI기능을 실습해 보도록 하겠습니다.

  person.xml을 다음과 같이 작성합니다. <bean>태그를 이용해 id가 personService1인 빈을 생성하고 <constructor-arg> 태그를 이용해 생성자 호출 시 생성자 매개변수로 <value>태그의 값을 전달하여 속성을 초기화합니다. 이처럼 PersonServiceImpl 클래스의 인자가 한 개인 생성자를 이용하여 name 속성에 <value>태그의 값이 주입됩니다. 두 번째 <bean> 태그에서는 빈 생성 시 인자가 두 개인 생성자를 호출하면서 두 개의 값을 전달하여 각각의 속성을 초기화합니다. 즉, PersonServiceImpl 클래스의 인자가 두 개인 생성자를 이용해 name과 age속성에 <value>태그의 값이 차례대로 주입됩니다.

PersonServiceImpl 클래스에서는 인자가 한 개인 생성자와 두 개인 생성자를 구현합니다.

  실행 클래스인 PersonTest2를 다음과 같이 작성합니다. id가 personService1인 빈에 접근하여 sayHello() 메서드를 호출하면 age는 0으로 출력됩니다. 반면에 id가 personService2인 빈에 접근한 후 sayHello() 메서드를 호출하면 두 속성 값이 모두 출력됩니다.

main() 메서드가 있는 실행클래스가 보이는 사애에서 시행 버튼을 클릭하여 실행한 결과입니다.

반응형

'2020 > SPRING' 카테고리의 다른 글

스프링 API를 이용한 AOP 기능 구현 과정  (0) 2020.01.07
Spring AOP기능  (0) 2020.01.07
회원 기능 이용해 DI 실습  (0) 2020.01.07
의존성 주입(DI) setter을 이용한 방식  (0) 2020.01.07
프레임워크란?  (0) 2020.01.07
블로그 이미지

꽃꽂이하는개발자

,
반응형

  의존성 주입의 두 방법인 SETTER를 이용한 방식과 생성자를 이용한 방식을 각각 실습해보겠습니다.

  이번 글에서는 setter을 이용한 방식을 사용하고 다음글에서 생성자를 이용한 di기능을 실습하겠습니다.

New-> Project를 선택한 후 java project를 선택하고 next를 클릭합니다.

프로젝트 명을 입력하시고 Finish를 클릭합니다.

이클립스에서 자바 프로젝트를 생성합니다. 자바 프로젝트 생성 시 이클립스의 Perspective를 자바 모드로 변경할지 물으면 Remember my decision 체크박스에 체크하고 Open Perspective를 클릭합니다.

그리고 pro19 아래 새 폴더 lib를 만든 후 여기에 올려놓은 스프링 DI관련 라이브러리를 다운받으신 후 복사해 붙여 넣습니다.

cglib-nodep-2.1_3.jar
0.31MB
commons-dbcp.jar
0.10MB
commons-logging.jar
0.05MB
commons-pool.jar
0.06MB
spring.jar
2.43MB

프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭한 후 Build Path > Configure Build Path를 선택합니다.

libraries 탭을 선택하시고 Add Jars... 를 클릭하신후 앞에서 미리 만든 lib폴더의 라이브러리들을 모두 선택한 후 OK를 클릭합니다.

그리고 Apply and Close를 클릭하여 이 내용을 적용합니다.

Project Explorer의 Referenced Libraries에서 jar 파일들을 확인할 수 있습니다.

 

이제 DI 를 설정하겠습니다. 스프링에서 DI 설정은 XML파일에서 합니다. 따라서 빈을 설정하는 person.xml 파일을 생성합니다.

프로젝트 위에 마우스 오른쪽 버튼을 클릭한 후 New> other...를 선택하고 선택창에서 XML > XML File을 선택하고 next를 클릭합니다.

파일 이름으로 person.xml을 입력하고 Finish를 클릭합니다.

그러면 프로젝트 이름 하위에 person.xml이 생성된 것을 확인할 수 있습니다.

<bean>태그에 사용되는 여러 가지 속성들

속성 이름 설명
id 빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다.
name 객체의 별칭입니다.
class 생성할 클래스입니다. 패키지 이름까지 입력해야 합니다.
constructor-arg 생성자를 이용해 값을 주입할 때 사용합니다.
property setter를 이용해 값을 주입할 때 사용합니다.

  다음과 같이 person.xml을 작성합니다. <beans>태그로 스프링 실행 시 생성할 빈을 설정합니다. 빈은 앞에서도 언급했듯이 스프링을 실행할 때 사용하는 클래스 객체(인스턴스)입니다.

  실행 클래스 실행 시 <bean> 태그를 이용해 com.spring.ex01.PersonServiceImpl 클래스에 대한 빈을 생성합니다. 그리고 이 빈에 대해 접근할 수 있는 빈 id를 personService로 지정한 후 <property> 태그를 이용해 PersonServiceImpl 클래스 객체의 name속성에 <value> 태그의 값으로 치괗합니다. 소스 코드에서 new를 이용해 직접 객체를 생성하던 것을 person.xml에서 설정한 것입니다.

 

이번에는 실습 관련 클래스를 구현하겠습니다.

com.spring.ex01 패키지를 만들고 클래스 파일을 생성합니다.

PersonService 인터페이스를 다음과 같이 작성합니다. 인터페이스 PersonService에 추상 메서드 sayHello()를 선언합니다.

 

  PersonServiceImpl 클래스를 다음과 같이 작성합니다. 구현 클래스 PersonServiceImpl에서 인터페이스 PersonService를 구현하고 setter를 이용해 person.xml에서 <value>태그로 설정한 값을 name 속성에 주입합니다. 단, age 속성은 setter가 없으므로 빈이 생성되더라도 값이 초기화되지 않습니다.

  다음과 같이 실행 클래스인 PersontTest클래스를 작성합니다. 라이브러리에서 제공하는 클래스를 이용해 XML파일을 읽어와서 빈을 생성해 사용합니다. 실행 클래스를 실행하면 스프링의 XmlBeanFacory 클래스를 이용해 person.xml의 설정대로 PersonServiceImpl 빈을 메모리에 생성합니다. 이 빈에 대한 id인 personService로 접근하여 sayHello()메서드를 호출합니다.

콘솔에 name 속성 값은 person.xml에서 <value>태그로 설정한 값이 출력되지만 age 속성 값은 0이 출력됩니다.

 

반응형

'2020 > SPRING' 카테고리의 다른 글

스프링 API를 이용한 AOP 기능 구현 과정  (0) 2020.01.07
Spring AOP기능  (0) 2020.01.07
회원 기능 이용해 DI 실습  (0) 2020.01.07
Spring 생성자를 이용한 DI 기능  (0) 2020.01.07
프레임워크란?  (0) 2020.01.07
블로그 이미지

꽃꽂이하는개발자

,

프레임워크란?

2020/SPRING 2020. 1. 7. 10:06
반응형

  프레임워크의 사전적 의미는 '어떤 것을 구성하는 구조 또는 뼈대'입니다.

  소프트웨어적 의미로는 '기능을 미리 클래스나 인터페이스 등으로 만들어 제공하는 반제품'정도로 해석할 수 있습니다. 즉, 어느 정도 완성된 상태로 제공하는 기능인 셈입니다.

  즉 프레임워크를 사용하는 이유로 한마디로 정리하면 일정한 기준에 따라 개발이 이루어지므로 개발 생산성과 품질이 보장된 애플리케이션을 개발할 수 있기 때문입니다.

 

  스프링 프레임워크

  프레임워크 중 현재 가장 많이 사용되는 것이 스프링 프레임워크입니다. 스프링 프레임워크(이하 스프링)는 자바 웹 애플리케이션 개발을 위한 오픈 소스 프레임워크로, 기존 프레임워크보다 가벼운 경량 프레임워크입니다.

  또한 스프링은 경량 컨테이너라고도 부릅니다. '컨테이너'라고 하면 대표적인 것으로 톰캣을 들 수 있습니다. 톰캣은 서블릿 컨테이너라고 부르는데, 그 이유는 톰캣을 실행하면 톰캣은 서블릿의 생성, 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지고 서블릿이 관리하기 때문입니다.

  스프링도 마찬가지입니다. 애플리케이션에서 사용되는 여러가지 빈(클래스 객체)을 개발자가 아닌 스프링이 권한을 가지고 직접 관리합니다. 스프링 이전에 사용되던 프레임워크로 EJB(Enterprise JavaBean, 엔터프라이즈 자바빈즈)라는 것이 있는데, EJB는 실행 시 무거워 여러 가지 문제를 일으키는 단점이 있습니다. 스프링은 이런 EJB의 단점은 개선하고 좋은 점은 더 발전시켜서 탄생한 프레임워크입니다.

 

스프링의 특징

  • EJB보다 가볍고 배우기도 쉬우며 경량 컨테이너의 기능을 수행합니다.
  • 제어 역행(Ioc, Inversion of Control) 기술을 이용해 애플리케이션 간의 느슨한 결합을 제어합니다.
  • 의존성 주입(DI, Dependency Injection)기능을 지원합니다.
  • 관점 지향(AOP, Aspect-Oriented Programming) 기능을 이용해 자원 관리를 합니다.
  • 영속성과 관련된 다양한 서비스를 지원합니다.
  • 수많은 라이브러리와의 연동 기능을 지원합니다.

의존성 주입: 클래스 객체를 개발자가 코드에서 생성하지 않고 프레임워크가 생성하여 사용하는 방법입니다.

제어 역행: 서블릿이나 빈 등을 개발자가 코드에서 생성하지 않고 프레임워크가 직접 수행하는 방법입니다.

관점 지향: 핵심 기능 외 부수 기능들을 분리 구현함으로써 모듈성을 증가 시키는 방법입니다.

 

  스프링 Core 기능을 스프링의 다른 기능을 수행하는 데 필요한 기반 기능을 제공합니다. 그리고 스프링 MVC 기능을 이용해 애플리케이션을 MVC로 쉽게 개발할 수 있습니다. 그 외 스프링의 주요 기능에 대한 상세한 설명을 하겠습니다.

스프링 기능 설명
Core 다른 기능과 설정을 분리하기 위한 IoC 기능을 제공합니다.
Context 스프링의 기본 기능으로서 애플리케이션의 각 기능을 하는 빈(Bean)에 대한 접근 방법을 제공합니다.
DAO JDBC 기능을 좀 더 편리하게 사용할 수 있도록 합니다.
ORM 하이버네이트나 마이바티스 같은 영속성 관련 프레임워크와 연동된 기능을 제공합니다.
AOP 관점 지향 기능을 제공합니다.
Web 웹 어플리케이션 개발에 필요한 기능을 제공합니다.
WebMVC 스프링에서 MVC 구현에 관련된 기능을 제공합니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

이전 글에 이어서 이번에는 글 삭제 기능을 구현해 보겠습니다.

  글을 삭제할 때는 테이블의 글 뿐만 아니라 그 글의 자식 글과 이미지 파일도 함게 삭제 해야 합니다.

순서는

  • 글 상세창(vieArticle.jsp)에서 삭제하기를 클릭하면 /board/removeArticle.do로 요청합니다.
  • 컨트롤러에서는 글 상세창에서 전달받은 글 번호에 대한 글과 이에 관련된 지식 글들을 삭제합니다.
  • 삭제된 글에 대한 이미지 파일 저장 폴더도 삭제합니다.

  BoardController 클래스를 다음과 같이 작성합니다. 브라우저에서 삭젤르 요청하면 글 번호를 메서드로 전달해 글 번호에 대한 글과 그 자식 글을 삭제하기 전에 먼저 삭제할 글 번호와 자식 글 번호를 목록으로 가져옵니다. 그리고 글을 삭제한 후 글 번호로 이루어진 이미지 저장 폴더까지 모두 삭제합니다.

 

BoardService 클래스를 다음과 같이 작성합니다. 컨트롤러에서 removeArticle() 메서드 호출 시 매개변수 articleNO로 글 번호를 전달받아 BoardDAO의 selectRemovedArticles()를 먼저 호출해 글 번호에 대한 글과 그 자식 글의 번호를 articleNOList에 저장합니다. 그런 다음 deleteArticle() 메서드를 호출해 글 번호에 대한 글과 자식 글을 삭제하고 글 번호를 반환합니다.

BoardDAO클래스를 다음과 같이 작성합니다. selectRemovedArticles() 메서드는 삭제할 글에 대한 글 번호를 가져옵니다. deleteArticle() 메서드는 전달된 articleNO에 대한 글을 삭제합니다.

viewArticle.jsp에서 삭제하기를 클릭하면 fn_remove_article() 자바스크립트 함수를 호출해 글 번호인 articleNO를 컨트롤러로 전송하도록 구현합니다.

 

실행해 보면

글 목록에서 삭제됩니다.

 

github : github.com/soulwine-it

 

반응형

'2020 > JSP SERVLET' 카테고리의 다른 글

서블릿 매핑  (0) 2020.05.17
글 수정 기능 구현  (0) 2020.01.03
글 상세 구현  (0) 2020.01.03
게시판 글쓰기(파일첨부) 구현  (0) 2020.01.03
모델 2 답변형 게시판 구현(게시판 테이블 생성)  (0) 2020.01.02
블로그 이미지

꽃꽂이하는개발자

,
반응형

이 게시판 + 글쓰기 + 상세내용에 이어 이번에는 글 수정 기능을 구현해 보겠습니다.

글 수정 기능을 구현하는 과정은 다음과 같습니다.

  • 글 상세창(viewArticle.jsp)에서 수정하기를 클릭해 글 정보를 표시하는 입력창들을 활성화합니다.
  • 글 정보와 이미지를 수정한 후 수정반영하기를 클릭해 컨트롤러에 /board/modArticle.do로 요청합니다.
  • 컨트롤러는 요청에 대해 upload() 메서드를 이용하여 수정된 데이터를 Map에 저장하고 반환합니다.
  • 컨트롤러는 수정된 데이터를 테이블에 반영한 후 temp폴더에 업로드된 수정 이미지를 글 번호 폴더로 이동합니다.
  • 마지막으로 글 번호 폴더에 있던 원래 이미지 파일을 삭제합니다.

지금까지 해왔던 파일들을 복사하여 brd05패키지와 board04폴더에 넣어서 코드를 추가하도록 하겠습니다.

 

  BoardController 클래스를 다음과 같이 작성하겠습니다. 컨트롤러에서 수정을 요청하면 upload() 메서드를 이용해 수정 데이터를 Map으로 가져옵니다. Map의 데이터를 다시 ArticleVO 객체의 속성에 저장한 후 SQL문으로 전달하여 수정 데이터를 반영합니다. 마지막으로 temp폴더에 업로드된 수정 이미지를 다시 글 번호 폴더로 이동하고 글 번호 폴더의 원래 이미지를 삭제 합니다.

BoardController 클래스에 추가하였습니다.

 BoardService 클래스를 다음과 같이 작성합니다. 컨트롤러에서 modArticle() 메서드를 호출하면 다시 BoardDAO의 updateArticle() 메서드를 호출하면서 수정 데이터를 전달합니다.

BoardService클래스 추가

BoardDAO 클래스를 다음과 같이 작성합니다. 전달된 수정 데이터에 대해 이미지 파일을 수정하는 경우와 이미지 파일을 수정하지 않는 경우를 구분해 동적으로 SQL문을 생성하여 수정 데이터를 반영합니다.

BoardDAO 클래스 추가
viewArticle.jsp

출력을 해보겠습니다.

하단에 있는 수정하기 를 누르니 창이 활성화 되면서 수정이 가능하게 되었습니다.

마음대로 적고 수정반영하기를 누르니 alert 가 뜨네요

그럼 수정이 반영이 되고 리스트로 돌아갔다가 다시 들어오면 바뀐 내용이 그대로 있습니다.

 

다음 글에서는 글 삭제 기능을 구현해 보도록 하겠습니다.

 

github: github.com/soulwine-it

소스파일은 깃허브에서 다운 받으실 수 있습니다.

반응형

'2020 > JSP SERVLET' 카테고리의 다른 글

서블릿 매핑  (0) 2020.05.17
게시판 글 삭제 기능 구현  (0) 2020.01.06
글 상세 구현  (0) 2020.01.03
게시판 글쓰기(파일첨부) 구현  (0) 2020.01.03
모델 2 답변형 게시판 구현(게시판 테이블 생성)  (0) 2020.01.02
블로그 이미지

꽃꽂이하는개발자

,
반응형

이전 글 게시판 + 글쓰기에 이어 이번에는 글 상세 기능을 구현해 보겠습니다.

글 상세 기능을 구현하는 과정은 다음과 같습니다.

  • 글 목록창에서 글 제목을 클릭해 컨트롤러에 /board/viewArticle.do?articleNO=글번호로 요청합니다.
  • 컨트롤러는 전송된 글 번호로 글 정보를 조회하여 글 상세창(viewArticle.jsp)으로 포워딩합니다.
  • 글 상세창(viewArticle.jsp)에 글 정보와 이미지 파일이 표시됩니다.

이번에 사용할 클래스와 jsp파일은 위와 같습니다.

  FileDownloadController 클래스는 다음과 같이 작성하겠습니다. viewArticle.jsp에서 전송한 글번호와 이미지 파일 이름으로 파일 경로를 만든 후 해당 파일을 내려 받습니다.

BoardController 클래스를 다음과 같이 작성합니다. /viewArticle.do로 요청하여 글 번호를 받아옵니다. 그리고 그 번호에 해당하는 글 정보를 가져와 article 속성으로 바인딩한 후 viewArticle.jsp로 전송합니다.

컨트롤러에서 전달받은 글 번호로 다시 selectArticle() 메서드를 호출합니다.

전달받은 글 번호를 이용해 글 정보를 조회합니다.

viewArticle.jsp를 다음과 같이 작성합니다. 컨트롤러에서 바인딩한 글 정보 속성을 이용해 표시합니다. 이미지 파일이 존재하는 경우는 글 번호와 이미지 파일 이름을 FileDownloadController로 전송한 후 <img> 태그에 다운로드 하여 표시합니다.

 

viewArticle.jsp
articleForm.jsp
listArticles.jsp

게시판의 글을 클릭해보면 위와 같이 상세페이지가 나오는 걸 알 수 있습니다.

다음 글에서는 글 수정 기능을 구현해 보겠습니다

github : soulwine-it

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

  이전 글에서는 게시판을 만들어 보았습니다.

  이번 글에서는 게시판의 글쓰기를 구현해 보겠습니다.

  순서는

  • 글 목록창(listArticles.jsp)에서 글쓰기 창을 요청합니다.
  • 글쓰기창에서 글을 입력하고 컨트롤러에 /board/addArticle.do로 글쓰기를 요청합니다.
  • 컨트롤러에서 Service 클래스로 글쓰기창에서 입력한 글 정보를 전달해 테이블에 글을 추가합니다.
  • 새 글을 추가하고 컨트롤러에서 다시 /board/listArticles.do로 요청하여 전체 글을 표시합니다.

  클래스와 jsp를 구현하기 전에 프로젝트 WebContent\lib 폴더에 파일 업로드와 관련된 라이브러리를 미리 복사해 붙여 넣습니다. 그리고 이미지 파일 저장소인 C:\board\article_image 폴더를 만듭니다.

  파일 업로드 관련 라이브러리 다운로드 설명은 아래를 보시면 됩니다.

https://windorsky.tistory.com/entry/JSP-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%84%A4%EC%B9%98

 

JSP 파일 업로드 라이브러리 설치

파일 업로드 기능을 사용하려면 오픈 소스 라이브러리를 설치해야 합니다. 파일 업로드 라이브러리르 설치하는 과정은 다음과 같습니다. jakarta.apache.org 로 접속후 Commons를 선택해주세요 내리시다 보면 위..

windorsky.tistory.com

 

  컨트롤러를 담당하는 BoardController 클래스를 다음과 같이 작성하겠습니다.

  action 값이/articleForm.do면 글쓰기창을 브라우저에 표시하고, action 값이 /addArticle.do면 다음 과정으로 새 글을 추가합니다. upload() 메서드를 호출해 글쓰기창에서 전송된 글관련 정보를 Map에 key/value 쌍으로 저장합니다.

  파일을 첨부한 경우 먼저 파일 이름을 Map에 저자한 후 첨부한 파일을 저장소에 업로드합니다. upload() 메서드를 호출한 후에는 반환한 Map에서 새 글 정보를 가져옵니다. 그런 다음 Service 클래스의 addAtricle() 메서드 인자로 새 글 정보를 전달하면 새 글이 등록됩니다.

 

BoardDAO클래스의 insertNewArticle() 메서드를 호출하면서 글 정보를 인자로 전달합니다.

insertNewArticle() 메서드의 SQL문을 실행하기 전에 getNewArticleNo() 메서드를 호출해 새 글에 대한 글 번호를 먼저 가져옵니다.

다음은 글쓰기와 관련된 JSP 페이지를 작성할 차례입니다. listArticles.jsp를 다음과 같이 작성합니다.

  articleForm.jsp를 다음과 같이 작성합니다. 쇼핑몰 게시판에 글을 쓸 때는 보통 사진을 첨부하는 경우가 많습니다. 이처럼 글쓰기 작업을 할 때 첨부 파일도 같이 업로드할 수 있도록 반드시 <form>태그의 enctype속성을 multipart/form-data로 설정합니다.

/board/listArticle.do로 글 목록창을 요청한 후 다시 글쓰기를 클릭해 board/articleForm.do로 글쓰기 창을 요청합니다. 그리고 글쓰기 창에서 "상품후기입니다."라는 새 글을 작성하고 글쓰기를 클릭해/board/addArticle.do로 요청합니다.

글쓰기를 누르면 다음과 같은 창이 뜨고 파일을 선택할 수도 있습니다.

파일을 첨부해서 글을 쓰면 우리가 처음에 만들어 주었던

C:\board\article_image 에 파일이 업로드 됩니다.

 

하지만 이 글쓰기 기능에는 한 가지 문제가 있습니다.

  바로 새 글에 첨부한 파일들이 같은 폴더에 저장된다는 것이빈다. 얼핏 보기엔 큰 무넺가 아닌것 같지만 이렇게 저장하면 다른 사용자가 첨부한 파일과 이름이 같아 구별하기가 어렵습니다.

  따라서 이번에는 업로드한 파일이 각각의 글 번호를 이름으로 하는 폴더를 생성하고, 저장까지 할 수 있도록 구현해 보겠습니다.

  과정은 다음과 같습니다.

  • 글쓰기창에서 새 글 전송시 컨트롤러의 upload()메서드를 호출해 새 글 정보를 Map으로 반환받고 첨부한 파일은 임시로 temp 폴더에 업로드한다
  • 컨트롤러는 Service 클래스의 addNewArticle() 메서드를 호출하면서 새 글 정보를 인자로 전달해 테이블에 추가한 후 새 글 번호를 반환받습니다.
  • 컨트롤러에서 반환 받은 새 글 번호를 이용해 파일 저장소에 새 글 번호로 폴더를 생성하고 temp폴더의 파일을 새 글 번호 폴더로 이동합니다.

  BoardController 클래스를 다음과 같이 작성합니다. upload() 메서드를 호출해 첨부한 파일을 temp 폴더에 업로드한 후 새 글정보를 Map으로 가져옵니다. 그리고 새 글을 테이블에 추가한 후 반환 받은 새 글 번호로 폴더를 생성하고 temp폴더의 이미지를 새 글 번호 폴더로 이동합니다.

BoardService 클래스를 다음과 같이 작성합니다. addArticle() 메서드의 반환 타입을 int로 변경합니다. 그리고 BoardDAO의 insertNewArticle() 메서드를 호출해 새 글 번호를 받아서 반환합니다.

BoardDAO  클래스에서는 insertNewArticle() 메서드를 호출해 SQL문을 실행한 후 새 글 번호를 반환합니다.

다음 글에서는

글 상세 기능을 구현해 보도록 하겠습니다

 

GITHUB: github.com/soulwine-it 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

우선 오라클 데이터 베이스에 게시판 기능 테이블 생성 및 데이터를 추가하겠습니다.

 

우선 t_Board 테이블이 있을 수도 있으니 삭제를 해주겠습니다.

하지만 전 만든적이 없기 때문에 테이블이 존재 하지 않는다고 나오네요

기존에 사용하던 t_member와 연결시켜주면서 테이블을 만들어 주었습니다.

다음은 만든 테이블에 테스트 글을 추가하겠습니다.

추가 후 반드시 commit;을 해주셔야 합니다.

 

이제 DB 작업은 마무리를 하고 실제로 클래스와 jsp를 구현해 보겠습니다.

시작하기 앞서 우리가 필요한 파일들을 위와같이 만들어 주었습니다.

  BoardController 클래스는 /board/listArticles.do로 요청 시 화면에 글 목록을 출력하는 역할을 합니다. getPathInfo() 메서드를 이용해 action 값을 가져오고 action값이 null이거나 /listArticles.do일 경우 BoardService 클래스의 lsitArticles() 메서드를 호출해 전체 글을 조회합니다. 그리고 조회한 글을 articlesList속성으로 바인딩하고 글 목록창으로 포워딩합니다.

 

 

 

  BoardServce 클래스를 다음과 같이 작성합니다. BoardDAO 객체를 생성한 후 select AllArticle() 메서드를 호출해 전체 글을 가져옵니다.

  BoardDAO 클래스를 작성하겠습니다

  BoardService 클래스에서 BoardDAO의 selectAllArticles() 메서드를 호출하면 계층형 SQL문을 이용해 계층형 구조로 전체 글을 조회한 후 반환합니다.

ArticleVO 클래스를 다음과 같이 작성합니다. 조회한 글을 저장하는 ArticleVO 클래스에 글의 깊이를 저장하는 LEVEL 속성을 추가합니다.

VO의 자세한 사항은 깃허브 참조 요망.

 

  이제 JSP에 글 목록을 표시해보겠습니다. listArticles.jsp를 다음과 같이 작성합니다.

  첫 번째<forEeach> 태그를 이용해 articlesList 속성으로 포워딩된 글 목록을 차례로 전달받아 표시합니다. <forEach> 태그 반복 시 각 글의 level 값이 1보다 크면 답글이므로 다시 내부 <forEach>태그를 이용해 1부터 level 값까지 반복하면서 공백을 만들고(들여쓰기) 답글을 표시합니다. 이 때 level값이 1보다 크지 않으면 부모 글이므로 공백 없이 표시합니다.

출력해 봅시다.

다음 글에서는 게시판 글쓰기를 구현해 보도록 하겠습니다.

 

github: github.com/soulwine-it

출처: 자바웹을 다루는 기술

반응형

'2020 > JSP SERVLET' 카테고리의 다른 글

글 상세 구현  (0) 2020.01.03
게시판 글쓰기(파일첨부) 구현  (0) 2020.01.03
MVC 회원 정보 수정 및 삭제 기능 구현  (0) 2019.12.30
MVC 회원 정보 추가 기능  (0) 2019.12.30
jstl download  (0) 2019.12.30
블로그 이미지

꽃꽂이하는개발자

,