<회원가입>
- View(jsp 페이지)
registercateg.jsp : 튜티, 튜터, 기업을 분류로 회원가입이 나뉜다.
idCheckForm.jsp : id 중복 체크를 위한 폼
registerTutee.jsp : 튜티 회원가입 폼
registerTutor.jsp : 튜터 회원가입 폼
registerCompany.jsp : 기업 회원가입 폼
- Model
MemberVO : 멤버 데이터를 담기위해 사용되는 자바빈즈
MemberDAO : SQL문을 실행할 수 있는 객체(insert, select delete, update를 실행할 수 있다.)
JobSelectVO : 직종 데이터를 담기위해 사용되는 자바빈즈
JobSelectDAO : 직종 관련하여 SQL문을 실행할 수 있는 객체
MiddleCategVO
- Controller(서블릿)
TuteeLookJobCateg : 튜티 관심 직종 로직
TutorLookJobCateg : 튜터 종사 직종 로직
registerTuteeAction : 회원가입 처리 로직
registerTutorAction : 회원가입 처리 로직
registerCompanyAction : 회원가입 처리 로직
- 회원가입 분류

- 튜티 회원가입 폼

- 튜터 회원가입 폼

- 기업 회원가입 폼

- 아이디 중복체크

** 회원가입
- 비밀번호: 문자, 특수문자, 숫자 포함 8자 이상
- 이메일 뒷 주소 입력시 select박스와 직접 입력 두가지 존재
- 전화번호 입력시 한 필드에 최대 4자씩 입력할 수 있도록 지정
- 아이디 중복 체크 안할 시 회원가입 불가
- 아이디 중복 체크 후 다시 아이디 필드를 클릭시 아이디를 바꿨다 간주하고 다시 아이디 중복 체크를 해달라는 경고창 띄우기
코드
1. 회원분류
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="card mb-4 shadow-sm" onclick="location.href='starters?cmd=registerTutee'">
<div class="card-body">
<div>
<div class="registerbox">
<p class="card-text">튜티 회원가입</p>
<button type="button" class="btn col-4 col-md-4 btn-sm btn-outline-secondary"
onclick = "tuteeRegister()">바로가기</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card mb-4 shadow-sm" onclick="location.href='starters?cmd=registerTutor'">
<div class="card-body">
<div>
<div class="registerbox">
<p class="card-text">튜터 회원가입</p>
<button type="button" class="btn col-4 col-md-4 btn-sm btn-outline-secondary"
onclick = "tutorRegister()">바로가기</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card mb-4 shadow-sm" onclick="location.href='starters?cmd=registerCompany'">
<div class="card-body">
<div>
<div class="registerbox">
<p class="card-text">기업 회원가입</p>
<button type="button" class="btn col-4 col-md-4 btn-sm btn-outline-secondary"
onclick = "companyRegister()">바로가기</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var tuteeRegister = function(){
location.href = "starters?cmd=registerTutee";
};
var tutorRegister = function(){
location.href = "starters?cmd=registerTutor";
};
var companyRegister = function(){
location.href = "starters?cmd=registerCompany";
};
</script>
2. 튜티 회원가입 폼
<div class="container">
<form method="post" class="form-horizontal selfinfo" name="registerForm"
action="starters?cmd=registerTuteeAction">
<h3>회원가입 - 튜티</h3>
<div class="selfinfo1">
<input type="hidden">
<!-- 이름 -->
<div class="row">
<label for="name" class="col-mb-2 col-lg-2 col-sm-2 col-12">이름</label>
<div class="input-group col-sm-4 col-mb-4 col-lg-4 col-12 mb-3">
<input type="text" class="form-control form-control-sm"
name="name" id ="name" placeholder="홍길동" required="required">
</div>
</div>
<!-- 아이디 -->
<div class="row">
<label for="id" class="col-mb-2 col-lg-2 col-sm-2 col-12">아이디</label>
<div class="input-group col-sm-4 col-mb-4 col-lg-4 col-12 mb-3">
<input type="text"
id="id" placeholder="hongildong" class="form-control form-control-sm tuteeId" name="memberId"
required="required" onkeydown = "inputIdChk()">
<div class="input-group-append">
<button class="btn btn-sm btn-secondary idCheck" onclick = "openIdChk()">아이디 중복 확인</button>
</div>
<div class="checkId" name="checkId"></div>
<input type = "hidden" name = "idDuplication" value = "idUncheck">
</div>
</div>
<!-- 비밀번호 -->
<div class="row">
<label for="passwd" class="col-mb-2 col-lg-2 col-sm-2 col-12">비밀번호</label>
<div class="input-group col-sm-4 col-mb-4 col-lg-4 col-12 mb-3">
<input class="form-control form-control-sm"
type="password" name="passwd" id="passwd" placeholder="문자, 숫자, 특수문자 포함 8자리 이상"
required="required">
</div>
</div>
<!-- 비밀번호 재확인 -->
<div class="row">
<label for="passwd_check" class="col-mb-2 col-lg-2 col-sm-2 col-12">비밀번호확인</label>
<div class="input-group col-sm-4 col-mb-4 col-lg-4 col-12 mb-3">
<input class="form-control form-control-sm"
type="password" name="passwd_check" id="passwd_check"
placeholder="********" required="required">
<div class="correctPw"></div>
</div>
</div>
<!-- 생년월일 -->
<div class="row">
<label for="inputEmail3" class="col-mb-2 col-lg-2 col-sm-2 col-12 control-label">생년월일</label>
<div class="input-group col-sm-4 col-mb-4 col-lg-4 col-12 mb-3">
<input class="form-control form-control-sm"
type="date" max="2018-11-30" class="birthdate"
name="birthdate" id = "birthdate" required="required">
</div>
</div>
<!-- 성별 -->
<div class="row">
<label for="gender" class="col-mb-2 col-lg-2 col-sm-2 col-12">성별</label>
<div class="input-group col-sm-4 col-mb-4 col-lg-4 col-12 mb-3">
<label class="maleGender" for="optionRadios1">
<input type="radio" id="optionsRadios1"
value="M" name="gender" checked required="required">남자</label>
<label class="femaleGender" for="optionRadios2">
<input type="radio" id="optionsRadios2"
value="F" name="gender" required="required">여자</label>
</div>
</div>
<!-- 4. 이메일 -->
<div class="row">
<label for="email" class="col-mb-2 col-lg-2 col-sm-2 col-12">이메일</label>
<div class="input-group col-sm-5 col-mb-5 col-lg-5 col-12 mb-3">
<input type="text" class="form-control form-control-sm"
id="email" placeholder="hongildong" name="email"
required="required">
@
<input type="text" name="emailBox1"
id="emailBox1" class="emailBox form-control form-control-sm"
required="required">
<select id = "emailBoxSelect" name="emailBoxSelect" class="form-control form-control-sm">
<option value="">---</option>
<option value="1">직접입력</option>
<option value="@naver.com">naver.com</option>
<option value="@hanmail.net">hanmail.net</option>
<option value="@gmail.com">gmail.com</option>
<option value="@nate.com">nate.com</option>
</select>
</div>
</div>
<!-- 전화번호 -->
<div class="row">
<label for="tel" class="col-mb-2 col-lg-2 col-sm-2 col-12">전화번호</label>
<div class="input-group col-sm-7 col-mb-7 col-lg-7 col-12 mb-3 ">
<select name="tel1" class="form-control form-control-sm">
<option value="010">010</option>
<option value="011">011</option>
<option value="016">016</option>
</select>
<input type="number" class="tel2 form-control form-control-sm" placeholder="5693" name="tel2"
required="required" id = "tel2" maxlength="4" oninput="maxLengthCheck(this)">
<input type="number" class="tel3 form-control form-control-sm"
placeholder="1203" name="tel3" required="required" id = "tel3" max="9999" maxlength="4" oninput="maxLengthCheck(this)">
</div>
</div>
<!-- 직종 추가 -->
<div class="row">
<label class="col-mb-2 col-lg-2 col-sm-2 col-12" for="main1">직종 선택</label>
<div class="input-group col-10 mb-3">
<select
name="mainSelect" id="mainSelect" class="mainSelect"
multiple="multiple">
<%
ArrayList<MiddleCategVO> labels = (ArrayList<MiddleCategVO>) request.getAttribute("mainMiddleCategNames");
out.print("labels" + labels);
String mainName = null;
for (MiddleCategVO label : labels) {
if (label.getMainName().equals(mainName) == false) {
if (mainName != null) {
out.print("</optgroup>");
}
out.print("<optgroup label=\"" + label.getMainName() + "\">");
mainName = label.getMainName();
}
out.print("<option value=\"" + label.getMiddleCategId() + "\">" + label.getMiddleName() + "</option>");
}
if (mainName != null) {
out.print("</optgroup>");
}
%>
</select>
</div>
</div>
<!-- 자기소개 -->
<div class="row">
<label for="id_profile" class="col-mb-3 col-lg-3 col-sm-3 col-12">자기소개</label>
<div class="input-group col-12 mb-3">
<textarea name="intro" rows="10" class="form-control" required id="id_profile" required="required"></textarea>
</div>
</div>
<div class="row yesnobtn">
<button type="submit" class="btn btn-md btn-secondary yesnobtn" id="btnSubmit">회원가입</button>
<button type="button" class="btn btn-md btn-outline-secondary yesnobtn" onclick="cancle()">취소</button>
</div>
</div>
</form>
<!--form 닫기-->
</div>
<!--container닫기-->
<script type="text/javascript">
//아이디 중복체크 화면 open
function openIdChk(){
window.name = "parentForm";
window.open("starters?cmd=memberIdCheck2",
"chkForm", "width=500, height=300, resizable = no, scrollbars = no");
}
// 아이디 창을 다시 눌렀을 경우 아이디가 바꼈다 가정하에 다시 중복 검사하도록 한다.
function inputIdChk(){
document.registerForm.idDuplication.value = "idUncheck";
}
// 비밀번호 일치 여부
$('#passwd_check').keyup(function() {
if ($('#passwd').val() != $('#passwd_check').val()) {
$('.correctPw').text('');
$('.correctPw').html("비밀번호가 일치하지 않습니다").css("color", "red");
} else {
$('.correctPw').text('');
$('.correctPw').html("비밀번호가 일치합니다!").css("color", "black");
}
});
// fSelect 라이브러리
$('.mainSelect').fSelect();
// 회원가입체크
window.onload = function() {
registerForm.name.focus();
document.getElementById("btnSubmit").onclick = inputCheck;
}
// 폼 입력 검사
function inputCheck() {
// 비밀번호 검사(문자, 특수 문자, 숫자를 포함하여 보안성을 높임.)
if (registerForm.passwd.value != "") {
var regex = /^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/; // 표현식
if (!regex.test(registerForm.passwd.value)) { // test 메소드 : 특정한 필드에 입력한 값에 대한 유효성을 검사
alert("비밀번호는 문자, 숫자, 특수문자 포함 8자리 이상입니다.");
registerForm.passwd.focus();
return false;
} else {
return true;
}
}
if (registerForm.idDuplication.value != "idCheck") {
alert("아이디 중복체크를 해주세요.");
registerForm.id.focus();
return false;
}
if (registerForm.name.value == "") {
alert("이름을 입력하시오.");
registerForm.name.focus();
return false;
}
if (registerForm.id.value == "") {
alert("아이디를 입력하시오.");
registerForm.id.focus();
return false;
}
if (registerForm.passwd.value == "") {
alert("비밀번호를 입력하시오.");
registerForm.passwd.focus();
return false;
}
if (registerForm.passwd.value !== registerForm.passwd_check.value) {
alert("비밀번호 불일치!");
registerForm.passwd_check.focus();
return false;
}
if (registerForm.mainSelect.value == "") {
alert("직종을 선택해주시오.");
registerForm.mainSelect.focus();
return false;
}
if (registerForm.birthdate.value == "") {
alert("생년월일을 입력하시오.");
registerForm.birthdate.focus();
return false;
}
if (registerForm.email.value == "") {
alert("이메일을 입력하시오.");
registerForm.email.focus();
return false;
}
if (registerForm.tel2.value == "" || registerForm.tel3.value == "") {
alert("전화번호를 입력하시오.");
registerForm.tel2.focus();
return false;
}
registerForm.submit();
}
//회원가입시 취소버튼 누르면 전에 카테고리로 이동
var cancle = function() {
location.href = "starters?cmd=registerCateg";
};
// 이메일 직접 입력인 경우와 자동 선택을 구분
$('#emailBoxSelect').change(function(){
$("#emailBoxSelect option:selected").each(function(){
if($(this).val()== '1'){ //직접입력일 경우
$("#emailBox1").val('');
$("#emailBox1").attr("readonly",false); //활성화
}else{ //직접입력이 아닐경우
$("#emailBox1").val($(this).text()); //선택값 입력
$("#emailBox1").attr("readonly", true);
}
})
});
// input type이 number일 때 글자수 제한이 maxLength로 안되기에 메소드 사용.
function maxLengthCheck(object){
if (object.value.length > object.maxLength){
object.value = object.value.slice(0, object.maxLength);
}
}
</script>
3. 튜터 회원가입(튜티 동일 부분 제외)
<!-- 이력서 -->
<div class="row">
<label for="wish_work" class="col-mb-2 col-lg-2 col-sm-2 col-12">이력서</label>
<div class="input-group col-4 mb-3">
<label><input type="file" name="resume" required="required"/></label>
</div>
</div>
<!-- 포트폴리오 -->
<div class="row">
<label for="wish_work" class="col-mb-2 col-lg-2 col-sm-2 col-12">포트폴리오</label>
<div class="input-group col-4 mb-3">
<label><input type="file" name="portfolio" /></label>
</div>
</div>
4. 기업 회원가입
<!-- 6. 주소 -->
<div class="row">
<label class="col-mb-2 col-lg-2 col-sm-2 col-12">주소</label>
<div class="input-group-vertical col-mb-5 col-lg-5 col-sm-5 col-12 mb-3 ">
<input type="text" name="postcode" class="form-control form-control-sm"
placeholder="여기를 눌러서 주소 선택하세요." readonly="readonly">
<input
type="text" name="address1" class="form-control form-control-sm"
placeholder="선택한 주소가 자동입력 됩니다." readonly="readonly">
<input
type="text" name="address2" class="form-control form-control-sm"
placeholder="나머지 주소를 입력하세요.">
</div>
</div>
<!-- 7. 홈페이지 주소 -->
<div class="row">
<label for="homepage" class="col-mb-2 col-lg-2 col-sm-2 col-12">홈페이지 주소</label>
<div class="input-group col-mb-4 col-lg-4 col-sm-4 col-12 mb-3">
<input
type="text" id="homepage" placeholder="www.starters.com"
class="form-control form-control-sm homepage" name="homepage">
</div>
</div>
<!-- 8. 회사규모 -->
<div class="row">
<label for="range" class="col-mb-2 col-lg-2 col-sm-2 col-12">회사규모</label>
<div class="input-group col-mb-4 col-lg-4 col-sm-4 col-12 mb-3">
<select class="form-control form-control-sm"
name="range">
<option selected>----</option>
<option value="1~50">1~50명</option>
<option value="51~100">51~100명</option>
<option value="101~300">101~300명</option>
<option value="300~">300명~</option>
</select>
</div>
</div>
<!-- 9. 설립연도 -->
<div class="row">
<label for="comBirth" class="col-mb-2 col-lg-2 col-sm-2 col-12">설립연도</label>
<div class="input-group col-mb-4 col-lg-4 col-sm-4 col-12 mb-3">
<input class="comBirth form-control form-control-sm"
type="date" max="2018-11-30"
id="comBirth"name="comBirth">
</div>
</div>
<!-- 10. 기업이미지1 -->
<div class="row">
<label for="comimage1" class="col-mb-2 col-lg-2 col-sm-2 col-12">기업이미지1</label>
<div class="input-group col-3 mb-3">
<input type="file" class="comimage1" name="comimage1">
</div>
</div>
<!-- 11. 기업이미지2 -->
<div class="row">
<label for="comimage2" class="col-mb-2 col-lg-2 col-sm-2 col-12">기업이미지2</label>
<div class="input-group col-3 mb-3">
<input type="file" class="comimage2" name="comimage2">
</div>
</div>
<!-- 12. 기업이미지3 -->
<div class="row">
<label for="comimage3" class="col-mb-2 col-lg-2 col-sm-2 col-12">기업이미지3</label>
<div class="input-group col-3 mb-3">
<input type="file" class="comimage3" name="comimage3">
</div>
</div>
// ================================================================
<script type="text/javascript">
// 본 예제에서는 도로명 주소 표기 방식에 대한 법령에 따라, 내려오는 데이터를 조합하여 올바른 주소를 구성하는 방법을 설명합니다.
// 다음 지도
function sample4_execDaumPostcode() {
new daum.Postcode({
oncomplete : function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 도로명 주소의 노출 규칙에 따라 주소를 조합한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var fullRoadAddr = data.roadAddress; // 도로명 주소 변수
var extraRoadAddr = ''; // 도로명 조합형 주소 변수
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if (data.bname !== '' && /[동|로|가]$/g.test(data.bname)) {
extraRoadAddr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if (data.buildingName !== '' && data.apartment === 'Y') {
extraRoadAddr += (extraRoadAddr !== '' ? ', '
+ data.buildingName : data.buildingName);
}
// 도로명, 지번 조합형 주소가 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if (extraRoadAddr !== '') {
extraRoadAddr = ' (' + extraRoadAddr + ')';
}
// 도로명, 지번 주소의 유무에 따라 해당 조합형 주소를 추가한다.
if (fullRoadAddr !== '') {
fullRoadAddr += extraRoadAddr;
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
$('input[name = "postcode"]').val(data.zonecode); // 5자리 우편번호 사용
$('input[name = "address1"]').val(fullRoadAddr);
// document.getElementById('sample4_jibunAddress').value = data.jibunAddress; // 지번주소
}
}).open();
}
</script>
5. 아이디 중복체크
<script type="text/javascript">
// httpRequest 객체 생성
var httpRequest = null;
function getXMLHttpRequest(){
var httpRequest = null;
if(window.ActiveXObject){
try{
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try{
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) { httpRequest = null; }
}
}
else if(window.XMLHttpRequest){
httpRequest = new window.XMLHttpRequest();
}
return httpRequest;
}
// 회원가입창의 아이디 입력란의 값을 가져온다.
function pValue(){
document.getElementById("userId").value = opener.document.registerForm.id.value;
}
// 아이디 중복체크
function idCheck(){
var id = document.getElementById("userId").value;
if (!id) {
alert("아이디를 입력하지 않았습니다.");
return false;
}
else if((id < "A" || id > "Z")&&(id < "0" || id > "9")&& (id < "a" || id > "z")) {
alert("한글 및 특수문자는 아이디로 사용하실 수 없습니다.");
return false;
}
else
{
var param="id="+id
// 서버측 Script와 통신하기 위한 XMLHttpRequest 객체 사용
// post 방식
// 1. Http 메서드 지정
httpRequest = getXMLHttpRequest();
// 서버 응답 처리
httpRequest.onreadystatechange = callback;
// 2. 접속할 url 입력
httpRequest.open("POST", "starters?cmd=memberIdCheck3", true);
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// 3. 요청하기
httpRequest.send(param);
}
}
// 서버 응답 처리
function callback(){
// readyState == 4 : 데이터를 전부 받은 상태
if(httpRequest.readyState == 4){
// 결과값을 가져온다.
var resultText = httpRequest.responseText;
if(resultText == 0){
alert("사용할수없는 아이디입니다.");
document.getElementById("cancelBtn").style.visibility='visible';
document.getElementById("useBtn").style.visibility='hidden';
document.getElementById("msg").innerHTML ="";
}
else if(resultText == 1){
document.getElementById("cancelBtn").style.visibility='hidden';
document.getElementById("useBtn").style.visibility='visible';
document.getElementById("msg").innerHTML = "사용 가능한 아이디입니다.";
}
}
}
// 사용하기 클릭 시 부모창으로 값 전달
function sendCheckValue(){
// 중복체크 결과인 idCheck 값을 전달한다.
opener.document.registerForm.idDuplication.value ="idCheck";
// 회원가입 화면의 ID입력란에 값을 전달
opener.document.registerForm.id.value = document.getElementById("userId").value;
if (opener != null) {
opener.chkForm = null;
self.close();
}
}
</script>
</head>
<body onload="pValue()">
<div id="wrap">
<br>
<b><font size="4" color="gray">아이디 중복체크</font></b>
<hr size="1" width="460">
<br>
<div id="chk">
<form id="checkForm">
<input type="text" name="idinput" id="userId">
<input type="button" value="중복확인" onclick="idCheck()">
</form>
<div id="msg"></div>
<br>
<input id="cancelBtn" type="button" value="취소" onclick="window.close()"><br>
<input id="useBtn" type="button" value="사용하기" onclick="sendCheckValue()">
</div>
</div>
6. JobSelectDAO
// 1. 회원가입시 필요한 직종 목록
public ArrayList<MiddleCategVO> mainMiddleCategNames(){
ArrayList<MiddleCategVO> mainMiddleCategNames = new ArrayList<MiddleCategVO>();
try{
String sql = "select main_category.main_categ_id, main_name, middle_categ_id, middle_name "
+ "from main_category, middle_category "
+ "where main_category.main_categ_id = middle_category.main_categ_id";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
mainMiddleCategNames.add(new MiddleCategVO(rs.getInt("main_categ_id"), rs.getString("main_name"),rs.getInt("middle_categ_id"),rs.getString("middle_name")));
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
return mainMiddleCategNames;
}
7. MemberDAO
// 4. 직종선택
public int JobSelects(String memberId, int middleCategId) {
int result = 0;
try {
String sql = "insert into job_select(member_id, middle_categ_id) values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memberId);
pstmt.setInt(2, middleCategId);
if (pstmt.executeUpdate() == 1)
result = 1;
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
// 5. 튜티회원가입
public boolean addMemberTutee(MemberVO vo) {
return addMemberTutee(vo.getMemberId(), vo.getName(), vo.getPasswd(), vo.getBirth(), vo.getGender(),
vo.getEmail(), vo.getPhoneNum(), vo.getIntro(), vo.getregisterDate());
}
public boolean addMemberTutee(String memberId, String name, String passwd, String birth, String gender,
String email, String phoneNum, String intro, String registerDate) {
boolean result = false;
try {
String sql = "INSERT INTO member_info(member_id,name,passwd,birth,gender,email,phone_num,intro,register_date) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memberId);
pstmt.setString(2, name);
pstmt.setString(3, passwd);
pstmt.setString(4, birth);
pstmt.setString(5, gender);
pstmt.setString(6, email);
pstmt.setString(7, phoneNum);
pstmt.setString(8, intro);
pstmt.setString(9, registerDate);
if (pstmt.executeUpdate() == 1)
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 6. 튜터 회원가입
public boolean addMemberTutor(String memberId, String name, String passwd, String birth, String gender,
String email, String phoneNum, String intro, String resume, String portfolio, String registerDate) {
boolean result = false;
try {
String sql = "INSERT INTO member_info(member_id,name,passwd,birth,gender,email,phone_num,intro,register_date) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memberId);
pstmt.setString(2, name);
pstmt.setString(3, passwd);
pstmt.setString(4, birth);
pstmt.setString(5, gender);
pstmt.setString(6, email);
pstmt.setString(7, phoneNum);
pstmt.setString(8, intro);
pstmt.setString(9, registerDate);
String sql1 = "INSERT INTO tutor_info(member_id, resume, portfolio) values(?, ?, ?)";
PreparedStatement pstmt1 = conn.prepareStatement(sql1);
pstmt1.setString(1, memberId);
pstmt1.setString(2, resume);
pstmt1.setString(3, portfolio);
if (pstmt.executeUpdate() == 1 && pstmt1.executeUpdate() == 1) {
result = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 7. 기업 회원가입
public boolean addMemberCompany(String companyId, String name, String passwd, String email, String phoneNum,
String address, String companyUrl, String companyRange, String companyBirth, String companyIntroduce,
String registerDate) {
boolean result = false;
try {
String sql1 = "INSERT INTO company_info(company_id, name, passwd, email, phone_num, address, company_url, company_range, company_birth, company_introduce, register_date) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt1 = conn.prepareStatement(sql1);
pstmt1.setString(1, companyId);
pstmt1.setString(2, name);
pstmt1.setString(3, passwd);
pstmt1.setString(4, email);
pstmt1.setString(5, phoneNum);
pstmt1.setString(6, address);
pstmt1.setString(7, companyUrl);
pstmt1.setString(8, companyRange);
pstmt1.setString(9, companyBirth);
pstmt1.setString(10, companyIntroduce);
pstmt1.setString(11, registerDate);
if (pstmt1.executeUpdate() == 1)
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 8. 기업 이미지 파일 저장
public int addMemberCompanyImage(String companyId, String img1) {
int result = 0;
try {
String sql2 = "INSERT INTO company_image(company_id, image) " + "VALUES (?, ?)";
PreparedStatement pstmt2 = conn.prepareStatement(sql2);
pstmt2.setString(1, companyId);
pstmt2.setString(2, img1);
if (pstmt2.executeUpdate() == 1)
result = 1;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
8. 서블릿
// 4. 튜티 직종 선택
private String TuteeLookJobCateg(HttpServletRequest request) {
dao3 = new JobSelectDAO();
ArrayList<MiddleCategVO> mainMiddleCategNames = dao3.mainMiddleCategNames();
request.setAttribute("mainMiddleCategNames", mainMiddleCategNames);
return "register/registerTutee.jsp";
}
// 5. 튜터 직종 선택
private String TutorLookJobCateg(HttpServletRequest request) throws ServletException, IOException {
dao3 = new JobSelectDAO();
ArrayList<MiddleCategVO> mainMiddleCategNames = dao3.mainMiddleCategNames();
request.setAttribute("mainMiddleCategNames", mainMiddleCategNames);
return "register/registerTutor.jsp";
}
// 6. 튜티 회원가입
private String registerTuteeAction(HttpServletRequest request) throws ServletException, IOException {
dao = new MemberDAO();
String memberId = request.getParameter("memberId");
String passwd = request.getParameter("passwd_check");
String name = request.getParameter("name");
String email = request.getParameter("email");
String email3 = request.getParameter("emailBox1");
String birth = request.getParameter("birthdate");
String gender = request.getParameter("gender");
String phoneNum1 = request.getParameter("tel1");
String phoneNum2 = request.getParameter("tel2");
String phoneNum3 = request.getParameter("tel3");
String intro = request.getParameter("intro");
String gol = "@";
String email2 = gol.concat(email3);
// 튜티 정보 추가
boolean result1 = dao.addMemberTutee(memberId, name, passwd, birth, gender, email + email2,
phoneNum1 + phoneNum2 + phoneNum3, intro, null);
String[] mainSelect = request.getParameterValues("mainSelect");
int result2 = 0;
for (int i = 0; i < mainSelect.length; i++) {
int realmainSelect = Integer.parseInt(mainSelect[i]);
result2 += dao.JobSelects(memberId, realmainSelect);
}
if (result1 && result2 != 0)
return "login/login.jsp"; // 회원가입 완료
return "register/registerTutee.jsp";
}
// 7. 튜터 회원가입
private String registerTutorAction(HttpServletRequest request) throws ServletException, IOException {
dao = new MemberDAO();
String memberId = request.getParameter("memberId");
String passwd = request.getParameter("passwd_check");
String name = request.getParameter("name");
String email = request.getParameter("email");
String email3 = request.getParameter("emailBox1");
String birth = request.getParameter("birthdate");
String gender = request.getParameter("gender");
String phoneNum1 = request.getParameter("tel1");
String phoneNum2 = request.getParameter("tel2");
String phoneNum3 = request.getParameter("tel3");
String intro = request.getParameter("intro");
String resume = request.getParameter("resume");
String portfolio = request.getParameter("portfolio");
String gol = "@";
String emailBox = gol.concat(email3);
// 튜터 정보 추가
boolean result1 = dao.addMemberTutor(memberId, name, passwd, birth, gender, email + emailBox,
phoneNum1 + phoneNum2 + phoneNum3, intro, resume, portfolio, null);
String[] mainSelect = request.getParameterValues("mainSelect");
int result2 = 0;
for (int i = 0; i < mainSelect.length; i++) {
int realmainSelect = Integer.parseInt(mainSelect[i]);
result2 += dao.JobSelects(memberId, realmainSelect);
}
if (result1 && result2 != 0)
return "login/login.jsp"; // 회원가입 완료
return "register/registerTutor.jsp";
}
// 8. 기업 회원가입
private String registerCompanyAction(HttpServletRequest request) throws Exception {
dao = new MemberDAO();
request.setCharacterEncoding("UTF-8");
String encType = "utf-8"; // 인코딩 정보
int maxSize = 1 * 1024 * 1024; // 최대 업로드될 파일 크기
MultipartRequest imageUp = null; // MultipartRequest 객체 생성
String savePath = request.getServletContext().getRealPath("/assets/companyImage"); // 저장경로
imageUp = new MultipartRequest(request, savePath, maxSize, encType, new DefaultFileRenamePolicy()); // 파일 업로드하는 객체 생성
// Enumeration<?> files = imageUp.getFileNames(); // input타입이 file인 파라미터를 불러옴, 파일이 여러개일때 사용
String image1 = imageUp.getFilesystemName("comimage1"); // 서버에 저장될 파일이름
String comimage2 = imageUp.getFilesystemName("comimage2");
String comimage3 = imageUp.getFilesystemName("comimage3");
String companyId = imageUp.getParameter("companyId");
String name = imageUp.getParameter("name");
String passwd = imageUp.getParameter("passwd_check");
String email = imageUp.getParameter("email");
String email3 = imageUp.getParameter("emailBox1");
String phoneNum1 = imageUp.getParameter("tel1");
String phoneNum2 = imageUp.getParameter("tel2");
String phoneNum3 = imageUp.getParameter("tel3");
String homepage = imageUp.getParameter("homepage");
String postcode = imageUp.getParameter("postcode");
String address1 = imageUp.getParameter("address1");
String address2 = imageUp.getParameter("address2");
String range = imageUp.getParameter("range");
String comBirth = imageUp.getParameter("comBirth");
String companyintro = imageUp.getParameter("companyintro");
String gol = "@";
String emailBox = gol.concat(email3);
boolean result1 = dao.addMemberCompany(companyId, name, passwd, email + emailBox,
phoneNum1 + phoneNum2 + phoneNum3, postcode + address1 + address2, homepage, range, comBirth, companyintro, null);
String[] images = { image1, comimage2, comimage3 };
int imageResult = 0;
for (int i = 0; i < images.length; i++) {
imageResult += dao.addMemberCompanyImage(companyId, images[i]);
}
if (result1 && imageResult != 0)
return "login/login.jsp"; // 회원가입 완료
return "register/registerCompany.jsp";
}
* MultipartRequest:
- cos.jar 라이브러리에서 파일 업로드 및 폼 요소를 처리하는 클래스이다.