일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 성화봉송
- DP
- Segment Tree
- 비트마스크
- 위상정렬
- MST
- 언어의 온도
- 그리디 알고리즘
- 성화봉송주자
- 다음 API
- 외판원 순회
- 생활코딩
- 안드로이드 스튜디오
- 인간이 그리는 무늬
- 이분탐색
- 다음 지도 api
- 영어회화 100일의 기적
- BOJ 2098
- multiset
- 창훈쓰다
- 다이나믹 프로그래밍
- BFS
- 백트레킹
- lower_bound
- 삼성 코딩테스트
- 평창동계올림픽
- upper_bound
- yolo
- boj
- 캘리그라피
- Today
- Total
Hoon222y
[JSP & Servlet] 7장. JSP와 자바 빈즈 본문
Chap07 JSP와 자바 빈즈
7.1 빈즈(beans) 개요
- 특정한 일을 독립적으로 수행하는 컴포넌트
- 엔터프라이즈 자바 빈즈(EJB) : 서로 다른 시스템에서 사용, 로컬 자바 빈 : 하나의 시스템에서 사용
서블릿, JSP는 컨테이너에 종속되므로, 컨테이너를 벗어나면 사용할 수 없음
빈은 컨테이너와 무관함
뷰와 모델을 분리해서 컨테이너와 관련없이 순수한 자바 클래스인 빈을 이용할 수 있음
7.1.1 자바 빈즈
- 컴포넌트에는 공통의 규격이 있어야 함
- 초기에는 서로다른 회사에서 GUI 컴포넌트를 만들고, 이들을 조합해서 프로그램을 개발할 수 있도록 하는것이 초기 목적이었다.
- 자바 빈즈는 순수한 자바 클래스이지만 컴포넌트로 사용하려면 지켜야하는 규칙이 있음
7.2. JSP와 빈즈 연동
- JSP 빈즈는 JSP 에서 사용할 수 있는 자바 컴포넌트로, 빈즈 액션과 결합해서 웹프로그램을 간단하게 할 수 있음.
빈즈 클래스 구조
- 빈즈 클래스는 자바 클래스이므로 일반적인 자바 클래스 구성을 따름
- 일반적인 빈즈는 매개변수가 없는 기본생성자를 요구하므로 만일 매개변수가 있는 생성자를 구현하는 경우에는 반드시 기본 생성자를 명시적으로 선언해주어야 한다.
- 빈즈 클래스의 접근 지정자는 public이어야 함
- 모든 멤버 변수가 반드시 private해야 함
- getter, setter를 이용해 멤버 변수에 접근해야 하며, 이 둘은 접근 지정자가 public이어야 함(모든 멤버 변수에 대해 getter, setter를 만드는것이 아니라 필요한 메서드만 정의해서 사용 )
캡슐화를 하는 것임
JSP는 컨테이너에 의해 관리되고 실행됨. 빈은 사용자가 생성. 따라서 JSP와 자바 빈즈는 동일 패키지일 수 없음. 외부 클래스에 접근하기 위해서 public으로 설정
가능하면 JSP 코드 내에 스크립트릿을 사용하는 것보다 빈즈를 만들어 사용하는 것이 좋음
1 2 3 4 5 6 7 8 9 10 11 12 | class xxxBean{ //멤버변수 : 데이터베이스 테이블의 칼럼 이름과 매칭 private String xxx; //get,set 메서드 : 멤버 변수와 매칭 public String getXxx(){ return xxx; } public SetXxx(String xxx){ this.xxx=xxx; } } | cs |
useBean : 빈즈 선언을 위한 액션
* useBean 속성
id : 빈즈 클래스의 인스턴스 이름으로 사용할 변수
class : 빈즈 클래스의 클래스명, 패키지 경로 포함한 풀패스네임 지정
scope : 빈즈 클래스의 범위(page, request, session, application) , 생명주기 범위를 이야기 하는것으로, 빈즈 클래스의 생존 범위를 결정하는 속성값이다.
-> 언제까지 유효하게 유지? Scope를 application으로 지정하면 싱글턴 / session 이면 session 의 유효범위 동안 해당 클래스 인스턴스의 상태가 유지된다느 의미
1 | <jsp:useBean id = "mybean" scope="request" class="MyBean" /> | cs |
이며 이는 자바의 아래 코드와 같은 의미이다.
1 2 3 4 5 6 | MyBean mybean = (MyBean)request.getAttribute("mybean"); if(myBean == null){ myBean = new MyBean(); request.setAttribute("mybean",mybean); } | cs |
[사용자 로그인 구현 ]
login_form.html |
사용자 로그인을 위해 아이디와 비밀번호를 입력받는 화면 |
login.jsp |
입력받은 아이디 정보를 빈즈 클래스를 이용해서 확인하고 처리하는 jsp |
LoginBean.java |
사용자가 입력한 계정 정보를 매필하는 빈즈 클래스로써, 미리 저장된 계정 값과 비교해 로그인 성공 여부를 반환하는 checkUser() 메서도를 포함한다. |
[login_form.html]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <html> <head> <meta charset="UTF-8"> </head> <body bgcolor="#FFFFFF"> <div align=center> <H2>ch07 : 로그인</H2> <HR> <form method="post" action="login.jsp" name="form1"> <table width="250" border="1" align="center" cellspacing="0" cellpadding="5"> <tr> <td colspan="2" align="center">로그인</td> </tr> <tr> <td>아이디</td> <td><input type="text" name="userid" size=10></td> </tr> <tr> <td>비밀번호</td> <td><input type="password" name="passwd" size=10></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="Submit" value="로그인"></td> </tr> </table> </form> </div> </body> </html> | cs |
[LoginBean.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package myJSP.chap07; public class LoginBean { private String userid; private String passwd; final private String USERID = "손흥민"; final private String PASSWD = "7777"; // getter, setter 생성 public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } public boolean checkUser() { boolean result = false; if(passwd.equals(PASSWD) && userid.equals(USERID)) { result = true; } return result; } } | cs |
* login.jsp
빈즈 사용하지 않고 스크립트릿을 사용해서 구현한 버전
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <%@ page contentType="text/html;charset=UTF-8" import="myJSP.ch07.*" %> <% LoginBean login = new LoginBean(); if(request.getMethod().equals("POST")){ request.setCharacterEncoding("UTF-8") String userid = request.getParameter("userid"); String passwd = request.getParameter("passwd"); login.setUserid(userid); login.setPasswd(passwd); } %> <HTML> <HEAD><TITLE>ch07 : login.jsp </TITLE></HEAD> <BODY> <div align=center> <H2>로그인 예제</H2> <HR> <% if(!login.checkUser()) { out.println("로그인 실패 !!"); } else { out.println("로그인 성공 !!"); } %> <HR> 사용자 아이디 : <%= login.getUserid() %><BR> 사용자 패스워드 : <%= login.getPasswd() %> </div> </BODY> </HTML> | cs |
* login.jsp
자바 코드 대신에 useBeans 이용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <%@ page contentType="text/html;charset=UTF-8" import="myJSP.chap07.*" %> <% //액션으로 처리되지 않으므로 자바 코드 남김 request.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="login" class="myJSP.chap07.LoginBean" /> <!-- form의 파라미터명과 bean 객체에서의 이름이 일치해야 함(userid, passwd) --> <jsp:setProperty name="login" property="userid" /> <!-- setter 호출됨 --> <jsp:setProperty name="login" property="passwd" /> <html> <head> <TITLE>ch07 : login.jsp </TITLE> </head> <body> <div align=center> <H2>로그인 예제</H2> <HR> <% if(!login.checkUser()) { out.println("로그인 실패"); } else { out.println("로그인 성공"); } %> <HR> 사용자 아이디 : <jsp:getProperty name="login" property="userid" /> <br> 사용자 패스워드 : <jsp:getProperty name="login" property="passwd" /> </div> </BODY> </HTML> | cs |
에서 9,10 줄을 <jsp:setProperty name="login" property="*" /> 로도 변경 가능하다.
7번째 줄은 LoginBean 클래스를 login 이라는 이름으로 빈즈 객체를 사용하겠다는 부분이다.
[ 주소록 구현 ]
addr_list.jsp |
application scope에 저장된 AddrManager 객체를 통해 저장된 데이터를 가져와 출력 |
addr_form.html |
주소록을 등록하기 위한 양식 |
addr_add.jsp |
addr_form.html에서 입력된 내용을 AddrBean로 매핑하고 AddrManager를 이용해 데이터 추가 기능 수행 |
AddrBean.java |
주소록 데이터 구조 매핑을 위한 빈즈 클래스 |
AddrManager.java |
ArrayList를 이용해 AddrBean 형태의 데이터를 관리 |
[addr_list.jsp]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="myJSP.ch07.*"%> <jsp:useBean id="am" class="myJSP.ch07.AddrManager" scope="application"/> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ch07 : 주소록 목록</title> <style> table, td { border-collapse: collapse; border: 1px solid gray; padding: 10px; } </style> </head> <body> <div align=center> <H2>주소록</H2> <HR> <a href="addr_form.html">주소추가</a><P> <table border=1 width=500> <tr><td>이름</td><td>전화번호</td><td>이메일</td><td>성별</td></tr> <% for(AddrBean ab : am.getAddrList()) { %> <tr> <td><%=ab.getUsername() %></td> <td><%=ab.getTel() %></td> <td><%=ab.getEmail() %></td> <td><%=ab.getSex() %></td></tr> <% } %> </table> </div> </body> </html> | cs |
[addr_form.html]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>ch07 : 주소록</TITLE> <style> table, td { border-collapse: collapse; border: 1px solid gray; padding: 10px; } </style> </HEAD> <BODY> <div align="center"> <H2>주소록 등록</H2> <HR> <form method="post" action=addr_add.jsp> <table> <tr> <td>이 름</td> <td><input type=text size=20 name=username></td> </tr> <tr> <td>전화번호</td> <td><input type=text size=20 name=tel></td> </tr> <tr> <td>이메일</td> <td><input type=text size=20 name=email></td> </tr> <tr> <td>성별</td> <td> <select name=sex > <option selected>남</option> <option>여</option> </select> </td> </tr> <tr><td colspan=2 align=center> <input type=submit value="확인"> <input type=reset value="취소"></td></tr> </table> </form> </div> </BODY> </HTML> | cs |
[addr_add.jsp]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="myJSP.ch07.*"%> <% request.setCharacterEncoding("UTF-8"); %> <jsp:useBean id="addr" class="myJSP.ch07.AddrBean"/> <jsp:setProperty name="addr" property="*"/> <jsp:useBean id="am" class="myJSP.ch07.AddrManager" scope="application"/> <% am.add(addr); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ch07 : addr_add.jsp</title> <style> table, td { border-collapse: collapse; border: 1px solid gray; padding: 10px; } </style> </head> <body> <div align="center"> <H2>등록내용</H2> 이름 : <jsp:getProperty property="username" name="addr"/><P> 전화번호 : <%=addr.getTel() %><P> 이메일 : <%=addr.getEmail() %> <P> 성별 : <%=addr.getSex() %> <HR> <a href="addr_list.jsp">목록 보기</a> </div> </body> </html> | cs |
------------------------------------------------------------------------------
자바 빈즈 클래스를 이용한 클래스
[AddrBean.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package myJSP.ch07; public class AddrBean { private String username; private String tel; private String email; private String sex; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } | cs |
[AddrManager.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package myJSP.ch07; import java.util.ArrayList; import java.util.List; public class AddrManager { List<AddrBean> addrlist = new ArrayList<AddrBean>(); public void add(AddrBean ab) { addrlist.add(ab); } public List<AddrBean> getAddrList() { return addrlist; } public AddrBean getAddr(String username) { for(AddrBean ab : addrlist) { if(ab.getUsername().equals(username)) return ab; } return null; } } | cs |
'코딩 > 교육' 카테고리의 다른 글
[JSP & Servlet] 8장. 데이터베이스와 JDBC (1) | 2019.01.17 |
---|---|
[JSP & Servlet] 6장. JSP 내장 객체 (1) | 2019.01.16 |
[JSP & Servlet] 5장. JSP 기본 문법 (0) | 2019.01.16 |
[JSP & Servlet] 3장. JSP 와의 첫 만남 (1) | 2019.01.15 |
[JSP & Servlet] 사전문제 & 2장 (1) | 2019.01.15 |