반응형
[1] 테스트 환경
hardware | |
cpu : intel i7-7700, gpu : intel hd 630, ram : ddr4 16GB, mainboard : samsung DB400S7A-Z51, secondary storage : 256GB SSD, 1TB HDD |
OS |
windows pro 64bits |
software |
jdk version 1.8.0_301 eclipse version 2021-09 (4.21.0) apache-tomcat version 9.0.54 |
[2] 강의 정리
() 싱글톤 객체
Singleton.java
package singleton;
public class Singleton {
private Singleton() {}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
SingletonMain.java
package singleton;
public class SingletonMain {
public static void main(String[] args) {
// Singleton sing1 = new Singleton();
// Singleton sing2 = new Singleton();
Singleton sing1 = Singleton.getInstance();
Singleton sing2 = Singleton.getInstance();
if(sing1 == sing2) {
System.out.println("같은 객체 입니다.");
}else {
System.out.println("다른 객체 입니다.");
}
}
}
() DAO, DTO로 회원가입구현
sql 문
create table circleMember(
name nvarchar2(10),
age nvarchar2(3),
phone nvarchar2(20),
email nvarchar2(20)
);
com.jsp.circle package
CircleMemberDAO.java
package com.jsp.circle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class CircleMemberDAO {
// 싱글톤 : 단 하나의 객체만 생성하는 것
private CircleMemberDAO() {}
private static CircleMemberDAO instance = new CircleMemberDAO();
public static CircleMemberDAO getInstance() {
return instance;
}
// 싱글톤을 쓰는 이유
// 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에
// 메모리낭비를 방지할 수 있다. 또한 싱글톤으로 만들어진 클래스의 인스턴스는
// 전역인스턴스 이기 때문에 다른 클래스의 인스턴스들이 공유하기 쉽니다.
// DBCP(DataBase Connection Pool) 처럼 공통된 객체를
// 여러개 생성해서 사용해야 하는 상황에서 많이 사용한다.
// 데이터를 넣는 메소드
public int insertCircle(CircleMemberDTO dto) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
// 자바에서 데이터베이스 쿼리문을 전송할때 사용할 수 있는
// 인터페이스는 Statement, PreparedStatement 2가지가 있다.
// PreparedStatement 는 Statement 를 상속받은 인터페이스
// 1. Statement의 기능향상 (여러번 수행할때 빠른속도)
// 2. 코드안정성과 가독성이 높다.
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "C##JSPUSER";
String upw = "jsp123";
String query = "insert into circleMember(name, age, phone, email) "
+ "values(?, ?, ?, ?)";
// 변수가 들어갈 자리는 ?로 써준다.
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(query);
pstmt.setString(1, dto.getName());
pstmt.setInt(2, dto.getAge());
pstmt.setString(3, dto.getPhone());
pstmt.setString(4, dto.getEmail());
result = pstmt.executeUpdate();
// 반환결과는 레코드(행)의 수
// 아무 리턴이 없으면 0
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt != null)pstmt.close();
if(conn != null)conn.close();
}catch(Exception e2) {}
}
return result;
}
// 데이터를 얻는 메소드
public ArrayList<CircleMemberDTO> circleList(){
ArrayList<CircleMemberDTO> list = new ArrayList<CircleMemberDTO>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "C##JSPUSER";
String upw = "jsp123";
String query = "select * from circleMember";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();
while(rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
String phone = rs.getString("phone");
String email = rs.getString("email");
list.add(new CircleMemberDTO(name, age, phone, email));
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(rs != null)rs.close();
if(pstmt != null)pstmt.close();
if(conn != null)conn.close();
}catch(Exception e2) {}
}
return list;
}
}
com.jsp.circle package
CircleMemberDTO.java
package com.jsp.circle;
public class CircleMemberDTO {
// 계층간 데이터 교환을 위한 자바빈 클래스
private String name;
private int age;
private String phone;
private String email;
// 기본생성자
public CircleMemberDTO() {}
public CircleMemberDTO(String name, int age, String phone, String email) {
super();
this.name = name;
this.age = age;
this.phone = phone;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
circleJoin.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
form 태그를 사용해서 동아리 회원가입 폼 만들기
(이름, 나이, 핸드폰번호, 이메일)
입력받은 후 joinCheck.jsp로 전송하기
-->
<h2>동아리 회원가입</h2>
<form action="joinCheck.jsp" method="post">
이름 : <input type="text" name="name" size="10"><br>
나이 : <input type="text" name="age" size="10"><br>
핸드폰 : <input type="text" name="phone" size="20"><br>
이메일 : <input type="text" name="email" size="20"><br>
<input type="submit" value="동아리가입">
</form>
</body>
</html>
circleMemberList.jsp
<%@page import="com.jsp.circle.CircleMemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.jsp.circle.CircleMemberDAO"%>
<%@ 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>
<%--
DAO 객체를 생성후 circleList 메소드 호출하여
ArrayList 객체를 얻은 후
list안에있는 DTO 객체들의 데이터(이름, 나이, 전화번호, 이메일)를 출력하기
--%>
<%
CircleMemberDAO dao = CircleMemberDAO.getInstance();
ArrayList<CircleMemberDTO> list = dao.circleList();
out.print("<h1>동아리 회원 목록</h1>");
for(int i = 0; i < list.size(); i++){
CircleMemberDTO dto = list.get(i);
out.print("<p>이름 : " + dto.getName() + ", 나이 : " + dto.getAge()
+ ", 핸드폰 : " + dto.getPhone() + ", 이메일 : " + dto.getEmail() + "</p>");
}
%>
<a href="circleJoin.html">동아리 회원가입하기</a>
</body>
</html>
joinCheck.jsp
<%@page import="com.jsp.circle.CircleMemberDAO"%>
<%@ 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>
<%--
1. 넘어온 데이터(parameter) 받기
2. jsp useBean 액션태그를 사용해서 DTO 객체 생성하기
3. setProperty 액션태그를 사용해서 DTO 객체에 데이터 넣기
4. scriptlet으로 DAO 객체 생성 후
insertCircle 메소드 호출하여 DB에 데이터 넣기
5. 결과값을 얻은 후 회원가입이 정상적으로 완료되었다면
회원가입 축하합니다. 웹브라우저에 출력하기
a태그를 사용해서 회원목록을 보여주는 링크걸기
정상적으로 완료되지 않았다면
회원가입 실패했습니다. 웹브라우저에 출력하기
--%>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String strAge = request.getParameter("age");
int age = Integer.parseInt(strAge);
String phone = request.getParameter("phone");
String email = request.getParameter("email");
%>
<jsp:useBean id="dto" class="com.jsp.circle.CircleMemberDTO" />
<jsp:setProperty property="name" name="dto" value="<%=name %>"/>
<jsp:setProperty property="age" name="dto" value="<%=age %>"/>
<jsp:setProperty property="phone" name="dto" value="<%=phone %>"/>
<jsp:setProperty property="email" name="dto" value="<%=email %>"/>
<%
CircleMemberDAO dao = CircleMemberDAO.getInstance();
int result = dao.insertCircle(dto);
if(result == 1){
%>
<h2>회원가입 축하합니다.</h2>
<a href="circleMemberList.jsp">회원목록 보기</a>
<%
}else{
%>
<h2>회원가입 실패했습니다.</h2>
<a href="circleJoin.html">회원 가입하기</a>
<%
}
%>
</body>
</html>
반응형
'강의 > JSP 강의 정리' 카테고리의 다른 글
JSP 강의 정리 16일차 (0) | 2022.07.27 |
---|---|
JSP 강의 정리 15일차 (0) | 2022.07.26 |
JSP 강의 정리 13일차 (0) | 2022.07.22 |
JSP 강의 정리 12일차 (0) | 2022.07.21 |
JSP 강의 정리 11일차 (0) | 2022.07.20 |