목차
1. Spring 댓글 게시판: 수정, 삭제
2. 네이버 서버로 이메일 인증
3. Spring 회원 관리
1. Spring 댓글 게시판: 수정, 삭제
- 댓글 게시판도 일반 게시판과 마찬가지로 수정과 삭제를 할 때 글의 번호 값과 페이지 값을 가지고 넘어간다.
- 서비스 클래스에서 out 객체로 메시지를 출력하려면, 컨트롤러에서 메소드를 호출할 때 매개변수에 response 객체를 전달해야 한다.
2. 네이버 서버로 이메일 인증
1) 메일 서버
- 직접 메일 서버를 구축해서 사용하기가 어렵기 때문에 네이버나 구글과 같은 사이트에서 제공하는 서버를 이용할 수 있다.
2) Mail Server Protocol
• Mail 송신 : SMTP(Simple Mail Transfer Protocol) - 25번
• Mail 수신 : POP3(Post Office Protocol 3) - 110번
3) 네이버 SMTP 환경설정
- 네이버로 로그인 후, 네이버 메일에서 [환경설정] 클릭
- [POP3/IMAP 설정] - [POP3/SMTP 설정] 탭 - [POP3/SMTP 사용: 사용함] - [확인]
- [IMAP/SMTP 설정] 탭 - [IMAP/SMTP 사용: 사용함] - [확인]
4) 이메일 관련 라이브러리 추가
- STS 프로그램에서 pom.xml 파일에 이메일 관련 라이브러리 추가하기
• 예시
1
2
3
4
5
6
|
<!-- EMail -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.3.3</version>
</dependency>
|
cs |
5) 컨트롤러
- 메일을 보내는 사람의 정보와 받는 사람의 정보를 설정하고 전송한다.
- 인증번호 등을 생성하기 위해서는 random 클래스로 객체를 생성하고 nextInt() 메소드를 사용한다.
- ex) Random random = new Random();
int a = random.nextInt(100); // 0 ~ 99까지의 난수 발생
- HtmlEmail : pom.xml에 추가한 commons-email 라이브러리에서 제공하는 클래스
3. Spring 회원관리
1) 회원 가입
- 전화번호에서 지역번호는 따로 외부 파일을 만들고 배열로 처리한 다음, include 디렉티브 태그를 이용해서 불러올 수 있다.
• 예시
<뷰 페이지(jsp 파일)>
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<tr>
<th>집전화번호</th>
<td>
<%@ include file="../../jsp/include/tel_number.jsp"%>
<select name="join_tel1" >
<c:forEach var="t" items="${tel}" begin="0" end="16">
<option value="${t}">${t}</option>
</c:forEach>
</select> -
<input name="join_tel2" id="join_tel2" size="4" maxlength="4" class="input_box" /> -
<input name="join_tel3" id="join_tel3" size="4" maxlength="4" class="input_box" />
</td>
</tr>
|
cs |
<불러올 외부 파일(tel_number.jsp)>
1
2
3
4
5
6
7
8
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String[] tel={"02","031","032","033","041","042","043","044",
"051","052","053","054","055","061","062","063","064"};
request.setAttribute("tel",tel);
%>
|
cs |
2) 첨부파일
① pom.xml 설정
- 첨부파일 기능을 사용하려면 첨부파일 관련 라이브러리(ex. commons-email)가 pom.xml 파일에 등록되어 있어야 한다.
• 예시
1
2
3
4
5
6
|
<!-- 첨부 파일 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2</version>
</dependency>
|
cs |
② servlet-context.xml 설정
- 업로드되는 파일의 크기를 제한하는 <bean>을 생성한다.
• 예시
1
2
3
4
|
<!-- 파일 업로드 설정 -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="10000000"/>
</beans:bean>
|
cs |
③ Controller 설정
- 첨부파일 기능이 있는 회원가입 폼 또는 게시판 글 작성 폼에서 컨트롤러에 값을 전달할 때, MultipartFile 객체로 받아야 한다.
- MultipartFile 객체로 첨부파일의 파일명과 사이즈(용량)를 구한 다음, 크기와 확장자가 올바른지 검사한다.
- cos 라이브러리와 달리 commons-fileupload 라이브러리는 파일을 직접 업로드 시키는 코드가 필요하다. (ex. mf.transferTo(new File(path + "/" + filename)); )
• 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
/* 회원 가입 저장(fileupload) */
@RequestMapping(value = "/member_join_ok.nhn", method = RequestMethod.POST)
public String member_join_ok(@RequestParam("join_profile1") MultipartFile mf,
MemberBean member, // DTO 클래스의 객체를 생성해서 이름 값이 일치하는 값을 setter() 메소드로 객체에 저장
HttpServletRequest request,
Model model) throws Exception {
String filename = mf.getOriginalFilename(); // 첨부파일명
int size = (int) mf.getSize(); // 첨부파일의 크기 (단위: Byte)
// getSize() 메소드는 long형으로 값을 돌려주기 때문에 명시적 형변환(다운캐스팅) 필요
String path = request.getRealPath("upload");
System.out.println("mf=" + mf);
System.out.println("filename=" + filename); // filename="Koala.jpg"
System.out.println("size=" + size);
System.out.println("Path=" + path);
int result=0;
String file[] = new String[2];
// file = filename.split(".");
// System.out.println(file.length);
// System.out.println("file0="+file[0]);
// System.out.println("file1="+file[1]);
if(filename != ""){ // 첨부파일이 전송된 경우
StringTokenizer st = new StringTokenizer(filename, ".");
file[0] = st.nextToken(); // 파일명 (ex. Koala)
file[1] = st.nextToken(); // 확장자 (ex. jpg)
if(size > 100000){ // 100KB
result = 1;
model.addAttribute("result", result);
return "member/uploadResult";
}else if(!file[1].equals("jpg") &&
!file[1].equals("gif") &&
!file[1].equals("png") ){
result = 2;
model.addAttribute("result", result);
return "member/uploadResult";
}
}
if (size > 0) { // 첨부파일이 전송된 경우
mf.transferTo(new File(path + "/" + filename)); // 첨부파일을 서버측으로 전송시키는 코드
}
String join_tel1 = request.getParameter("join_tel1").trim();
String join_tel2 = request.getParameter("join_tel2").trim();
String join_tel3 = request.getParameter("join_tel3").trim();
String join_tel = join_tel1 + "-" + join_tel2 + "-" + join_tel3;
String join_phone1 = request.getParameter("join_phone1").trim();
String join_phone2 = request.getParameter("join_phone2").trim();
String join_phone3 = request.getParameter("join_phone3").trim();
String join_phone = join_phone1 + "-" + join_phone2 + "-" + join_phone3;
String join_mailid = request.getParameter("join_mailid").trim();
String join_maildomain = request.getParameter("join_maildomain").trim();
String join_email = join_mailid + "@" + join_maildomain;
member.setJoin_tel(join_tel);
member.setJoin_phone(join_phone);
member.setJoin_email(join_email);
member.setJoin_profile(filename);
memberService.insertMember(member);
return "redirect:member_login.nhn";
}
|
cs |
④ Mapper 파일 SQL문 설정
- mybatis에서는 원칙적으로 null 값을 허용하지 않기 때문에 첨부파일을 업로드하지 않는 경우 오류가 발생한다. 이것을 방지하려면 sql문에 jdbcType=VARCHAR 코드를 추가해준다.
• 예시
1
2
3
4
5
6
7
8
9
|
<!-- 회원저장 -->
<insert id="member_join" parameterType="member">
insert into join_member (join_code,join_id,join_pwd,join_name,
join_zip1,join_addr1,join_addr2,join_tel,join_phone,join_email,join_profile,
join_regdate,join_state) values(join_member_joincode_seq.nextval,
#{join_id},#{join_pwd},#{join_name},
#{join_zip1},#{join_addr1},#{join_addr2},#{join_tel},
#{join_phone},#{join_email},#{join_profile,jdbcType=VARCHAR},sysdate,1) <!-- jdbcType=VARCHAR : null 값을 허용 -->
</insert>
|
cs |
*join_profile1은 폼에서 첨부파일 태그의 name 값
'Spring' 카테고리의 다른 글
98일차: Spring 검색 게시판 / Ajax 댓글 게시판_2021.11.05 (0) | 2021.11.05 |
---|---|
97일차: Spring 회원관리(로그인,비밀번호 찾기,수정,삭제) / 검색 기능 게시판_2021.11.04 (0) | 2021.11.04 |
95일차: Spring 게시판 글 수정, 글 삭제 / 댓글 게시판_2021.11.02 (0) | 2021.11.02 |
94일차: Spring 게시판 환경 설정 / 글 작성 / 글 목록 / 상세 페이지_2021.11.01 (0) | 2021.11.01 |
93일차: Spring DB 연동 / Spring 게시판 환경 설정_2021.10.29 (0) | 2021.10.29 |