이번에 해볼 상황은 다음과 같습니다.

 

HTML Form 을 통해 회원 데이터를 가입하면, 새로운 페이지에서 그 데이터를 보여주는 것입니다.

 

 

Form Servlet 구현

package servletTest.servlet.webServlet;

import servletTest.servlet.repository.MemberRepository;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class memberFormServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");

        PrintWriter w = response.getWriter();
        w.write("<!DOCTYPE html>\n" +
                "<html>\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "<form action=\"/servlet/members/save\" method=\"post\">\n" +
                "    username: <input type=\"text\" name=\"username\" />\n" +
                "    age:      <input type=\"text\" name=\"age\" />\n" +
                " <button type=\"submit\">전송</button>\n" + "</form>\n" +
                "</body>\n" +
                "</html>\n");

    }
}

url 주소 : /servlet/members/new-form

해당 주소에 접속하게 되면 response 에 html 형태로 응답을 보내게 됩니다.

 

form action 에 데이터를 보낼 ur 을 작성해줍니다.

 

Form 데이터 받아서 출력하기

package servletTest.servlet.webServlet;

import servletTest.servlet.domain.member.Member;
import servletTest.servlet.repository.MemberRepository;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")
public class memberSaveServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void  service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("MemberSaveServlet.service");

        // 요청 데이터
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        // 저장
        Member member = new Member(username, age);
        memberRepository.save(member);

        // 응답 메시지
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter writer = response.getWriter();
        writer.write("<html>\n" +
                "<head>\n" +
                " <meta charset=\"UTF-8\">\n" + "</head>\n" +
                "<body>\n" +
                "성공\n" +
                "<ul>\n" +
                "    <li>id="+member.getId()+"</li>\n" +
                "    <li>username="+member.getUsername()+"</li>\n" +
                " <li>age="+member.getAge()+"</li>\n" + "</ul>\n" +
                "<a href=\"/index.html\">메인</a>\n" + "</body>\n" +
                "</html>");
    }
}

받아온 데이터를 Member 객체에 저장해주고, 싱글톤으로 구현한 Repository 를 통해 저장해줍니다.

 

그리고 받아온 데이터를 응답메시지로 다시 HTML 형태로 출력해줍니다.

데이터를 전송을 하면

성공적으로 데이터가 출력이 됨을 볼 수 있습니다.

 

 

마무리 정리하면...

Resource 아래에 Html 파일을 작성하여 Form 을 구성할 수 있습니다.

하지만 왜 굳이 서블릿을 통해 불편하게 HTML 파일을 작성할까요?

 

그 이유는 동적으로 HTML 파일을 생성할 수 있기 때문입니다.

즉, 이미 만들어진 형태가 아닌 원하는 형태로 원할 때, 원하는 구성으로 HTML 파일을 구성할 수 있다는 장점입니다.

 

그래서 계속 달라지는 저장 결과나, 회원 목록 같은 동적인 HTML 만드는 일이 가능해집니다.

 

하지만 위의 코드를 보듯이 매우 비효율적인 코드 작성을 하게 됩니다.

 

그래서 HTML 파일 안에 변경해야하는 부분만 자바 코드를 넣을 수 있도록 한 것이 템플릿 엔진입니다.

 

템플릿 엔진에는 [ JSP , Thymeleaf, Freemarker 등 ] 이 있습니다.

 

하지만 JSP 는 현재 점점 없어지는 추세이기 때문에 Spring MVC 패턴을 가지고 토이 프로젝트를 진행하도록 하겠습니다.

 

+ Recent posts