Lab2 HelloWorld
Lab2 HelloWorld
MỤC TIÊU
Nắm vững 2 kỹ thuật lập trình web cơ bản là
MÔ TẢ
THỰC HIỆN
Xây dựng một project có cấu trúc các thành phần như sau
Gửi email:
o activation.jar
Cấu hình để Spring MVC nạp nhiều file cấu hình: spring-config-*.xml. Dấu * sẽ đại diện cho nhóm ký tự bất
kỳ. Cụ thể ở bài này là mvc, gmail và upload
spring-config-mvc.xml
Để gửi email thông qua tài khoản gmail trong Spring bạn cần cấu hình bean JavaMailSenderImpl với các
thông số cần thiết như trên.
spring-config-upload.xml
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- maxUploadSize=10MB -->
<property name="maxUploadSize" value="10485760"/>
</bean>
</beans>
Chú ý:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spring MVC Seminar 2014</title>
</head>
<body>
<h2>Send Email Form</h2>
${error}
<form:form action="send.htm"
method="post" enctype="multipart/form-data" modelAttribute="mail">
<div>From:</div>
<form:input path="from"/>
<div>To:</div>
<form:input path="to"/>
<div>Subject:</div>
<form:input path="subject"/>
<div>Body:</div>
<form:textarea path="body" rows="3" cols="30"/>
<div>Attachment File:</div>
<input name="attachment" type="file">
<hr>
<input type="submit" value="Send">
</form:form>
</body>
</html>
import java.io.File;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.lycato.model.EmailInfo;
@Controller
public class EmailController {
@Autowired
ServletContext context;
@Autowired
JavaMailSender mailSender;
@RequestMapping(value="input", method=RequestMethod.GET)
public String showForm(ModelMap model) {
model.addAttribute("mail", new EmailInfo());
return "AttachEmailInput";
}
@RequestMapping(value="send", method=RequestMethod.POST)
public String sendWithAttach(ModelMap model,
@ModelAttribute("mail") EmailInfo mailInfo,
@RequestParam("attachment") MultipartFile file) {
try{
MimeMessage message = mailSender.createMimeMessage();
helper.addAttachment(uploadFile.getName(), uploadFile);
model.addAttribute("imageUrl", imageUrl);
}
mailSender.send(message);
}
catch(Exception ex){
model.addAttribute("error", ex.getMessage());
return "AttachEmailInput";
}
return "AttachEmailSuccess";
}
}
Action send.htm sẽ nhận thông tin email vào đối tượng EmailInfo và file upload có tên attachment
dưới dạng MultipartFile để xử lý file upload.
JavaMailSender (được khai báo trong file cấu hình spring-config-gmail) được tiêm vào để gửi
email. Phương thức createMimeMessage() và send() là các phương thức được sử dụng để tạo ra
MimeMessage và gửi đi.
MimeMessageHelper cung cấp các phương thức để thiết lập các thông tin mail như setFrom(),
setSubject() hay addAttachment().
EmailInfo.java
package com.lycato.model;
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spring MVC Seminar 2014</title>
</head>
<body>
<h2>Send Email Success</h2>
<ul>
<li>From: ${mail.from}</li>
<li>To: ${mail.to}</li>
<li>Subject: ${mail.subject}</li>
<li>Body: ${mail.body}</li>
<li>Attach Image:
<img src="${imageUrl}">
</li>
</ul>
</body>
</html>
Trong model có chứa 2 thuộc tính là mail và imageUrl do EmailController thiết lập trong action send.html
với các dòng mã lệnh sau:
@ModelAttribute("mail")
model.addAttribute("imageUrl", imageUrl);
Trong đó mail là đối tượng của EmailInfo gồm các thuộc tính from, to, subject, body. Biểu thức EL
${mail.from} sẽ truy xuất thuộc tính from của đối tượng mail còn ${imageUrl} là thuộc tính model.
Bước 6: Chạy
http://localhost:8080/SpringMVCEmail/input.htm