88.5일차 jsp&servlet 간단한 CRUD 완성..ㅠ

쿠우·2022년 8월 4일
0

막힌점4: ListOutput만 만들고 요청없이 값이 똑바로 들어가지 않는다고 계속 왜 안되나 싶었다.
생각해보니까 요청을 한 적이 없었다. 하..


느낀점: 완전 뒤죽박죽 정리안된 코드 그러면서도
하면서 익히는 것이 최고구나 하지만 뒤돌면 다시 까먹어서 지속적인 반복숙달이 필요성을 느낌
짜잘한 부분 오타로 매개변수 부분 이름을 잘못 넣었다던가 그런 부분에서 은근히 에러가 많이나서 주의 해야겠다. 그래도 오류가 나타나면 이를 해결하기 위해 찾아가는 과정에서 전체적인 구조를 익히면서 도움되었다.
어디서 에러가 나는지 몰라서 Exception으로 죄다 잡고 잘못된 부분에서 스택트레이스를 나타나게 했는데 잠깐이나마 문제없이 동작하면서 되었다는 착각을 하게 만들었다. 예외에 대해서 깊게 고민해봐야하는 시간이었다.

회원가입 기능에 아이디 중복 제어랑 수정할 때 이름기준으로 수정해야 좋을 거 같은데 기능이 많이 부족했다. 근데 일단 CRUD를 익히는 정도로만 하는 것이니 Spring과 mybatis를 이용해서 게시판 하나만 더 만들고 나중에 Spring boot와 JPA로 구현할 때 힘줘서 해야겠다.


내가 만든 작고 나약한 모방 창조물

C

R


U

List

D



CODE

Controller

------------Controller-----------

------------Controller interface-------

package com.dev.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Controller {
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException; 
}//end interface

------------FrontController-------

package com.dev.controller;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletConfig;
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 lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;

@NoArgsConstructor

//@WebServlet("*.do")
public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	String charset = null; 
	HashMap<String, Controller> list = null;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		charset = config.getInitParameter("charset");
		list = new HashMap<String, Controller>();
		list.put("/memberInsert.do",new MemberInsertController());
		list.put("/memberSearch.do",new MemberSearchController());
		list.put("/memberDelete.do",new MemberDeleteController());
		list.put("/memberUpdate.do",new MemberUpdateController());
		list.put("/memberList.do",new MemberListController());
	}// init
	
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf8");
		String url = request.getRequestURI();
		String contextPath = request.getContextPath();
		String path = url.substring(contextPath.length());
		Controller subController = list.get(path);
		subController.execute(request,response);
	}//service

}//end class

------------forward 하기위해-------

package com.dev.controller;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HttpUtil {
	public static void forward(HttpServletRequest req,HttpServletResponse res,String path) {
		try {
			RequestDispatcher dispatcher = req.getRequestDispatcher(path);
			dispatcher.forward(req, res);
		} catch (Exception e) {
			System.out.println("화면을 이동하다 "+ e + " 오류가 발생하였습니다.");
		} //try - catch
	}// forward
	
}// end class

------------Controller-------

package com.dev.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dev.service.MemberService;

public class MemberDeleteController implements Controller {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		String id = req.getParameter("id");
		MemberService service = MemberService.getInstance();
		service.memberDelete(id);
		
		HttpUtil.forward(req, res, "/memberDeleteOutput.jsp");
		
	}// execute

}// end class

package com.dev.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dev.service.MemberService;
import com.dev.vo.MemberVO;

public class MemberInsertController implements Controller {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		String id = req.getParameter("id");
		String passwd = req.getParameter("passwd");
		String mail = req.getParameter("mail");
		String name = req.getParameter("name");
		
		if(id.isEmpty()|| passwd.isEmpty()||name.isEmpty()||mail.isEmpty()) {
			req.setAttribute("error", "모든 항목을 빠짐없이 입력해주시기 바랍니다.");
			HttpUtil.forward(req, res, "/memberInsert.jsp");
			return;
		}
		
		
		MemberVO member =new MemberVO(id, passwd, name, mail);
		
