1.SpringBoot整合Servlet

1.1 第一种方式

1.添加自定义的Servlet

@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 running ...");
        PrintWriter out = resp.getWriter();
        out.write("success ...");
        out.flush();
        out.close();
    }
}

2.在启动类中添加扫描注解

@SpringBootApplication
// 在SpringBoot 启动的时候回自动去扫描WebServlet注解
@ServletComponentScan
public class GpDblSpringbootServletApplication {

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

}

3.启动测试

在这里插入图片描述

在这里插入图片描述

第二种方式

1.创建自定义的Servlet,不需要添加@WebServlet

package com.dbl.springboot.servlet.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/25 0025 22:36
 */
public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("SecondServlet running ...");
        PrintWriter out = resp.getWriter();
        out.write("success ...");
        out.flush();
        out.close();
    }
}

2.在启动类中显示在注册

@SpringBootApplication
// 在SpringBoot 启动的时候回自动去扫描WebServlet注解
@ServletComponentScan
public class GpDblSpringbootServletApplication {

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

    @Bean
    public ServletRegistrationBean getRegistrationBean(){
        // 将要添加的servlet封装成为一个ServletRegistrationBean
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new SecondServlet());
        // 设置映射信息
        registrationBean.addUrlMappings("/second");
        return registrationBean;
    }

}

3.测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gED8pCkV-1603636992685)(img\1595487415817.png)]

在这里插入图片描述

2.SpringBoot整合Filter

2.1 第一种方式

1.直接在过滤器中添加@WebFilter注解

package com.dbl.springboot.servlet.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/26 0026 7:23
 */
@WebFilter(urlPatterns = "/first")
public class FirstFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("-----init-----");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("----------First过滤器执行之前-------");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("----------First过滤器执行之后-------");
    }

    @Override
    public void destroy() {
        System.out.println("*****destory*****");
    }
}

2.在启动器中添加@ServletCompoenentScan

在这里插入图片描述
3.测试

在这里插入图片描述
在这里插入图片描述

2.2 第二种方式

1.创建自定义的过滤器,不需要添加@WebFilter注解

package com.dbl.springboot.servlet.demo.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/26 0026 7:37
 */
public class SecondFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("-----init-----");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("----------Second过滤器执行之前-------");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("----------Second过滤器执行之后-------");
    }

    @Override
    public void destroy() {
        System.out.println("*****destory*****");
    }
}



2.在启动类中显示的注册

package com.dbl.springboot.servlet.demo;

import com.dbl.springboot.servlet.demo.filter.SecondFilter;
import com.dbl.springboot.servlet.demo.servlet.SecondServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
// 在SpringBoot 启动的时候回自动去扫描WebServlet注解
@ServletComponentScan
public class GpDblSpringbootServletApplication {

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

    @Bean
    public ServletRegistrationBean getRegistrationBean() {
        // 将要添加的servlet封装成为一个ServletRegistrationBean
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new SecondServlet());
        // 设置映射信息
        registrationBean.addUrlMappings("/second");
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean getRegistractionBean() {
        FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
        bean.addUrlPatterns("/second");
        return bean;
    }
}

3.测试

在这里插入图片描述

在这里插入图片描述

3.SpringBoot整合Listener

3.1 第一种方式

1.创建自定义的Listener

package com.dbl.springboot.servlet.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/26 0026 7:59
 */
@WebListener
public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("FirstListener:初始化了...");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("FirstListener:销毁了...");
    }
}

2.添加扫描注解
在这里插入图片描述

3.启动测试
在这里插入图片描述

3.2 第二种方式

1.创建自定义Listener

package com.dbl.springboot.servlet.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/26 0026 8:05
 */
public class SecondListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("SecondListener : 初始化了....");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("SecondListener : 销毁了....");
    }
}
 

2.显示的在启动类中注册

@Bean
    public ServletListenerRegistrationBean getListenerRegistrationBean(){
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
        return bean;
    }

3.测试
在这里插入图片描述

4.SpringBoot如何实现文件上传和下载

4.1 文件上传

1.创建提交的表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>文件上传案例</h1>
    <form action="/user/upload" method="post" enctype="multipart/form-data">
        <label>账号:</label><input type="text" name="username"><br/>
        <label>照片:</label><input type="file" name="upload"><br/>
        <input type="submit" value="提交">
    </form>
</body>
</html>

2.服务处理上传请求

package com.dbl.springboot.servlet.demo.file;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/27 0027 7:36
 */
