Spring boot与web应用知识总结

目录

SpringBoot的核心功能

SpringBoot的配置文件

SpringBoot配置文件类型和作用

application.yml配置文件

实体类(entity)的注解。

@Data注解

@Data注解的功能:

service层的注解

@Service注解

@Autowired注解

Mapper层的注解

@Mapper注解

@Repository注解

controller层的注解

@Controller注解

@RequestMapping注解

@RequestParam注解 

@PathVariable注解

自定义异常处理

第1种:有模板引擎

第2种:没有模板引擎 

第3种:模板/静态目录种均无相应错误页面,直接响应SpringBoot默认错误页面 

自定义错误页面

自定义错误处理


目录

 

SpringBoot的核心功能

SpringBoot的配置文件

SpringBoot配置文件类型和作用

application.yml配置文件

实体类(entity)的注解。

@Data注解

@Data注解的功能:

service层的注解

@Service注解

@Autowired注解

Mapper层的注解

@Mapper注解

@Repository注解

controller层的注解

@Controller注解

@RequestMapping注解

@RequestParam注解 

@PathVariable注解

自定义异常处理

第1种:有模板引擎

第2种:没有模板引擎 

第3种:模板/静态目录种均无相应错误页面,直接响应SpringBoot默认错误页面 

自定义错误页面

自定义错误处理


SpringBoot的核心功能

  • 起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 自动配置

Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

SpringBoot的配置文件

SpringBoot配置文件类型和作用

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。

SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件

其中,application.properties文件是键值对类型的文件,之前一直在使用,所以此处不在对properties文件的格式进行阐述。除了properties文件外,SpringBoot还可以使用yml文件进行配置。
 

application.yml配置文件

YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,YML文件的扩展名可以使用.yml或者.yaml。

实体类(entity)的注解。

@Data注解

@Data注解的主要作用就是提高代码的简洁,在代码中使用这个注解,便可省去大量的get()、set()等方法,不仅提供了便利,还减少了出错的概率。如下图实体类SysUser,并没有使用get()、set()等方法。

@Data注解的功能:

  •   @Data可以为类提供读写功能,从而不用写get、set方法。
  •    会为类提供 equals()、hashCode()、toString() 方法。

service层的注解

@Service注解

作用:

  • 用于标识一个类是Spring容器中的服务组件。@Service是Spring框架中的一个注解,用于标注一个类作为服务类(Service)。
  • @Service注解用于类上,标记当前类是一个service类,该注解会将当前类自动注入到spring容器中,在调用该service的时候只需要将该类注入接口中 

@Autowired注解

作用:

  • 用于自动装配Spring容器中的Bean。
  • 在调用service类的时候,使用该注解,便可调用service。
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    // 实现UserService接口中的方法
}

Mapper层的注解

@Mapper注解

Mapper的注解就是@Mapper。

1.使用@Mapper将接口交给Spring进行管理

2.不用写Mapper映射文件(XML)

3.为这个接口生成一个实现类,让别的类进行引用

@Mapper
public interface SysUserMapper extends BaseMapper<SysUser> {

}

@Repository注解

@Repository:@Repository的作用与@Controller@Service的作用都是把对象交给Spring管理。@Repository是标注在Dao层接口上,作用是将接口的一个实现类交给Spring管理。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

controller层的注解

@Controller注解

在 Spring MVC 中,@Controller 注解用于标识一个 Java 类是一个控制器。控制器负责接收请求、处理请求,并返回响应。具体来说,使用 @Controller 注解的类将会被 Spring MVC 自动扫描,并注册为一个控制器。

@Controller 注解的作用和 @Component 注解类似,都是将一个类标记为 Spring 的组件。但是,@Controller 注解还有以下特性:

  • 自动映射 URL。@Controller 注解可以自动将请求映射到控制器的方法上。
  • 支持视图解析。@Controller 注解可以将方法的返回值解析为视图,并渲染到客户端。
@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }

}

@GetMapping("/hello")
public String hello() {
    return "hello";
}

@RequestMapping注解

从注解名称上我们可以看到,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。

SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。

@Controller
@RequestMapping("/hello")
public class TestController {

    /**
     * 此时请求的路径是/hello/test
     * @return
     */
    @RequestMapping("/test")
    public String success(){
        return "success";
    }
}

@RequestParam注解 

 @RequestParam 是Spring框架中的一个注解,用于将请求参数的值绑定到方法的参数上。它通常用于处理 HTTP 请求中的查询参数或表单参数。

@RequestParam 注解的value 属性值没有对应上jsp中name 值则会直接报400错误,因为required 属性默认为true,不写将会使用默认值。

@PathVariable注解

@PathVariable 映射 URL 绑定的占位符
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

@PathVariable(“xxx”) 绑定到操作方法的入参中。