		MemberService service =MemberService.getInstance();
		service.memberInsert(member);
		
		req.setAttribute("id", id);
		HttpUtil.forward(req, res, "/memberInsertOutput.jsp");
		
	
	}// execute

}// end class

package com.dev.controller;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dev.service.MemberService;
import com.dev.vo.MemberVO;

public class MemberListController implements Controller {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		
		
		MemberService service = MemberService.getInstance();
		ArrayList<MemberVO> list = service.memberList();

		


		req.setAttribute("list", list);
		HttpUtil.forward(req, res, "/memberListOutput.jsp");
	}// execute

}// end class

package com.dev.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dev.service.MemberService;
import com.dev.vo.MemberVO;

public class MemberSearchController implements Controller {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		String id = req.getParameter("id");
		String job = req.getParameter("job");
		String path = null;
		
		if(job.equals("search")) {
			path ="/memberSearch.jsp";
		} else if (job.equals("update")) {
			path ="/memberUpdate.jsp";
		} else if (job.equals("delete")) {
			path ="/memberDelete.jsp";
		} // else if 
		
		
		if(id.isEmpty()) {
			req.setAttribute("error", "ID를 다시 입력해주십시요");
			HttpUtil.forward(req, res, path);
			return;
		}//if 
		
		MemberService service = MemberService.getInstance();
		MemberVO member = service.memberSearch(id);
		
		if(member == null) {req.setAttribute("result", "검색된 정보가 없습니다.");}
		else {
		req.setAttribute("member", member);
		} //if else
		
		if(job.equals("search")) {path = "/memberSearchOutput.jsp";}
		HttpUtil.forward(req, res, path);
	}// execute
} // end class

package com.dev.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dev.service.MemberService;
import com.dev.vo.MemberVO;

public class MemberUpdateController implements Controller {

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		String id = req.getParameter("id");
		String passwd = req.getParameter("passwd");
		String name  = req.getParameter("name");
		String mail =req.getParameter("mail");
		
		if(id.isEmpty() || passwd.isEmpty() || name.isEmpty()|| mail.isEmpty()) {
			req.setAttribute("error", "모든 항목을 빠짐없이 입력해주시기를 바랍니다!");
			HttpUtil.forward(req, res, "/memberUpdate.jsp");
			return;
		}

		MemberVO member =new MemberVO(id,passwd,name,mail);
		// Service 객체의 메소드 호출
		MemberService service = MemberService.getInstance();
		service.memberUpdate(member);
		//Output View 페이지로 이동
		req.setAttribute("id", id);
		HttpUtil.forward(req, res, "/memberUpdateOutput.jsp");
	}// execute

}// end class

------------Service-----------

package com.dev.service;

import java.sql.SQLException;
import java.util.ArrayList;

import com.dev.dao.MemberDAO;
import com.dev.vo.MemberVO;

public class MemberService {
	
	private static MemberService service = new MemberService();
	public MemberDAO dao = new MemberDAO();
	
	private MemberService() {}
	public static MemberService getInstance() {
		return service;
	}// getInstance
	
