사이먼's 코딩노트

[Java] 게시판 제작(15) 본문

프로젝트/[Java] 게시판 제작

[Java] 게시판 제작(15)

simonpark817 2024. 3. 27. 01:08

[게시판 제작 ~ing]

 

GitHub - psm817/full_stack_proj_2024_03

Contribute to psm817/full_stack_proj_2024_03 development by creating an account on GitHub.

github.com

 

[html 추출 기능 구현]

  • 이번에는"export html" 이라는 명령어와 함께 실행과 동시에 html 파일을 추출하는 기능을 구현해봅시다.
  • 기존의 명령어의 종류는 article과 member 였는데, export가 추가됨으로써 export에 대한 각 컨트롤러, 서비스, Dao를 모두 구현해야한다.
  • article, member의 MVC 패턴과 동일하게 export도 Controller에서는 오직 Service로만 연결되고, Service에서는 오직 Dao로만 연결되는 단방향 형식으로 코드를 추가해야한다.
  • 코드가 길어지는 관계로 추가 및 수정된 모든 코드를 포스팅하긴 힘들지만, 상단의 리포지터리 주소를 참고 부탁드립니다.

 

  • 먼저 App에서 명령어를 구분하는 조건문에 export를 추가해준다.
String controllerName = cmdBits[0];
String actionMethodName = cmdBits[1];
Controller controller = null;

if(controllerName.equals("article")) {
    controller = articleController;
}

else if(controllerName.equals("member")) {
    controller = memberController;
}

else if(controllerName.equals("export")) {
    controller = exportController;
}

else {
    System.out.printf("%s는 존재하지 않는 명령어입니다.\n", cmd);
    continue;
}
  • 물론 App.java 파일 상단에 exportController에 대한 선언은 마친 상태이다. [ExportController exportController = new exportController(sc);]

 

  • 그 다음은 ExportController.java 클래스를 생성해주고, 이 때 Controller를 상속하도록 해야한다.
public class ExportController extends Controller {
    private Scanner sc;
    private ExportService exportService;

    public ExportController(Scanner sc) {
        this.sc = sc;
        exportService = Container.exportService;
    }

    public void doAction(String cmd, String actionMethodName) {
        switch(actionMethodName) {
            case "html" :
                doHtml();
                break;
            default :
                System.out.println("존재하지 않는 명령어 입니다.");
                break;
        }
    }

    private void doHtml() {
        System.out.println("html을 생성합니다.");
        exportService.makeHtml();
    }

    public void makeTestData() {

    }
}
  • ExportController는 Controller를 상속받기 때문에, 추상 메서드인 doAction()과 makeTestData()는 ExportController에서 굳이 사용을 하지 않는다 하여도 반드시 오버라이딩 해야한다.
  • ExportController.java 에서는 [ExportService exportService]를 선언하여 ExportService와 연결되는 객체 변수를 생성한다.
  • 이 때 Container.java에서는 exportService라는 공공재 변수가 ExportService() 객체과 연결되는 코드를 추가해줘야한다.
  • doAction() 메서드는 switch문을 통해 명령어의 케이스에 나눠 해당 기능을 수행하는 메서드를 호출하도록 한다.
  • "html"이라는 actionMethodName을 받으면 doHtml() 메서드를 수행하게 하고 이 메서드는 ExportController에서 직접 수행하지 않고 ExportService에게 역할을 전달한다.

 

  • 마지막으로 "html export"에 관한 실제 기능 구현은 ExportService.java에서 작성한다.
public class ExportService {
    ArticleService articleService;
    MemberService memberService;

    public ExportService() {
        articleService = Container.articleService;
        memberService = Container.memberService;
    }

    public void makeHtml() {
        List<Article> articles = articleService.getForPrintArticles();

        for(Article article : articles) {
            String writerName = memberService.getMemberNameById(article.memberId);

            String fileName = article.id + ".html";
            String html = "<meta charset=\"UTF-8\">";
            html += "<div>번호 : " + article.id + "</div>";
            html += "<div>날짜 : " + article.regDate + "</div>";
            html += "<div>작성자 : " + writerName + "</div>";
            html += "<div>제목 : " + article.title + "</div>";
            html += "<div>내용 : " + article.body + "</div>";

            if(article.id > 1) {
                html += "<div><a href=\"" + (article.id - 1) + ".html\">이전글</a></div>";
            }
            html += "<div><a href=\"" + (article.id + 1) + ".html\">다음글</a></div>";

            Util.writeFileContents("exportHtml/" + fileName, html);
        }
    }
}
  • makeHtml() 메서드는 다음과 같다.
  • 프로그램 실행과 동시에 사용자가 "export html"을 입력하게 되면, html 포맷에 맞춰 현재 article list에 담긴 번호, 날짜, 작성자, 제목, 내용을 웹 화면에 표출하도록 html 파일을 생성하는 것이다.
  • 이 때, 게시물이 1개 이상이라면 이전글, 다음글이라는 표시도 각각 해준다. 
  • 메서드 가장 아래의 Util에서 가져오는 writeFileContents()는 인터넷에서 공유되고 있는 많이 쓰이는 메서드를 그래도 가져와 사용하였다. 해당 메서드의 내용을 자세히 보시고 싶으시다면 상단의 리포지터리 주소를 통해 org.example.util 패키지의 Util.java 클래스를 참고 부탁드립니다. 

 

  • 현재까지 작성 및 수정된 코드를 실행하면 다음과 같이 게시판이 동작한다.

개선된 게시판 동작 7
실제 추출된 html 파일

반응형

'프로젝트 > [Java] 게시판 제작' 카테고리의 다른 글

[Java] 게시판 제작(17)  (0) 2024.04.02
[Java] 게시판 제작(16)  (2) 2024.04.01
[Java] 게시판 제작(14)  (0) 2024.03.25
[Java] 게시판 제작(13)  (0) 2024.03.25
[Java] 게시판 제작(12)  (0) 2024.03.25