Java Beans(자바 빈즈)
- JSP의 표준 액션 태그를 통해 접근할 수 있는 자바 클래스
- 멤버변수와 getter, setter 메소드로 이루어져 있음
- 패키지를 사용해야 함(디폴트 패키지는 사용하지 못함)
jsp에서 객체 생성
스크립틀릿
<%
Member member = new Member();
member.setUserid("apple");
String userid = member.getUserid();
%>
액션 태그를 통해 객체 생성
// 객체 생성
<jsp:useBean class="패키지명.클래스명" id="참조변수"/>
<jsp:useBean class="com.koreait.Member" id="member"/>
//setter
<jsp:setProperty property="필드명" name="클래스명" value="apple"/>
<jsp:setProperty property="userid" name="member" value="apple"/>
property 는 private의 필드값을 의미
//getter
<jsp:getProperty property="필드명" name="클래스명"/>
<jsp:getProperty property="userid" name="member"/>
* jsp에서는 자바 클래스를 사용하려면 패키지를 꼭 만들어야 함!
기존 기능만들어있던 _ok 로끝나는 jsp 파일들을 보면
<%@page import="javax.script.ScriptContext"%>
<%@page import="com.koreait.db.Dbconn"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./include/sessioncheck.jsp"%>
<%@ page import="java.sql.*" %>
<%
request.setCharacterEncoding("UTF-8");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String userid = (String)session.getAttribute("userid");
String userpw = request.getParameter("userpw");
String name = request.getParameter("name");
String hp = request.getParameter("hp");
String email = request.getParameter("email");
String gender = request.getParameter("gender");
String[] hobby = request.getParameterValues("hobby");
String ssn1 = request.getParameter("ssn1");
String ssn2 = request.getParameter("ssn2");
String zipcode = request.getParameter("zipcode");
String address1 = request.getParameter("address1");
String address2 = request.getParameter("address2");
String address3 = request.getParameter("address3");
String sql ="";
try{
conn = Dbconn.getConnection();
if(conn != null){
sql="select mem_userid from tb_member where mem_userid=? and mem_userpw=sha2(?,256)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,userid);
pstmt.setString(2,userpw);
rs = pstmt.executeQuery();
if(rs.next()){
sql = "update tb_member set mem_userpw=sha2(?,256), mem_username=?, mem_hp=?, mem_email=?, mem_hobby=?, mem_ssn1=?, mem_ssn2=?, mem_zipcode=?, mem_address1=?, mem_address2=?,mem_address3=?, mem_gender=? where mem_userid=? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userpw);
pstmt.setString(2, name);
pstmt.setString(3, hp);
pstmt.setString(4, email);
String hobbystr = "";
for(int i=0; i<hobby.length; i++){
hobbystr = hobbystr + hobby[i] + " ";
}
pstmt.setString(5, hobbystr);
pstmt.setString(6, ssn1);
pstmt.setString(7, ssn2);
pstmt.setString(8, zipcode);
pstmt.setString(9, address1);
pstmt.setString(10, address2);
pstmt.setString(11, address3);
pstmt.setString(12, gender);
pstmt.setString(13, userid);
pstmt.executeUpdate();
session.setAttribute("name", name);
%>
<script>
alert("변경되었습니다!");
location.href='./login.jsp'
</script>
<%
}else{
//비밀번호 틀림
%>
<script>
alert('비밀번호를 확인해주세요');
history.back();
</script>
<%
}
}
}catch(Exception e){
e.printStackTrace();
}
%>
이렇게 db를 쏴주는 문구가 있는데
이 db관련 코드를 분리시켜서 db만 담당하는 java파일을 따로 만들어내면
더 효율적이다
그것이 바로
DAO DTO
DAO : Data Access Object 데이터베이스에 접근해서 데이터를 받아와주는 역할
DTO : 받아온 데이터베이스값들을 담을 변수들(private변수들), 그 변수의 값들을 전달 or 세팅 (getter & setter)
기존 _ok.jsp에 있던 db 관련 애들은 지워쥬자
그다음 이번 글의 핵심인 Bean을 생성해볼건데
그전에 일단 마음편하게 윗쪽에 request.setCharacterEncoding("UTF-8") 한줄 추가 해주자.
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean class="com.koreait.MemberDTO" id="member" scope="request"/>
<jsp:setProperty property="*" name="member"/>
<jsp:useBean class="com.koreait.MemberDAO" id="dao"/>
빈을 쓸때는 <jsp: ~~~~~~~~~ />
이런식으로 써야함!
가상의 변수를 쓴다는 느낌
<생성할때! useBean>
useBean : Bean기능사용할거야!
id : 변수 이름은 member로 할거야
class: member변수안에는 "com.koreait.MemberDTO"의 인스턴스를 넣을거야!
scope:
- page:(기본값) 이변수는 넘어오는거 뭐 없어~
- request : 이 변수는 reqeust 객체야! 파라미터가 넘어올거야!
<생성한거 값설정해줄때 setProperty>
setProperty : request로 넘어온 값들을 어떻게 할지 설정할거야
property : 그 인스턴스 변수안에 있는 필드값
- "*" : 모든 변수들
- 하나씩 설정하고 싶을땐 <jsp:setProperty property="hp" name="member"/>
name : 어떤변수에다가 담을껀데? member!
request로 넘어온 파라미터의 name값과 property 값이 다를겨우
넘어온 파라미터의 value 값이 자동으로 안담기게된다 그럴땐
<jsp:setProperty property="hp" param="tel" name="member"/>
param을 써서 넘어온 value의 name값을 param에다 설정해주면 그 value값이 해당 property 에 들어간다
그래서 넘겨줄때 name과 인스턴스의 필드값과 일치하면 param을 따로안써줘도 되니 편해서 좋지
<%@page import="javax.script.ScriptContext"%>
<%@page import="com.koreait.db.Dbconn"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file = "./include/sessioncheck.jsp"%>
<%@ page import="java.sql.*" %>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean class="com.koreait.MemberDTO" id="member"/>
<jsp:setProperty property="*" name="member"/>
<jsp:useBean class="com.koreait.MemberDAO" id="dao"/>
<%
member.setUserid((String)session.getAttribute("userid"));
if(!dao.pwCheck(member)){
%>
<script>
alert('비밀번호가 틀렸습니다');
history.back();
</script>
<%
}else{
//edit
if(dao.edit(member)){
%>
<script>
alert('수정되었습니다');
location.href='login.jsp'
</script>
<%
}else{
%>
<script>
alert('실패했습니다');
history.back()
</script>
<%
}
}
%>
얘네를 다써주면
그냥 자바 변수 쓰듯 사용하면 됨
그리고나서 패키지를 생성하고 그안에 그냥 일반자바파일(.java)하나 생성해준다
DAO랑 DTO
DTO에는 이렇게 변수 생성해준다
그리고 게터 세터 만들어준다
DAO
db쏴주고
if(pstmt.executeUpdate() >=1) {
return true;
}
얘를 통해서 아무것도 반영못하면 0 반영하면 1이상값이 뜨기때문에
성공하면 true 반환
실패하면 false반환하게 해야함
DAO는 메소드의 매개변수로 빈즈 인스턴스객체를 받아서
그변수에 있는 값들을 받아 쓰게하면 된다
package com.koreait;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.print.attribute.PrintJobAttribute;
import javax.servlet.http.HttpSession;
import com.koreait.db.Dbconn;
import com.mysql.cj.x.protobuf.MysqlxPrepare.Prepare.Builder;
public class MemberDAO {
Connection conn;
PreparedStatement pstmt;
ResultSet rs;
String sql = "";
public boolean join(MemberDTO member) {
try {
sql = "insert into tb_member(mem_userid, mem_userpw, mem_username, mem_hp, mem_email, mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2,mem_address3, mem_gender) values(?,sha2(?,256),?,?,?,?,?,?,?,?,?,?,?)";
conn = Dbconn.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,member.getUserid());
pstmt.setString(2,member.getUserpw());
pstmt.setString(3,member.getName());
pstmt.setString(4,member.getHp());
pstmt.setString(5,member.getEmail());
String hobbystr = "";
for(String hobby : member.getHobby()){
hobbystr = hobbystr + hobby + " ";
}
pstmt.setString(6,hobbystr);
pstmt.setString(7,member.getSsn1());
pstmt.setString(8,member.getSsn2());
pstmt.setString(9,member.getZipcode());
pstmt.setString(10,member.getAddress1());
pstmt.setString(11,member.getAddress2());
pstmt.setString(12,member.getAddress3());
pstmt.setString(13,member.getGender());
if(pstmt.executeUpdate() >=1) {
return true;
}
}catch(Exception e) {
e.printStackTrace();
}
return false;
}
'웹 개발 > 🎆 JSP' 카테고리의 다른 글
JSP | 사진첨부파일 업로드,수정,삭제 가능한 게시판 (0) | 2022.12.04 |
---|---|
JSP | JSP영역,EL표현식,JSTL,Maven,fileupload (0) | 2022.11.30 |
JSP | JSP를이용한 홈페이지구현 - 게시판 (0) | 2022.11.27 |
JSP | JSP를이용한 홈페이지구현 - 세션체크, 회원정보수정 (0) | 2022.11.27 |
JSP | JSP를이용한 홈페이지구현 - 로그인,회원가입,로그아웃 (0) | 2022.11.27 |