	public void memberInsert(MemberVO member) {
		try {
			dao.memberInsert(member);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}// memberInsert
	
	public void memberDelete(String id) {
		try {
			dao.memberDelete(id);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}// memberDelete
	
	public ArrayList<MemberVO> memberList() {
		ArrayList<MemberVO> list = null;
		try {
			list= dao.memberList();
			System.out.println("service"+list);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}// memberList
	
	public MemberVO memberSearch(String id) {
		MemberVO member = null;
		try {
			for(MemberVO MV: dao.memberList()) {
				if(MV.getId().equals(id)) {member = MV;}
			}//for 
		} catch (Exception e) {
			e.printStackTrace();
		}// for
		return member;
	}// memberSearch
	
	public void memberUpdate(MemberVO member) {
		try {
			dao.memberUpdate(member);
		} catch (Exception e) {
			e.printStackTrace();
		}// try-catch
	}// memberUpdate
	
}// end class

Model

------------DAO-----------


package com.dev.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import com.dev.vo.MemberVO;

import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;


@NoArgsConstructor
public class MemberDAO {

	private static  DataSource dataSource;	
	
	static {
		try {
			Context ctx =new InitialContext();
			dataSource =(DataSource)ctx.lookup("java:comp/env/jdbc/OracleCloudATP");
		} catch (Exception e) {
			e.printStackTrace();
		}//try-catch
	}// static initializer
	
	public void memberInsert(MemberVO member) throws SQLException{
	
		Connection conn = MemberDAO.dataSource.getConnection();
		
		String sql = "INSERT INTO member values(?,?,?,?)";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, member.getId());
		pstmt.setString(2, member.getPasswd());
		pstmt.setString(3, member.getName());
		pstmt.setString(4, member.getMail());
		
		try(conn;pstmt;){
			pstmt.executeUpdate(); 
		}// try-with-resources 
		
	}// insert
	
	
	public void memberDelete(String id) throws SQLException{
		
		Connection conn = MemberDAO.dataSource.getConnection();
		
		String sql = "DELETE FROM member WHERE ID = ? ";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, id);
		
		try(conn;pstmt;){
			pstmt.executeUpdate(); 
		}// try-with-resources 	
	}// delete
	
	
	public void memberUpdate(MemberVO member) throws SQLException{
		
		Connection conn = MemberDAO.dataSource.getConnection();
		
		String sql = "UPDATE member SET  name=? , password=? , mail=?  WHERE id=?";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, member.getName());
		pstmt.setString(2, member.getPasswd());
		pstmt.setString(3, member.getMail());
		pstmt.setString(4, member.getId());
		
		try(conn;pstmt;){
			pstmt.executeUpdate(); 
		}// try-with-resources 	
	}// update

	public ArrayList<MemberVO> memberList() throws SQLException{
		Connection conn = MemberDAO.dataSource.getConnection();
		String sql = "SELECT * FROM member"; 
		PreparedStatement pstmt = conn.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		
		ArrayList<MemberVO> list = new ArrayList<MemberVO>();
		
		try(conn;pstmt;rs;){
			while (rs.next()) {
				MemberVO member = new MemberVO(rs.getString("id"), rs.getString("password"),rs.getString("mail"), rs.getString("name"));
				list.add(member);
			}// while
		}//try-with-resources
		return list;
	}// List
	
	
}//end class

-----------VO---------

package com.dev.vo;

import lombok.Value;

@Value
public class MemberVO {
	private String id;
	private String passwd;
	private String name;
	private String mail;
}// end class


----------view------------

<%@ 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>
	<a href="/memberInsert.jsp">회원정보 생성</a>
	<a href="/memberDelete.jsp">회원정보 삭제</a>
	<a href="/memberSearch.jsp">회원정보 찾기</a>
	<a href="/memberUpdate.jsp">회원정보 수정</a>
	<a href="memberList.do" > 회원정보 모두 보기</a>
	</form>
</body>
</html>
<%@ 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>
	<a href="/first.jsp">첫 화면으로 이동</a>
</body>
</html>

생성 부분

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"

isELIgnored="false" %>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 생성</title>
</head>
<body>
	<h3>회원가입</h3>

	${error}

	<form action="memberInsert.do" method="post">
	
	ID : <input type="text" name = "id"> <br>
	비밀번호: <input type="password" name = "passwd"> <br>
	이름:  <input type="text" name = "name"> <br>
	E-mail:  <input type="text" name = "mail"> <br>
	
	<input type ="submit" value="가입">
	
	</form>
</body>
</html>
<%@ 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>
	<h3>${id} 님 가입이 완료되었습니다!</h3>
	<%@ include file = "/home.jsp" %>
</body>
</html>

삭제 부분

