total_signin.jsp
<%@ 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 error = request.getParameter("error");
%>
<c:set value="<%=error %>" var="err"/>
<form action="./total_signin_process.jsp" method="post">
<p>아이디 : <input type="text" name="mem_id"/></p>
<p>비밀번호 : <input type="text" name="mem_pw"/></p>
<c:if test="${err == '1' }">
<p style="font-size:10px; color:red;">** 존재하지 않는 회원입니다.</p>
</c:if>
<p><input type="submit" value="로그인"/></p>
<br/>
<a href="./total_signup.jsp">회원가입</a>
</form>
</body>
</html>
total_signin_process.jsp
<%@page import="java.util.List"%>
<%@page import="dto.MemberVO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="dao.MemberDAO"%>
<%@ 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>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("mem_id");
String pw = request.getParameter("mem_pw");
MemberDAO memberDao = MemberDAO.getInstance();
List<MemberVO> memberList = memberDao.getMemberList();
String goPage = "";
if(memberList.size() > 0){
for(MemberVO memberVO : memberList){
if(id.equals(memberVO.getMem_id()) && pw.equals(memberVO.getMem_pw())){
goPage = "./total_memberList.jsp?id=" + id;
break;
}else{
goPage = "./total_signin.jsp?error=1";
}
}
}else{
goPage = "./total.signin.jsp?error=1";
}
response.sendRedirect(goPage);
%>
</body>
</html>
src-dto MemberVO.java
package dto;
public class MemberVO{
private String mem_id;
private String mem_pw;
private String mem_name;
private String mem_sex;
private String filename;
public String getMem_id() {
return mem_id;
}
public void setMem_id(String mem_id) {
this.mem_id = mem_id;
}
public String getMem_pw() {
return mem_pw;
}
public void setMem_pw(String mem_pw) {
this.mem_pw = mem_pw;
}
public String getMem_name() {
return mem_name;
}
public void setMem_name(String mem_name) {
this.mem_name = mem_name;
}
public String getMem_sex() {
return mem_sex;
}
public void setMem_sex(String mem_sex) {
this.mem_sex = mem_sex;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
src-dao-MemberDAO.java
package dao;
import java.util.ArrayList;
import dto.MemberVO;
public class MemberDAO{
private ArrayList<MemberVO> memberList = new ArrayList<MemberVO>();
private static MemberDAO instance = new MemberDAO();
public static MemberDAO getInstance() {
return instance;
}
public ArrayList<MemberVO> getMemberList() {
return memberList;
}
public void insertMember(MemberVO member) {
memberList.add(member);
}
}
total_signup.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>회원가입</h3>
<form name="fileForm" action="./total_signup_process.jsp" method="post" enctype="multipart/form-data">
<p>아이디 : <input type="text" name="mem_id"/></p>
<p>비밀번호 : <input type="text" name="mem_pw"/></p>
<p>이름 : <input type="text" name="mem_name"/></p>
<p>
성별 : <input type="radio" name="mem_sex" value="남자"/> 남자 <input type="radio" name="mem_sex" value="여자"/> 여자
</p>
<p>프로필 이미지</p>
<p><input type="file" name="filename" multiple="multiple"/></p>
<p><input type="submit" value="가입하기"/></p>
</form>
</body>
</html>
total_signup_process.jsp
<%@page import="java.awt.ItemSelectable"%>
<%@page import="dao.MemberDAO"%>
<%@page import="dto.MemberVO"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 진짜 파일이 담기는 경로를 설정
String path = request.getServletContext().getRealPath("/resources/images");
// 파일 담을 객체 생성
File tempFile = new File(path);
// 만약 tempFile이 없으면 그거 파일 폴더 만들어라
if(!tempFile.exists()){
tempFile.mkdirs();
}
// 파일 업로드를 위해 패키지에 포함되어 있는 DiskFileUpload 객체를 생성함
DiskFileUpload upload = new DiskFileUpload();
// 업로드할 파일의
upload.setSizeMax(3000000); // 파일의 최대 크기설정
upload.setSizeThreshold(1024); // 메모리상에 저장할 최대 크기 (byte) - 버퍼 영역
upload.setRepositoryPath(path); // 업로드된 파일을 임시로 저장할 경로() 위에서 파일담기는 경로를 path로 지정함
// 생성된 객체를 통해 DiskFileUpload 클래스가 제공하는 메소드를 사용하여 웹 브라우저가 전송한
// multipart-form 유형의 요청 파라미터를 가져옴
// 폼 페이지 에서 전송된 요청 파라미터를 전달받도록 DiskFileUpload 객체 타입의 parseRequest() 메소드를 작성
List items = upload.parseRequest(request); // 요청했던 파일을 받아서 List에 담아둠! items라는 이름으로
// 폼 페이지에서 전송된 요청 파라미터를 Iterator 클래스로 변환
// Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것
Iterator params = items.iterator(); // List에 담긴 애들 하나씩 읽어서 오려고 필요해!
// 출력을 위한 Map 공간
Map<String, Object> dataMap = new HashMap<String,Object>(); // 담아서 넘겨줄 객체가 필요하니까
// 파일 업로드 max 사이즈 설정
int maxSize = 4 * 1024 * 1024; // 4MB
while(params.hasNext()){ //hasNext() : 읽어올 요소가 남아있는지 확인하는 메서드, 요소가 있으면 true - 없으면 false
FileItem item = (FileItem) params.next(); // next() : 다음 데이터를 반환 - 아마 FileItem의 item을 가져오는 듯함
// isFormField()폼필드인지 아닌지 여부 반환 / 폼필드이면 true 반환
if(item.isFormField()){ // 폼 페이지에서 전송된 요청 파라미터가 일반 데이터이면..
String name = item.getFieldName(); // 파라미터의 이름 / getFiledName() : 필드 이름을 반환/input 태그의 name 속성의 값을 반환
String value = item.getString("UTF-8"); // 파라미터의 값
// 위에서 출력을 위해 만든 Map에 폼에서 받아온 일반데이터를 저장한다 (파일 이외의 것)
dataMap.put(name,value);
} else{ // 폼 페이지에서 전송된 요청 파라미터가 파일이면..
String fileFieldName = item.getFieldName(); // 요청 파라미터의 이름
String fileName = item.getName(); // 저장 파일의 이름 / getName() : 클라이언트에 저장되어 있던 파일의 이름을 반환/ 반환된 이름은 경로와 파일명이 모두 있는 파일명
if(!fileName.equals("")){ // 만약에 저장 파일의 이름이 ""와 같지 않다면! / 파일이 실제로 올라왔다는 의미
String contentType = item.getContentType(); // 파일 콘텐츠 유형 / getContentType() : 콘텐츠 타입을 반환
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); // 진짜 파일 이름을 알아내기 위해! 파일 경로를 잘라내는!
long fileSize = item.getSize(); // 파일 크기 정보
File file = new File(path + "/" + fileName);
item.write(file);
dataMap.put(fileFieldName, fileName); //key, value
}
}
}
// MemberDAO 에서 만든 인스턴스 객체 싱글톤 호출함
MemberDAO memberDao = MemberDAO.getInstance();
// 출력용 Map에 담은 dataMap 담아줘야지 객체 만들어서~ 통채로 보내줄꺼야
MemberVO memberVO = new MemberVO();
// memberVO의 setMem_id 할껀데 dataMap 안에 get가져와 "mem_id" 키값을 근데 그 거 object니까 toString()
memberVO.setMem_id(dataMap.get("mem_id").toString());
memberVO.setMem_pw(dataMap.get("mem_pw").toString());
memberVO.setMem_name(dataMap.get("mem_name").toString());
memberVO.setMem_sex(dataMap.get("mem_sex").toString());
memberVO.setFilename(dataMap.get("filename").toString());
// 위에서 담은 memberVO 파라미터값 가지고 넘어가라 insertMember() 실행 고고
memberDao.insertMember(memberVO);
// 회원가입하고 다시 원래화면으로 돌아가세요..? 뭐 할게없음... 내일 아님... 넘어가세요?/ 페이지간의 파라미터 넘기거나 공유하는게 없으니까?
// sendRedirect 는 단순 이동시 주로 사용되는 방식이며, sendRedirect 는 반드시 doGet메소드로 이동
// forward 데이터를 가지고 이동하기 위해 사용되는 방식, Forward 방식은 client의 요청대로 메소드를 수행
response.sendRedirect("./total_signin.jsp");
%>
</body>
</html>
total_memberList.jsp
<%@page import="dto.MemberVO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// id값을 가지고 갔겠지
String id = request.getParameter("id");
MemberDAO memberDao = MemberDAO.getInstance();
ArrayList<MemberVO> memberList = memberDao.getMemberList();
if(id != null){
%>
<c:set value="<%=id %>" var="mem_id"/>
<%
}
%>
<c:set value="<%=memberList %>" var="list"/>
<h3>회원목록</h3>
<hr/>
<br/>
<a href="./total_signup.jsp">회원등록</a>
<br/><br/>
<table border="1">
<tr>
<th>이미지</th>
<th>회원정보</th>
<th>버튼</th>
</tr>
<c:choose>
<c:when test="${empty list }">
<tr>
<td colspan="3">조회하실 회원정보가 존재하지 않습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach items="${list }" var="member" varStatus="stat">
<tr>
<td width="120px">
<img src="/JSPBook/resources/images/${member.filename }" style="width:116px;" alt="아이디님의 사진"/>
</td>
<td>
<p>아 이 디 : ${member.mem_id }</p>
<p>비밀번호 : ${member.mem_pw }</p>
<p>이 름 : ${member.mem_name }</p>
<p>성 별 : ${member.mem_sex }</p>
</td>
<td>
<a href="">상세정보</a>
</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
<script type="text/javascript">
var idd = "${mem_id}";
console.log(idd);
if(idd != null || idd != ""){
alert(idd + "님! 환영합니다!");
}
</script>
</body>
</html>