@RestController
public class UserController {
    @RequestMapping("/user/upload")
    public String upload(MultipartFile upload, String username) throws IOException {
        System.out.println("userName:" + username + " 文件名称:" + upload.getOriginalFilename());
        upload.transferTo(new File("d:/" ,upload.getOriginalFilename()));
        return "success ...";
    }
}

3.配置相关的上传参数

spring.servlet.multipart.enabled=true 
# 设置单个文件上传的大小
spring.servlet.multipart.max-file-size=200MB
# 设置一次上传文件总的大小
spring.servlet.multipart.max-request-size=200MB

4.测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 文件下载

1.页面提供一个下载按钮

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>文件上传案例</h1>
<h2><a href="/user/download">文件下载</a></h2>
<form action="/user/upload" method="post" enctype="multipart/form-data">
    <label>账号:</label><input type="text" name="username"><br/>
    <label>照片:</label><input type="file" name="upload"><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

2.服务端处理下载请求

@RequestMapping("/user/download")
public void downloadFile(HttpServletRequest request, HttpServletResponse response){
    File file = new File("d://Hydrangeas.jpg");
    // 设置响应的头和客户端保存的文件名
    response.setCharacterEncoding("utf-8");
    response.setContentType("multipart/form-data");
    response.setHeader("Content-Disposition", "attachment;fileName=" + file.getName());
    InputStream in = null;
    ServletOutputStream out = null;
    try {
        // 文件的复制
        in = new FileInputStream(file);
        out = response.getOutputStream();
        // 循环读取
        byte[] b = new byte[1024];
        int length = 0;
        while((length = in.read(b)) > 0){
            out.write(b,0,length);
        }

    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.测试

在这里插入图片描述

5.SpringBoot整合Freemarker

在这里插入图片描述

1.添加对应的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2.添加一个自定义的控制器

package com.dbl.springboot.servlet.demo.freemarker.controller;

import com.dbl.springboot.servlet.demo.freemarker.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.List;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/28 0028 6:56
 */
@Controller("/freemarker")
public class UserController {

    @RequestMapping("/showUser")
    public String showUser(Model model) {
        List<User> list = new ArrayList<>();
        list.add(new User(1, 22, "zhangsan"));
        list.add(new User(2, 23, "lisi"));
        list.add(new User(3, 24, "wangwu"));
        model.addAttribute("list", list);
        return "user";
    }
}

3.属性文件配置

spring.freemarker.suffix=.ftl

4.模板页面

<html>
<head>
    <title>用户信息</title>
    <meta charset="UTF-8">
</head>
<body>
<table border="1" align="center" width="50%">
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    <#list list as user>
        <tr>
            <td>${user.id}</td>
            <td>${user.userName}</td>
            <td>${user.age}</td>
        </tr>
    </#list>
</table>
</body>
</html>

5.测试
在这里插入图片描述

6.SpringBoot整合Thymeleaf

1.添加相关的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.创建自定义的控制器

package com.dbl.springboot.servlet.demo.thymeleaf.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/10/28 0028 7:44
 */
@Controller("/thymeleaf")
public class UserController {
    @RequestMapping("/show")
    public String showInfo(Model model) {
        model.addAttribute("msg", "Thymeleaf Hello ... ");
        return "index";
    }
}

3.创建对应的模板页面
Thymeleaf的模板页面的后缀是.html 和我们讲的html页面的后缀是一样,但可以写标签

<!DOCTYPE html>
<html lang="en"  xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Thymeleaf整合</h1>
    <hr>
    <span th:text="${msg}"></span>
</body>
</html>

4.测试

在这里插入图片描述

9.SpringBoot中的单元测试

9.1 添加依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
</dependency>

9.2 测试代码

package com.dbl.springboot.demo.test.service;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/11/4 0004 6:33
 */
public interface IUserService {
    public String query();
}

package com.dbl.springboot.demo.test.impl;

import com.dbl.springboot.demo.test.service.IUserService;

/**
 * descrription:
 * <p>
 * Create by DbL on 2020/11/4 0004 6:33
 */
public class UserServiceImpl implements IUserService {

    @Override
    public String query() {
        return "UserService 单元测试 ... ";
    }
}

package com.dbl.springboot.demo;

import com.dbl.springboot.demo.test.service.IUserService;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class GpDblSpringbootServletApplicationTests {
    @Autowired
    private IUserService userService;

    @Test
    void contextLoads() {
        System.out.println(userService.query());
    }

    @BeforeEach
    public void testBefor(){
        System.out.println("befor ... ");
    }

    @AfterEach
    public void testAfter(){
        System.out.println("after ... ");
    }

}

9.2 单元测试

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