<%@ page import = "com.dev.vo.MemberVO" %>
<%@ 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>
	
	${error}
	
	<form action="memberSearch.do" method="post">
	ID: <input type = "text" name = "id">
	<input type ="hidden" name="job" value="delete">
	<input type = "submit" value= "검색">	
	</form>
	
	<% MemberVO member =(MemberVO)request.getAttribute("member");
		if(member != null){	
	%>
		<h3>검색 정보 결과</h3>
		 id : ${member.id} / 비밀번호 : ${member.passwd} / 이름 :  ${member.name} / 메일: ${member.mail} <p>
		
		<form action ="memberDelete.do" method = "post">
			<input type="hidden" name = "id" value = "${member.id}"/>
			<input type="submit" value="삭제"/>		
		</form>
	<%} else {%>
		${result} <p>
	<% } %>
	
</body>
</html>
<%@ 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>
	<h3>회원 정보가 삭제되었습니다.</h3>
	<%@ include file="home.jsp" %>
</body>
</html>

찾기 부분

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>조회</title>
</head>
<body>
	<h3>회원정보검색</h3>
	
	${error}
	
	<form action="memberSearch.do" method="post">
	ID: <input type = "text" name = "id">
	<input type ="hidden" name="job" value="search">
	<input type = "submit" value= "검색">	
	</form>
	
</body>
</html>
<%@ 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>
	<%
		String result = (String)request.getAttribute("result");
		if(result!=null){
			out.print(result+"<p>");
		}else{
	
	%>
		<h3>
			 id : ${member.id} / 비밀번호 : ${member.passwd} / 이름 :  ${member.name} / 메일: ${member.mail}
		</h3>
	
	<%
	} //이 부분 JSTL로 바꿀 수 있으면 바꿔보자 
	%>
	
	<%@ include file ="/home.jsp" %>
</body>
</html>

수정 부분

<%@ page import="com.dev.vo.MemberVO" %>
<%@ 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>
	${error}
	<form action="memberSearch.do" method="post">
	ID: <input type = "text" name = "id"/>
	<input type ="hidden" name="job" value="update"/>
	<input type = "submit" value= "검색"/>	
	</form>
	
	<% MemberVO member = (MemberVO)request.getAttribute("member");
		if(member != null) { %>
		
		<h3> 회원정보 수정 </h3>>
		<form action = "memberUpdate.do" method = "post">
		ID: <input type = "type" name = "id" readonly value="${member.id}" > <br>
		비밀번호: <input type= "password" name = "passwd" value ="${member.passwd}"> <br>
		이름: <input type = "text" name = "name" value="${member.name}">
		E-mail: <input type = "text" name = "mail" value ="${member.mail}"> <br>
		<input type = "submit"  value ="수정">
		</form> 
		
	<% } else {%>
	
	${result} <p>
	
	<%}%>	

</body>
</html>
<%@ 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>
	<h3>${id}님 정보 수정이 완료 되었습니다. </h3>
	<%@ include file ="home.jsp" %>
</body>	
</html>

모든 목록

<%@page import="java.util.ArrayList"%>
<%@page import="com.dev.vo.MemberVO"%>
<%@ 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>
	<% 	
		ArrayList<MemberVO> list = (ArrayList<MemberVO>)request.getAttribute("list");
		if(!list.isEmpty()){
	%>
		<table>
			<tr>
				<th>ID</th>
				<th>비밀번호</th>
				<th>이름</th>
				<th>이메일</th>			
			</tr>
			
	<%for(MemberVO member : list){ %>		
			
			<tr>
				<th><%=member.getId()%></th>
				<th><%=member.getPasswd()%></th>
				<th><%=member.getName()%></th>
				<th><%=member.getMail()%></th>
			</tr>
			
	<% } //for %>		
			
		</table>
		
	<% 
	} else { 
	%>		
	
	<h3>등록된 정보가 없습니다.</h3>
	
	<%} // if-else%>
	
	<%@ include file = "home.jsp" %>

</body>
</html>

많이 부족하다..

profile
일단 흐자

0개의 댓글