002.SpringBoot(1.5.10版本老)整合Web开发+文件上传+邮件发送

整合Servlet(一)

在这里插入图片描述

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 *SpringBoot整合Servlet方式一
 *原来我们的方式
 *<servlet>
 *	<servlet-name>FirstServlet</servlet-name>
 *	<servlet-class>com.bjsxt.servlet.FirstServlet</servlet-class>
 *</servlet>
 *
 *<servlet-mapping>
 * <servlet-name>FirstServlet</servlet-name>
 * <url-pattern>/first</url-pattern>
 *</servlet-mapping>
 *
 */

@WebServlet(name="FirstServlet",urlPatterns="/first")
public class FirstServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("FirstServlet............");
	}
}

扫包操作+启动

@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化

@SpringBootApplication
@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化
public class App {

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}

}

整合Servlet方式(二)

/**
 *SpringBoot整合Servlet方式二
 *
 */

public class SecondServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("SecondServlet..........");
	}
	
}

启动

/**
 * SpringBoot整合Servlet方式二
 *
 *
 */
@SpringBootApplication
public class App2 {

	public static void main(String[] args) {
		SpringApplication.run(App2.class, args);
	}
	
	@Bean
	public ServletRegistrationBean getServletRegistrationBean(){
		ServletRegistrationBean  bean = new ServletRegistrationBean(new SecondServlet());
		bean.addUrlMappings("/second");
		return bean;
	}
}

bean.addUrlMappings("/second"); 指定 没有理解

文件上传

SpringBoot自身对于文件上传可以说是非常的友好了,只需要在控制层的参数中使用MultipartFile这个类,然后接受file类型的数据上传就可以了,至于将上传得到的文件如何处理就是我们开发者自己决定了

页面编写+代码(最简单)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
	<form action="fileUploadController" method="post" enctype="multipart/form-data">
		上传文件:<input type="file" name="filename"/><br/>
		<input type="submit" value="上传"/>
	</form>
</body>
</html>

在这里插入图片描述

/**
 * SpringBoot文件上传
 *
 *
 */
//@Controller
@RestController //表示该类下的方法的返回值会自动做json格式的转换
public class FileUploadController {

	/*
	 * 处理文件上传
	 */
	@RequestMapping("/fileUploadController")
	public Map<String, Object> fileUpload(MultipartFile filename)throws Exception{
		System.out.println(filename.getOriginalFilename());//文件名显示
		filename.transferTo(new File("e:/"+filename.getOriginalFilename()));//文件保存
		Map<String, Object> map = new HashMap<>();
		map.put("msg", "ok");
		return map;
	}
}

启动类省略

文件上传大小上限修改–配置文件

在这里插入图片描述

application.properties下写
1.单个上传文件的大小
2.一次请求上传文件的总容量

   spring.http.multipart.maxFileSize=200MB
   
   spring.http.multipart.maxRequestSize=200MB

我们也可以设置路径配合使用

filePath=F:/test/
控制层用 下面接受
@Value("${filePath}")
private String filePath;

复杂一些的文件上传(也是演示用)

@Controller
public class FileUploadController {

    @Value("${filePath}")
    private String filePath;

    @GetMapping("/upload")
    public String uploading() {
        //跳转到 templates 目录下的 uploading.html
        return "uploading";
    }

    //处理文件上传
    @PostMapping("/uploading")
    public @ResponseBody String uploading(@RequestParam("file") MultipartFile file,
            HttpServletRequest request) {
        try {
            uploadFile(file.getBytes(), filePath, file.getOriginalFilename());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件上传失败!");
            return "uploading failure";
        }
        System.out.println("文件上传成功!");
        return "uploading success"; //返回json 文字信息
    }



    public void  uploadFile(byte[] file, String filePath, String fileName) throws Exception { 
        File targetFile = new File(filePath);  
        if(!targetFile.exists()){    
            targetFile.mkdirs();    
        }       
        FileOutputStream out = new FileOutputStream(filePath+fileName);
        out.write(file);
        out.flush();
        out.close();
    }

}

注:上述的代码只是一个示例,实际的情况下请注意异常的处理!上述的流关闭理应放在finally中,实际为了方便才如此的编写。

