JSP를 사용해 회원 정보 저장/출력/수정/삭제(CRUD) 기능 구현하기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원 관리 프로그램</title>
</head>
<body>
<%
try {
String name = request.getParameter("name");
if(!(name.equals(""))) {
%>
<p>안녕하세요, <%= name %>님!</p>
<%
}
}
catch(Exception e) {}
%>
<h1>회원 관리 프로그램</h1>
<p>
<a href="input.jsp">회원가입</a>
</p>
<p>
<a href="printer.jsp">회원출력</a>
</p>
<p>
<a href="search.jsp">회원검색</a>
</p>
<p>
<a href="update.jsp">회원정보 수정</a>
</p>
<p>
<a href="delete.jsp">회원삭제</a>
</p>
</body>
</html>
파일명 : input.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원가입</title>
</head>
<body>
<h1>회원가입 (Create)</h1>
<form action="process.jsp" >
이름 : <input type="text" name="name" required><br>
나이 : <input type="text" name="age" required><br>
<input type="submit" value="확인">
<!-- submit 하면 input에 입력된 값을 파라미터로 action에 연결된 페이지에 전달 -->
</form>
</body>
</html>
form
태그의 action
속성에 실행할 페이지 process.jsp
를 연결한다.
제출 시 input
에 입력된 값은 name
속성값을 변수명으로 가진 파라미터가 되어 연결된 페이지로 전달된다.
package dto;
public class Member {
// DTO : 데이터 전달, 보관을 위한 객체 (=도메인 객체)
// 변수, 생성자, getter/setter 메서드 필요
private String name;
private String age;
public Member() {
}
public Member(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
package dao;
import java.util.ArrayList;
import dto.Member;
public class Database {
// DAO : 도메인 객체를 저장하는 배열 객체
// Member 타입 객체만 저장하는 ArrayList 생성
public static ArrayList<Member> arr = new ArrayList<Member>();
// list는 하나만 필요하고
// 다른 패키지에서 접근 가능해야 하므로 public static 처리
}
파일명 : process.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dto.Member" %>
<%@ page import="dao.Database" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원가입</title>
</head>
<body>
<%
// form 에서 입력된 값을 전달받음 (request 참조변수로 접근)
String name = request.getParameter("name");
String age = request.getParameter("age");
// 데이터를 적절하게 받아와서 변수에 저장했는지 검증하기
if(name.equals("") || age.equals("")) {
out.println("데이터 전달 오류");
}
else {
// 전달받은 데이터를 객체에 저장
Member mb = new Member();
mb.setName(name);
mb.setAge(age);
// 객체 리스트에 생성한 객체를 추가
Database.arr.add(mb);
// 추가하고 나면 특정 페이지로 돌아가기
response.sendRedirect("main.jsp?name="+name);
}
%>
</body>
</html>
파일명 : printer.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dto.Member" %>
<%@ page import="dao.Database" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 출력</title>
</head>
<body>
<h1>회원정보 출력 (Read)</h1>
<%
// 회원 정보 객체가 저장된 Database.arr의 주소를 변수 tmp에 저장
ArrayList<Member> tmp = Database.arr;
// get(idx) : ArrayList의 각 요소 반환해 해당 요소 데이터 가져오기
for(int i=0; i<tmp.size(); i++) {
Member mb = tmp.get(i);
String name = mb.getName();
String age = mb.getAge();
%>
<!-- 자바 코드 중간에 html이 들어가야 하면
스크립트 태그를 닫고 html 작성 후 다시 이어서 작성 -->
<h3>회원정보</h3>
<p>이름 : <%= name %></p>
<p>나이 : <%= age %></p>
<%}%>
<a href="main.jsp">메인으로</a>
</body>
</html>
파일명 : search.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 검색</title>
</head>
<body>
<h1>회원정보 검색 (Search)</h1>
<form action="search_process.jsp">
<p>찾을 이름을 입력하세요 : <input type="text" name="name"></p>
<input type="submit" value="확인">
</form>
</body>
</html>
파일명 : search_process.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dto.Member" %>
<%@ page import="dao.Database" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 검색</title>
</head>
<body>
<%
String name = request.getParameter("name");
String search;
String age;
// ArrayList 가져와 tmp에 담기
ArrayList<Member> tmp = Database.arr;
for(int i=0; i<tmp.size(); i++) {
Member mb = tmp.get(i);
// 요소의 이름을 search 변수에 대입
search = mb.getName();
// 입력받은 이름과 일치하는 이름을 가진 요소가 있는지 찾기
if(search.equals(name)) {
age = mb.getAge();
%>
<!-- 요소가 있으면 이름, 나이 정보 출력 -->
<p>이름 : <%= search %></p>
<p>나이 : <%= age %></p>
<%
}
}
%>
<a href="main.jsp">메인으로</a>
</body>
</html>
파일명 : update.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 수정</title>
</head>
<body>
<h1>회원정보 수정 (Update)</h1>
<form action="update_process.jsp">
<p>찾을 이름을 입력하세요 : <input type="text" name="name"></p>
<input type="submit" value="확인">
</form>
</body>
</html>
파일명 : update_process.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dto.Member" %>
<%@ page import="dao.Database" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 수정</title>
</head>
<body>
<%
String name = request.getParameter("name");
String search;
String age;
// ArrayList 가져와 tmp에 담기
ArrayList<Member> tmp = Database.arr;
for(int i=0; i<tmp.size(); i++) {
Member mb = tmp.get(i);
// 요소의 이름을 search 변수에 대입
search = mb.getName();
// 입력받은 이름과 일치하는 이름을 가진 요소가 있는지 찾기
if(search.equals(name)) {
age = mb.getAge();
%>
<!-- 요소가 있으면 이름, 나이 정보 출력하고 수정할 수 있게 함(이름만) -->
<form action="update_set.jsp">
<p>이름 : <input type="text" value="<%= search %>" name="name" readonly></p>
<p>나이 : <input type="text" value="<%= age %>" name="age"></p>
<input type="submit" value="수정">
</form>
<%
}
}
%>
</body>
</html>
파일명 : update_set.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dto.Member" %>
<%@ page import="dao.Database" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 수정</title>
</head>
<body>
<%
String name = request.getParameter("name");
String age = request.getParameter("age");
String search;
// ArrayList 가져와 tmp에 담기
ArrayList<Member> tmp = Database.arr;
for(int i=0; i<tmp.size(); i++) {
Member mb = tmp.get(i);
// 요소의 이름을 search 변수에 대입
search = mb.getName();
// 입력받은 이름과 일치하는 이름을 가진 요소가 있는지 찾아
// 나이를 바꾸고 tmp의 해당 요소 교체
if(search.equals(name)) {
mb.setAge(age);
tmp.set(i,mb);
}
}
response.sendRedirect("main.jsp");
%>
</body>
</html>
파일명 : delete.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>회원정보 삭제 (Delete)</h1>
<form action="delete_process.jsp">
<p>삭제할 이름을 입력하세요 : <input type="text" name="name"></p>
<input type="submit" value="확인">
</form>
</body>
</html>
파일명 : delete_process.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dto.Member" %>
<%@ page import="dao.Database" %>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String name = request.getParameter("name");
String search;
// ArrayList 가져와 tmp에 담기
ArrayList<Member> tmp = Database.arr;
for(int i=0; i<tmp.size(); i++) {
Member mb = tmp.get(i);
search = mb.getName();
// 입력받은 이름과 일치하는 이름을 가진 요소가 있는지 찾고 해당 요소 삭제
if(search.equals(name)) {
tmp.remove(i);
%>
<p>삭제되었습니다.</p>
<%
// 삭제 후 바로 다음 요소를 검증하기 위해 한번 더 같은 인덱스로 만들기
// ex) tmp 0번 요소가 삭제되면 뒤의 인덱스가 하나씩 줄어서
// 다음 반복 때 2번 요소부터 검증하게 됨
i--;
}
}
%>
<a href="main.jsp">메인으로</a>
</body>
</html>