SpringBoot框架02(整合Servlet、Filter、Listener、访问静态资源、文件上传、整合JSP、整合FreeMarker)

一、使用SpringBoot编写 HelloWorld

1.创建项目

为了加深对springboot项目结构的印象,本次采用maven创建springboot项目的方式。
新建一个empty project,然后创建一个新的module
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.修改pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qt</groupId>
    <artifactId>springbootHelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--继承所有springboot的父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.7.RELEASE</version>
    </parent>
    <!--web启动器依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <!--添加打包插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.修改tomcat端口

在resource的目录下新建一个application.yml的文件,并配置tomcat端口号
在这里插入图片描述

4.创建启动类

在这里插入图片描述

/**
 * 启动类
 */
@SpringBootApplication
public class SpringBootHelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootHelloWorldApplication.class,args);
    }
}

5.创建Controller

/**
 * 处理请求的Controller
 */
@RestController //@Controller+@ResponsBody 直接返回json字符串,不作页面跳转
public class HelloWorldController {
    @RequestMapping("helloWorld")
    public String showHelloWorld(){
        return "HelloWorld";
    }
}

运行启动类,访问helloWorld请求
在这里插入图片描述

6.Spring Boot 在 Controller 中常用注解

  1. @RestController
    @RestController 相当于@Controller+@ResponseBody 注解
    如果使用@RestController 注解 Controller 中的方法无法返回页面,相当于在方法上面自动 加 了 @ResponseBody 注 解 , 所 以 没 办 法 跳 转 并 传 输 数 据 到 另 一 个 页 面 , 所 以InternalResourceViewResolver 也不起作用,返回的内容就是 Return 里的内容。
  2. @GetMapping
    @GetMapping 注解是@RequestMapping(method = RequestMethod.GET)的缩写。即该注解只处理get请求
  3. @PostMapping
    @PostMapping 注解是@RequestMapping(method = RequestMethod.POST)的缩写。即该注解只处理post请求
  4. @PutMapping
    @PutMapping 注解是@RequestMapping(method = RequestMethod.PUT)的缩写。即该注解只处理put请求
  5. @DeleteMapping
    @DeleteMapping 注解是@RequestMapping(method = RequestMethod.DELETE)的缩写。即该注解只处理delete请求

二、Spring Boot 整合 Web 层技术

1.整合 Servlet

[1]整合 Servlet 方式一
  • 创建servlet
/**
 * 整合Servlet方式一
 */
@WebServlet(name = "firstServlet",urlPatterns = "/first")
public class FirstServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.getWriter().print("FirstServlet...");
    }
}
  • 给启动类加注解
@SpringBootApplication
@ServletComponentScan //在springboot启动时会扫描@WebServlet注解,并将该类实例化
public class SpringbootwebApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootwebApplication.class, args);
    }
}

在这里插入图片描述

[2]整合servlet方式二
  • 创建servlet
/**
 * 整合方式二
 */
public class SecondServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.getWriter().print("SecondServlet...");
    }
}
  • 创建servlet配置类
@Configuration
public class ServletConfig {

    /**
     * 完成servlet组件的注册
     */
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
        bean.addUrlMappings("/second");//给该bean增加url
        return bean;
    }
}

该类也可以防止启动类中
在这里插入图片描述
若servlet数量较多,则推荐使用方式一

2.整合Filter

[1]整合Filter方式一

通过注解扫描完成组件注册

  • 创建filter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 整合 Filter 方式一
 */
//@WebFilter(filterName = "FirstFilter",urlPatterns ={"*.do","*.jsp"})
@WebFilter(filterName = "FirstFilter",urlPatterns = "/first")//拦截的是first请求
public class FirstFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入First Filter");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("离开First Filter");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }
}

firstservlet中只做一件事:打印FirstServlet…

  • 修改启动类
@SpringBootApplication
@ServletComponentScan //在springboot启动时会扫描@WebServlet注解,并将该类实例化。filter是servlet的一个子技术,因此可以扫描@WebFilter
public class SpringbootwebApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootwebApplication.class, args);
    }
}

运行后访问first
在这里插入图片描述

[2]整合Filter方式二

通过方法完成 Filter 组件注册

  • 创建 Filter
/**
 * 整合Filter方式二
 */
public class SecondFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入Second Filter");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("离开Second Filter");
    }

    @Override
    public void destroy() {

    }
}
  • 创建 Filter 配置类
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean(){
        FilterRegistrationBean bean=new FilterRegistrationBean(new SecondFilter());
        // bean.addUrlPatterns(new String[]{"*.do","*.jsp"});
        bean.addUrlPatterns("/second");
        return bean;
    }
}

启动项目后,访问second
在这里插入图片描述

3.整合Listener

[1]整合方式一

通过注解扫描完成 Listener 组件注册

  • 编写 Listener
/**
 * 整合Listener
 */
@WebListener
public class FirstListiner implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent event){
        System.out.println("Listener....destory....");
    }
    public void contextInitialized(ServletContextEvent event){
        System.out.println("Listener....init.....");
    }
}

  • 修改启动类,给启动类加上@ServletComponentScan注解
@SpringBootApplication
@ServletComponentScan //在springboot启动时会扫描@WebServlet,@WebFilter,@WebListener注解,并将该类实例化。filter是servlet的一个子技术,因此可以扫描@WebFilter
public class SpringbootwebApplication {

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

}

在这里插入图片描述

[2]整合方式二

通过方法完成 Listener 组件注册

  • 编写Listener类
/**
 * 整合方式二
 */
public class SecondListener implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent event){
        System.out.println("SecondListener....destory....");
    }
    public void contextInitialized(ServletContextEvent event){
        System.out.println("SecondListener....init.....");
    }
}

  • 编写配置类
