[230109 TIL] JSP Action Tags, Java beans, useBean
0️⃣ keywords: JSP Action Tags, Java beans, useBean
keyword1 - JSP Action Tags
JSP 페이지에서 Java 등의 스크립트 언어를 사용하지 않고 다른 페이지의 Servlet 이나 Java Bean의 객체에 접근할 수 있도록 태그를 이용해 구현된 기능
keyword2 - Java beans
일종의 DTO 클래스로서 데이터를 표현하는 것을 목적으로 하는 Java class
keyword3 - useBean
자바 객체를 생성하기 위한 new 연산자를 대신하는 태그
1️⃣ 어떤 것(what)을 왜(why) 공부했나
A. Why 의도
스크립트 요소(<%%>)로 작성하며 생기는 불편함(HTML 태그를 중간에 끼워넣어야 할 때마다 괄호를 열고 닫아야함)을 해소하고 협업을 더 쉽게 하기 위해 JSP를 도입하게 됨
→ 스크립트릿의 자바코드를 제거하는 과정을 중 useBean을 사용하는 예제를 이해하는데 어려움을 겪음
B. What 어떤 것을
→ Java Beans는 무엇이고 useBean은 어떻게 사용되는걸까?
1) Bean
반복적으로 코드를 따로 작성하여 재사용하기 위해 만들어진 클래스
bean은 속성과 메서드로 이루어져 있으며, 데이터의 처리를 담당한다.
2) Java Beans
데이터를 표현하는 것을 목적으로 하는 java class
일종의 DTO 클래스로서 JavaBean 의 규격서에 따라 작성된 클래스
3) Java Beans 이용의 목적
JSP 페이지의 화면 구현(HTML)과 처리할 로직(Java)가 섞이면서 발생하는 복잡한 구성을 피하기 위하여 JSP의 로직부분을 분리해서 코드를 재사용하기 위함!
public class Bean {
private String name;
private int kor, eng;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
}
→ 이전에 공부했던 DTO와 비슷한 구조임을 확인 할 수 있었다.
(=Java에서는 DTO로 사용하는 클래스를 JSP에서는 Bean이라는 형태로 사용하고 있다고 이해함.)
useBean
useBean 액션태그는 JSP페이지에서 자바 빈을 대체하기 위한 태그이다.(자바 웹을 다루는 기술, 이병승 저)
2️⃣ 가져갈 것들 및 생각(takeaway)
좋았던 것
view 와 controller를 분리한다는 사실을 알게되었고, MVC 에 대해 조금은 알게되었다.
매번 스크립트릿 코드를 작성하면서 발생했던 syntax error를 줄일 수 있게 되었다!!
어려웠던 것
DTO와 DAO 개념 확립이 명확하게 되지 않아 회원가입 CRUD 예제를 작성할 때, useBean을 어떻게 사용해야할 지 감을 잡지 못했다.
→ DAO,DTO 복습 필요
- MemberServlet.java
package member;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
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 dao.MemberDAO;
import dto.MemberDTO;
@WebServlet("/member")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//요청 받아서 - 분석 - 결과 어떤 dao, dto, 화면 제공
String menu = request.getParameter("menu");
MemberDAO dao = new MemberDAO();
String jspName = "";
if(menu == null) {
menu = "insertform";
}
else if(menu.equals("memberlist")) {
int page = Integer.parseInt(request.getParameter("page"));
ArrayList<MemberDTO> memberlist = dao.getMemberList(page, 3);
request.setAttribute("memberlist", memberlist);
jspName = "member/memberlist.jsp";
//<jsp:useBean id="memberlist" class ="java.util.ArrayList" scope="request">
}
else if(menu.equals("member")) {
String id = request.getParameter("id");
String pw = request.getParameter("pw");
MemberDTO dto = dao.getMember(id, pw);
request.setAttribute("member", dto);
//<jsp:useBean id="member" class ="dto.MemberDTO" scope="request">
jspName = "member/member.jsp";
}
else if(menu.equals("insertform")) {
jspName = "member/insert_db.jsp";
}
else if(menu.equals("insertprocess")) {
request.setAttribute("dao", dao);
//<jsp:useBean
jspName = "member/insertresult.jsp";
}
RequestDispatcher rd = request.getRequestDispatcher(jspName);
rd.forward(request, response);
}
}
- insertresult.jsp
<%@page import="dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- member --forward --request.getParameter -->
<jsp:useBean id="dto" class="dto.MemberDTO" />
<jsp:setProperty property="*" name="dto" />
<jsp:useBean id="dao" class="dao.MemberDAO" scope="request"/>
<% int result = dao.insertMember(dto);
if(result == 1){
out.println("<h1>회원가입처리되었습니다.</h1>");
}%>
</body>
</html>