SpringBoot Web开发、静态资源的访问、自动返回json格式数据、捕获全局异常、使用模板引擎渲染Web页面、SpringBoot中简单的使用FreeMarker、JSP-day02

5. SpringBoot Web开发

5.1 静态资源的访问

  • 在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
  • Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
    • /static
    • /public
    • /resources
    • /META-INF/resources
  • SpringBoot在jar类型项目中也可以开发War(web)项目
  • 如访问静态图片资源:在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/images/1.jpg。如能显示图片,配置成功。
    在这里插入图片描述

5.2 自动返回json格式数据

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

package com.it.web.controller;

import com.it.model.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName HelloController
 * @Author shuyy
 * @Date 2020/10/25
 **/
@RestController//相当于声明Controller,并提供restful风格
//@EnableAutoConfiguration//自动配置不需要写Spring配置文件
public class UserController {
    
    

    @RequestMapping("user/{id}")//映射路径【restful风格】
    @ResponseBody//响应体
    public User userInfo(@PathVariable Integer id){
    
    

        User user = new User("shu","123");
        user.setId(id);
        return user;
    }

    @RequestMapping("login")//映射路径
    @ResponseBody//响应体-自动返回json格式的字符串
    public Map<String,Object> login(String username,String password){
    
    
        Map<String,Object> map = new HashMap<String,Object>();
        //模拟从数据库查数据
        if ("shu".equals(username) && "123".equals(password)){
    
    
            map.put("success",1);
            map.put("errMsg","");
        }else {
    
    
            map.put("success",0);
            map.put("errMsg","用户名或密码不正确");
        }
        return map;
    }

    /*public static void main(String[] args) {
        //启动程序(这里只是测试一下,以后一般不这样启动)
        SpringApplication.run(HelloController.class,args);
    }*/
}

5.3 捕获全局异常

  • @ExceptionHandler:表示拦截异常
  • @ControllerAdvice:controller 的一个辅助类,最常用的就是作为全局异常处理的切面类
  • @ResponseBody:进行 json 转换

在这里插入图片描述

package com.it.web.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/*
 * @Author ShuYY
 * @Description 用于捕获全局异常
 * @Date 2020/10/25
 **/
@ControllerAdvice//切面
public class GlobalExceptionHandler {
    
    

    @ExceptionHandler(RuntimeException.class)//捕获运行时异常
    @ResponseBody//返回json
    public Map<String,Object> exceptionHandler(){
    
    //异常处理方法,自定义
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("errorCode", "101");
        map.put("errorMsg", "系统错误!");
        return map;
    }

}

  • 配置注解扫描包
    在这里插入图片描述
  • 效果
    在这里插入图片描述
  • 之前未捕获的报错
    在这里插入图片描述

5.4 渲染Web页面

模板引擎

  • 在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。

  • Spring Boot提供了默认配置的模板引擎主要有以下几种:

    • Thymeleaf
    • FreeMarker
    • Velocity
    • Groovy
    • Mustache
  • Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置

  • 当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。

5.5 SpringBoot中使用FreeMarker

第一步:引入freeMarker的依赖包

在这里插入图片描述

<!--引入freeMarker的依赖包-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>

第二步:写个控制器,并返回一些数据

  1. 写个Student实体,提供无参、有参构造、get/set、toString在这里插入图片描述
  2. 写个StudentController
    在这里插入图片描述
package com.it.web.controller;

import com.it.model.Student;
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;

/**
 * @ClassName StudentController
 * @Author shuyy
 * @Date 2020/10/25
 **/
/*
    @RestController 一般用于写API,给移动客户端提供数据,一般返回的是json格式的数据
    @Controller 一般写后端页面时使用
*/
@Controller//这里访问freeMarker模板,不使用@RestController
@RequestMapping("stu")
public class StudentController {
    
    

    @RequestMapping("list")
    public String list(Model model){
    
    
        //在Spring提供的model接口中存数据,在页面中取出
        model.addAttribute("username","shuyy");
        model.addAttribute("age",18);
        List<Student> stuList = new ArrayList<>();
        stuList.add(new Student(1,"shu1","男"));
        stuList.add(new Student(2,"shu2","男"));
        stuList.add(new Student(3,"shu3","男"));
        model.addAttribute("stuList",stuList);
        return "stu/list";
    }
}

第三步:创建.ftl模板文件

  • 在src/main/resources/创建一个templates文件夹,再在下面创建stu文件夹,创建个list.html,直接重命名为list.ftl
    在这里插入图片描述
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
欢迎${username}登录<br>
<#if (age < 18)>未成年人请在家长的陪同下访问
<#elseif (age >= 18 && sex == "男")>欢迎帅哥访问
<#else>欢迎美女访问
</#if>
<br>
<table border="1">
    <tr>
        <td>ID</td>
        <td>姓名</td>
        <td>性别</td>
    </tr>
    <#list stuList as stu>
        <tr>
            <td>${stu.id}</td>
            <td>${stu.username}</td>
            <td>${stu.sex}</td>
        </tr>
    </#list>
</table>
</body>
</html>
  • 稍微修改一下,根据id倒序输出(?sort_by(“id”)?reverse)
    在这里插入图片描述

在这里插入图片描述

5.6 SpringBoot中使用jsp

第一步:创建Mavenweb项目

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

第二步:pom中引入依赖

在这里插入图片描述

<parent>
    <!--SpringBoot的父依赖-->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
  </parent>

  <dependencies>
    <!--SpringBoot配置web依赖的核心组件-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <!--jsp解析-->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

第三步:src/main/resources下写个application.properties

  • application.properties文件名固定,位置固定
    在这里插入图片描述
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

server.port=8888
server.context-path=/test

第四步:写个简单的控制器

在这里插入图片描述

  • 随便写点
    在这里插入图片描述
  • 效果(端口号和项目名都是我们所修改的内容)
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43414199/article/details/109276143