/**
 * Listener配置类
 */
@Configuration
public class ListenerConfig {
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        ServletListenerRegistrationBean bean = new
                ServletListenerRegistrationBean(new SecondListener());
        return bean;
    }
}

在这里插入图片描述

三、Spring Boot 访问静态资源

在 SpringBoot 项目中没有我们之前常规 web 开发的WebContent(WebApp),它只有src 目录。在 src/main/resources 下面有两个文件夹,static 和 templates。SpringBoot 默认在 static目录中存放静态页面,而 templates 中放动态页面。

1.static 目录

Spring Boot 通过 classpath/static 目录访问静态资源。注意存放静态资源的目录名称是 static。如HTML、CSS、JS、image等。
SpringBoot中默认的静态资源目录有四个,当然也可以自己配置。

2.templates 目录

在 Spring Boot 中不推荐使用 jsp 作为视图层技术,而是默认使用 Thymeleaf 来做动态页面。Templates 目录这是存放 Thymeleaf 的页面。

3.静态资源存放其他位置

[1]Spring Boot 访问静态资源的位置

classpath:/META‐INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
而且访问的优先级为从上至下。
把静态文件放在resources的META‐INF/resources/、resources/、static/、public/目录下都可以被访问到。
在这里插入图片描述
例如

@Controller
public class PageController {
    @RequestMapping("show")
    public String showPage(){
        return "index.html";
    }
}

项目启动后,访问localhost:8080/show,如果index.html在上述四个默认位置之一,都可以被访问到。

[2]自定义静态资源位置

在application.properties文件中自定义静态资源位置

spring.resources.static-locations=classpath:/resources下目录1/,classpath:/resources下目录2/

多个静态资源目录可以用逗号隔开。
注意:一旦配置了静态资源位置,默认的4个静态资源位置都会失效。

四、Spring Boot 文件上传

1.创建项目

用idea的手脚架工具创建的一个springboot项目,依赖了Spring Web
在这里插入图片描述

2.编写上传页面

<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="fileupload" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="提交">
</form>
</body>
</html>

3.编写 Controller

@RestController
public class FileUploadController {
	 /**
     * 文件上传
     */
    @PostMapping("fileupload")
    public String fileupload(MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());
        file.transferTo(new File("e:/"+file.getOriginalFilename()));
        return "上传成功";
    }
}

具体的Controller的编写和springMVC中的相同。
注意:参数(MultipartFile 参数名)。参数名要和前端页面中file的name属性一致。

4.修改上传文件大小

spring boot 中默认单个上传文件的大小为1M,可以在配置appliaction文件中修改.

#配置单个上传文件的大小的限制
spring.servlet.multipart.max-file-size=2MB
#配置在一次请求中上传文件的总容量的限制
spring.servlet.multipart.max-request-size=20MB

五、Spring Boot 整合视图层技术

1.Spring Boot 整合 JSP 技术

在springboot项目中,是不推荐使用jsp的,但是支持jsp。

[1]创建项目

在这里插入图片描述

[2]修改 POM 文件,添加 JSP 引擎与 JSTL 标签库

springboot内嵌了tomcat服务器,但是这个内嵌的服务器中没有jsp引擎。因此我们需要在pom文件中添加jsp引擎的依赖。

	 <!--添加jsp引擎,springboot中内置的tomcat没有此依赖-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <!--添加JSTL坐标依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
[3]创建 webapp 目录

在main下创建一个名为webapp的目录
在这里插入图片描述

[4]标记为 web 目录

在这里插入图片描述
配置完成后,若可以在webapp目录下出现新建jsp文件的选项,则配置成功
在这里插入图片描述

[5]创建 JSP
<%@ page contentType="text/html;charset=UTF-8"
language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>Hello JSP</h2>
</body>
</html>
[6]修改配置文件,配置视图解析器
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
[7]创建 Controller
/**
* 页面跳转 Controller
*/
@Controller
public class PageController {
/**
* 页面跳转
*/
@GetMapping("/{page}")
public String getPaht(@PathVariable String page){
return page;
}
}

如果在 IDEA 中项目结构为聚合工程。那么在运行 jsp 是需要指定路径。如果项目结构为独立项目则不需要。
在这里插入图片描述

2.Spring Boot整合freemaker

[1]创建项目

在这里插入图片描述

[2]修改pom文件,添加freemarker启动器
	<!--添加freemarker启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
[3]创建 Users 实体
public class Users {
    private String username;
    private String usersex;
    private String userage;

    public Users(String username, String usersex, String userage) {
        this.username = username;
        this.usersex = usersex;
        this.userage = userage;
    }

    public Users() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsersex() {
        return usersex;
    }

    public void setUsersex(String usersex) {
        this.usersex = usersex;
    }

    public String getUserage() {
        return userage;
    }

    public void setUserage(String userage) {
        this.userage = userage;
    }
}

[4]创建Controller类
@Controller
public class UserController {
@GetMapping("showUsers")
    public String showUsers(Model model){
    List<Users> list = new ArrayList<>();
    list.add(new Users("admin","F","32"));
    list.add(new Users("Lisi","M","23"));
    list.add(new Users("xiaoli","F","23"));
    model.addAttribute("list",list);
    return "userList";
}
}

[5]创建视图

创建一个后缀名为.ftl的文件,也可以先创建html文件,页面写完后再把后缀名改为.flt

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="1" align="center" width="50%">
    <tr>
        <th>Name</th>
        <th>Sex</th>
        <th>Age</th>
    </tr>
    <#list list as user>
    <tr>
        <td>${user.username}</td>
        <td>${user.usersex}</td>
        <td>${user.userage}</td>
    </tr>
    </#list>
</table>
</body>
</html>
[6]修改配置文件添加后缀
spring.freemarker.suffix=.ftl
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值