邮件发送

SpringBoot这块已经集成了mail邮件发送的功能,我们引入相关架包之后,只需使用JavaMailSender这个类中的send方法即可完成邮件的发送。如果还想发送静态资源和附件的邮件,在JavaMailSender这个类中的方法也可以实现。如果想使用自定义的模板内容发送的话,则需要使用TemplateEngine 该类中的方法。

在我们使用邮件发送的时候,这四样最为重要,发件人、收件人、发送主题和发送的消息。因此我们可以根据这四样来创建一个简答的邮件实体类,方便进行相关的业务处理。

实体类代码
代码如下:

public class Mail {

/** 发送者*/
private String sender;

/** 接受者  */
private String receiver;

/** 主题 */
private String subject;

/** 发送 消息*/
private String text;

//getter 和 setter 略

}
这里我们还是定义接口来进行邮件的发送,我们发送邮件的时候依旧只需要知道发件人、收件人、发送主题和发送的消息这四点就可以了,其余的可以在代码中完成。这里我们就简单的定义几个接口,用于实现上述的要求

控制层代码:

代码如下:

@RestController
@RequestMapping("/api/mail")
public class MailController {
    private static Logger LOG=LoggerFactory.getLogger(MailController.class);

    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private TemplateEngine templateEngine;
    /*
     * 发送普通邮件
     */
    @PostMapping("/sendMail")
    public String sendMail(@RequestBody Mail mail) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(mail.getSender());
        message.setTo(mail.getReceiver());
        message.setSubject(mail.getSubject());
        message.setText(mail.getText());
        mailSender.send(message);
        LOG.info("发送成功!");
        return "发送成功!";
    }


    /*
     *  发送附件
     */
    @PostMapping("/sendAttachments")
    public String sendAttachmentsMail(@RequestBody Mail mail) throws MessagingException  {

        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(mail.getSender());
        helper.setTo(mail.getReceiver());
        helper.setSubject(mail.getSubject());
        helper.setText(mail.getText());
        FileSystemResource file = new FileSystemResource(new File("1.png"));
        helper.addAttachment("附件.jpg", file);
        mailSender.send(mimeMessage);
        return "发送成功!";

    }

    /*
     * 发送文件
     */
    @PostMapping("/sendInlineMail")
    public String sendInlineMail(@RequestBody Mail mail) throws Exception {

        MimeMessage mimeMessage = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(mail.getSender());
        helper.setTo(mail.getReceiver());
        helper.setSubject(mail.getSubject());
        //这里的text 是html
        helper.setText(mail.getText(), true);
        FileSystemResource file = new FileSystemResource(new File("1.png"));
        helper.addInline("文件", file);
        mailSender.send(mimeMessage);
        return "发送成功!";
    }


    /*
     * 发送模板
     */
    @PostMapping("/sendTemplateMail")
    public void sendTemplateMail(@RequestBody Mail mail) throws Exception {

        MimeMessage mimeMessage = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(mail.getSender());
        helper.setTo(mail.getReceiver());
        helper.setSubject(mail.getSubject());

        //创建邮件正文
        Context context = new Context();
        context.setVariable("id", "1");
        context.setVariable("name", "xuwujing");
        String emailContent = templateEngine.process("emailTemplate", context);
        helper.setText(emailContent, true);
        mailSender.send(mimeMessage);
    }

}

App 入口
和普通的SpringBoot项目基本一样。

代码如下:

@SpringBootApplication
public class MailApp
{
public static void main( String[] args )
{
SpringApplication.run(MailApp.class, args);
System.out.println(“MailApp启动成功!”);
}
}
功能测试
我们成功启动该程序之后,我们使用Postman工具进行测试。

使用POST方式进行请求

POST http://localhost:8182/api/mail/sendMail

Body参数为:

{
"sender":"[email protected]",
"receiver":"[email protected]",
"subject":"测试主题",
"text":"测试消息"
}

注:当然这里的参数填写你自己的邮箱即可!

返回参数为:

发送成功!

示例图:

可以看到邮件已经发送成功了!

在这里插入图片描述

发布了162 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39088066/article/details/103543683
今日推荐