쌓고 쌓다
서블릿 애플리케이션과 템플릿 엔진 본문
Member (회원 도메인)
@Getter
@Setter
public class Member {
private Long id;
private String username;
private int age;
public Member() {
}
public Member(String username, int age) {
this.username = username;
this.age = age;
}
}
생성자로 이름, 나이를 받는다. 기본 생성자도 존재.
id는 저장소에서 할당함.
MemberRepository
public class MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
private static final MemberRepository instance = new MemberRepository();
public static MemberRepository getInstance() {
return instance;
}
private MemberRepository() {
}
...
}
싱글톤 패턴을 위해 MemberRepository의 생성자는 private으로 막아놨다.
이 클래스의 인스턴스는 static으로 하나 생성되며, 접근은 getInstance로만 가져올 수 있다.
서블릿 회원 등록 폼
@WebServlet(name="memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class MemberFormServlet extends HttpServlet {
@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");
}
}
자바 코드로 HTML을 만들어서 작성해야함으로 번거롭다.
응답의 ContentType은 body에 대한 정보를 설명하는것으로 "text/html"로. 인코딩 타입도 지정해주자.
서블릿 회원 저장
@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 {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age")); // request.getParameter의 반환은 문자열이다. 변환 필요.
Member member = new Member(username, age);
memberRepository.save(member);
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
w.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>");
}
}
Form 데이터로 넘어온 것 또한 쿼리스트링 파라미터 형식이라 getParameter 메서드를 사용할 수 있다.
이때 getParameter의 반환은 문자이므로 age 필드에 저장하기위해 int로 변환이 필요하다.
서블릿 회원 목록
@WebServlet(name="memberListServlet", urlPatterns = "/servlet/members")
public class MemberListServlet extends HttpServlet {
MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Member> members = memberRepository.findAll();
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter w = response.getWriter();
w.write("<html>");
w.write("<head>");
w.write(" <meta charset=\"UTF-8\">");
w.write(" <title>Title</title>");
w.write("</head>");
w.write("<body>");
w.write("<a href=\"/index.html\">메인</a>");
w.write("<table>");
w.write(" <thead>");
w.write(" <th>id</th>");
w.write(" <th>username</th>");
w.write(" <th>age</th>");
w.write(" </thead>");
w.write(" <tbody>");
for (Member member : members) {
w.write(" <tr>");
w.write(" <td>" + member.getId() + "</td>");
w.write(" <td>" + member.getUsername() + "</td>");
w.write(" <td>" + member.getAge() + "</td>");
w.write(" </tr>");
}
w.write(" </tbody>");
w.write("</table>");
w.write("</body>");
w.write("</html>");
}
}
자바 코드를 사용하여 동적으로 HTML을 생성이 가능하다.
자바 코드로 HTML을 동적으로 생성하는 방법보다
HTML 문서에 동적으로 바꿀 부분만 자바 코드를 넣는 방법이 더 효율적일 것 같다.
그 방법이 템플릿 엔진이다.
템플릿 엔진은 HTML 필요한 부분에만 코드를 작성하여 동적으로 HTML을 생성할 수 있다.
템플릿 엔진으로 JSP, Thymeleaf 등이 있다.
'프로그래밍 > JSP & Servlet' 카테고리의 다른 글
서블릿, JSP로 MVC 패턴 만들기 (0) | 2023.07.29 |
---|---|
JSP 애플리케이션과 MVC 패턴 (0) | 2023.07.25 |
HTTP 응답 데이터 (0) | 2023.07.22 |
HTTP 요청 데이터 (0) | 2023.07.20 |
서블릿 (0) | 2023.07.19 |
Comments