com.example.bootboard
BootboardApplication.java(X)
com.example.controller
BoardController.java(O)
com.example.model1
BoardTO
BoardDAO
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
# View Pages
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
# MariaDB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/sample
spring.datasource.username=root
spring.datasource.password=123456
package com.example.model;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class BoardTO {
private String seq;
private String subject;
private String writer;
private String mail;
private String password;
private String content;
private String hit;
private String wip;
private String wdate;
private int wgap;
}
com.example.bootmybatisboard
BootMybatisApplication.java(기본)
com.example.controller
BoardController.java
com.example.config
DatabaseConfiguration.java
com.example.model
BoardTO
BoardDAO
mappers
board.xml
mail.do - 메일 형태
mail_ok.do - 메일 보내짐
=> controller에서 보내기
package com.example.controller;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@RestController
public class MailController {
/* JavaMailSender는 Spring Framework에서 제공하는 인터페이스로,
이를 사용하여 이메일을 보내는 기능을 구현할 수 있다.
이 인터페이스는 이메일 전송을 위한 다양한 메서드를 제공하며,
JavaMailSender를 구현한 클래스는 SMTP 서버를 통해 이메일을 전송할 수 있는 기능을 제공
SMTP는 Simple Mail Transfer Protocol의 약자로,
전자 메일을 전송하기 위해 사용되는 네트워크 프로토콜.
SMTP는 메일 서버 간에 이메일을 전송하고 수신하는 데 사용 */
@Autowired
private JavaMailSender javaMailSender;
@RequestMapping("/mail.do")
public ModelAndView mail(HttpServletRequest request) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("mail");
return modelAndView;
}
@RequestMapping("/mail_ok.do")
public ModelAndView mail_ok(HttpServletRequest request) {
System.out.println("javaMailSender : " + javaMailSender);
// 보낼사람에 대한 데이터들 입력
String toEmail = "";
String toName = "테스터";
String subject = "테스트 제목";
String content = "테스트 내용";
// mailSender 메서드를 통하여 위의 값들을 넣어주고 넘겨준다
this.mailSender2(toEmail, toName, subject, content);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("mail_ok");
return modelAndView;
}
// 메일 받는사람에 대한 정보
public void mailSender1(String toEmail, String toName, String subject, String content) {
// SimpleMailMessage : 이메일 전송 기능을 사용하기 위해 사용되는 클래스 / 간단한 텍스트 기반의 이메일 메시지를 생성, 구상할 수 있음.
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
// ~ 에게 보내겠다
simpleMailMessage.setTo(toEmail); // setTO() : 수신자 이메일 주소를 설정
simpleMailMessage.setSubject(subject); // setSubject() : 이메일 제목 설정
simpleMailMessage.setText(content); // setText() : 이메일 본문 설정
simpleMailMessage.setSentDate(new Date()); // setSentDate(Date sentDate) : 이메일 발송일자 설정
// 실제로 이메일을 전송
javaMailSender.send(simpleMailMessage);
System.out.println("전송 완료");
}
// html 보내기
public void mailSender2(String toEmail, String toName, String subject, String content) {
try {
// Mime은 : 이메일에서 텍스트뿐만 아니라 첨부파일, 이미지, HTML등 다양한 형식의 콘텐츠를 표현하기 위한 표준 형식
// javaMailSender.createMimeMessage()메서드를 사용하여 MimeMessage객체를 생성 / JavaMailSender 인터페이스의 구현체인 JavaMailSenderImpl에서 제공하는 메서드
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// addRecipient(RecipientType type, Address address): 수신자의 이메일 주소와 유형(To, Cc, Bcc)을 설정
// RecipientType.TO는 수신자 유형을 나타내는 상수
// new InternetAddress(toEmail, toName, "utf-8")는 수신자의 이메일 주소와 이름, 문자 인코딩을 설정하는데 사용
mimeMessage.addRecipient(RecipientType.TO, new InternetAddress(toEmail, toName, "utf-8"));
// setSubject(String subject, String charset): 이메일 제목을 설정하고 문자 인코딩을 지정
mimeMessage.setSubject(subject, "utf-8");
// setText(String text, String charset, String mimeType): 이메일 본문을 설정하고 문자 인코딩과 MIME 타입을 지정
mimeMessage.setText(content, "utf-8", "html");
// setSentDate(Date sentDate): 이메일 발송 일자를 설정
mimeMessage.setSentDate(new Date());
// 실제로 이메일을 전송
javaMailSender.send(mimeMessage);
System.out.println("전송 완료");
} catch (MailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.example.bootmail;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.controller"})
public class BootMailApplication {
public static void main(String[] args) {
SpringApplication.run(BootMailApplication.class, args);
}
}
디자인 없이 그냥 기능만 구현되게 함
<%@ 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>
Hello mail.jsp
<br><hr><br>
<form action="mail_ok.do" method="post">
이메일 <input type="text" name="email1" />
@
<input type="text" name="email2" />
<input type="submit" value="메일쓰기" />
<br><hr><br>
받을이름 <input type="text" name="name" />
<br><hr><br>
제목 <input type="text" name="subject" />
<br><hr><br>
내용 <input type="text" name="content" />
</form>
</body>
</html>
전송 누르면 메일이 받아짐.
# View Pages
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
# Multipart Config
spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=c:/java
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=50MB
<%@ 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>
Hello form.jsp
<br><br>
<form action="form_ok.do" method="post" enctype="multipart/form-data" >
파일 <input type="file" name="upload" />
<input type="submit" value="파일 업로드" />
</form>
</body>
</html>
package com.example.controller;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@RestController
public class UploadController {
@RequestMapping("/form.do")
public ModelAndView form(HttpServletRequest request) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("form");
return modelAndView;
}
/* MultipartFile : 파일 업로드를 처리하기 위한 객체.
클라이언트에서 서버로 업로도된 파일의 정보와 내용을 가지고 있다.
업로드된 파일의 이름, 크기, 내용 등을 엑세스하고 처치할 수 있음.
매개변수의 upload는 <input type="file" name="upload">의 name과 일치 */
@RequestMapping("/form_ok.do")
public ModelAndView form_ok(MultipartFile upload) {
try {
System.out.println(upload.getOriginalFilename());
System.out.println(upload.getSize());
// 중복파일 제거 흐름
// 파일명_타임스탬프(1970년부터... ~). 확장자
/* new File(upload.getOriginalFilename())은
업로드된 파일의 원본 파일 이름을 이용하여 새로운 File 객체를 생성.
이 파일 객체는 서버에 저장될 업로드 파일의 경로를 나타낸다.
upload.transferTo(new File(upload.getOriginalFilename()))는
업로드된 파일을 지정된 파일 경로로 복사하는 역할.
이를 통해 클라이언트가 업로드한 파일은 서버의 지정된 경로에 저장*/
// 클라이언트에서 업로드된 파일을 서버의 파일 시스템에 저장하기 위한 코드
// transferTo() : 업로도된 파일을 지정된 경로에 저장하는 작업을 수행 / 클라이언트가 업로드한 파일을 서버의 파일 시스템의 특정 위치로 복사하거나 이동시키는 역학
upload.transferTo(new File(upload.getOriginalFilename()));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("form_ok");
return modelAndView;
}
}
package com.example.bootupload;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.controller"})
public class BootUploadApplication {
public static void main(String[] args) {
SpringApplication.run(BootUploadApplication.class, args);
}
}
중복파일 제거와