@RequestMapping(value = "/save",method = RequestMethod.POST)
public String save(@ModelAttribute("order") Order entity
                   //跟edit对应,是否缴清,是否开发票
        , @RequestParam("isPayComplete") boolean isPayComplete
        , @RequestParam("isRequireInvoicing") boolean isRequireInvoicing
        , @RequestParam("parkingLotId") Long parkingLotId
        , @RequestParam("pricingStandardId") Long pricingStandardId
        , @RequestParam("vehicleId") Long vehicleId) throws Exception{

自定义异常处理

Spring Boot提供了默认的错误处理机制,由于弹窗信息基本使用的是WhitelabelErrorPage页面,
信息提示通常也是以英文呈现,对用户并不友好。
从出错提示中,可以发现无论发生什么错误,Spring Boot都会返回一个状态码及错误页面,如果关注源码可以知道,这些错误信息的底层原来是ErrorMvcAutoConfiguration错误自动配置类。当应用程序出现4xx或5xx之类错误是,ErrorPageCustomizer就会被激活,它主要用于定制错误处理的响应规则。

第1种:有模板引擎

  • 精确匹配error状态码,通过将错误页面命名为具体的错误状态码,例如:404.html放在引擎目录templates/error目录中,当发生对应状态码错误时,就可以响应对应的模板页
  • 模糊匹配error状态码,通过定义4xx或5xx,匹配对应类型的所有错误此种方式,精确匹配优先于模糊匹配

 timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验错误

第2种:没有模板引擎 

此种方式,模板引擎无法找到对应的错误页面

  • 将至静态资源目录中的error目录中找相应页

第3种:模板/静态目录种均无相应错误页面,直接响应SpringBoot
默认错误页面 

如果BasicErrorController的errorhtml方法没有找到对应的view对象,将前往error定义在
ErrorMvcAutoConfiguation的defaultErrorView中

自定义错误页面

  • 在resources/templates中添加首页的index.html页面
  • 在源码文件夹Application类的同目录中添加web文件夹,并创建IndexController
  • 使用@Controller注解,完整名称org.springframework.stereotype.Controller

Annotation(注解)是Java的一种特殊注释机制,JVM可通过反射读取注解内容,从而根据
注解内容进行特定操作。
注解以@开头常见注解如@Override,给toString等方法注解表示重写,这类的注解仅用于开发者,编
译器处理完就会被去掉
该注解用于定义控制器类,在spring项目中由控制器负责将用户发来的请求转发到对应的
服务接口(Service层)

  • 添加一个index方法,为index页面提供页面数据(此处无)
  • 为index方法添加@GetMapping("/")注解,该注解提供路由信息,负责URL到Controller中的
  • 具体方法的映射;也可以通过WebMvcConfigurer进行视图和控制器的映射实现页面映射
  • 在templates中创建error文件夹,并创建404.html和500.html两个页面
  • 运行测试,并在index方法中主动制造错误,测试500页面,访问不存在的url,测试404页面
packagecn.edu.lzzy.config;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.ViewControllerRegistry;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
*
springmvc自定义配置
*
/
@Configuration
publicclassMvcConfigureimplementsWebMvcConfigurer{
publicvoidaddViewControllers(ViewControllerRegistryregistry){
//这样就不需要为每一个页面编写Controller代码了,对于纯渲染的页面可以直接这样定义就可
以
registry.addViewController("/home").setViewName("index");//forWard实现
}
}
<!--templates/index.html-->
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>主页</title>
</head>
<body>
<h1>
我是站点首页<br>
内容正在建设中,请耐心等待
</h1>
</body>
</html>

<!--templates/error/404.html-->

<!DOCTYPEhtml>
<htmllang="en"xmlns:th="http://www.thymeleaf.org">
<head></head>
<body>
<divclass="container">
<divclass="starter-template">
<h1>404——找不到对象</h1>
<divth:inline="text">你好,'[[${#httpServletRequest.remoteUser}]]'你访问的
页面不存在</div>
</div>
</div>
</body>
</html>

自定义错误处理

  1. 在web同目录下添加handler文件夹
  2. 添加两个自定义异常类,NotFoundException和BusinessException,代表资源不存在和业异常
  3. 添加一个统一的异常处理类PracticeExceptionHandler
  4. 使用@ControllerAdvice注解该类,该注解将所有Controller作为切面,利用切面技术为Controller扩展功能
  5. 添加专用于业务异常处理的异常处理方法,并使用ExceptionHandler注解,参数为自定义的业务异常类
  6. 添加通用的异常处理方法,并使用ExceptionHandler注解,参数为Exception类

另一个@RestControllerAdvice注解将所有的RestController作为切面,为RESTfulApi扩展功能。
除全局异常处理外,还提供全局数据绑定功能:
全局数据绑定:@ModelAttribute,可对所有Controller的Model添加全局属性,示例如下:
①全局控制器添加全局数据

@ControllerAdvice
publicclassGlobalController{
@ModelAttribute
publicvoidaddGlobalData(Modelmodel){
model.addAttribute("contact","lzzy@163.com");
model.addAttribute("homeUrl","https://www.baidu.com")
}
}

②在控制器类中无需绑定数据,如:

@Controller
publicclassHomeController{
@GetMapping("/")
publicStringindex(){
return
"index"
}
}

③在index.html中使用Thymeleaf绑定全局数据

<!DOCTYPEhtml>
<html>
<head>
<title>主页</title>
</head>
<body>
<h1>
<spanth:text="'欢迎访问必应搜索引擎:'+${homeUrl}+'惊不惊喜,意不意
外'"></span><br>
<spanth:text="'联系偶们:'+${contact}"></span>
</h1>
</body>
</html>
  • 在error/error.html页面中显示异常信息,以标题显示业务异常,其他详细异常信息以注释的形式保存,在源代码视图中查看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值