SpringBoot Web开发笔记(1)
程序员文章站
2022-06-12 19:18:43
...
SpringBoot Web开发笔记(1)
关于自动装配
springboot到底帮助我们配置了什么?我们能不能进行修改?能修改哪些东西?能不能扩展?
-
xxxxAutoConfiguration…向容器中自动配置组件
-
xxxxProperties:自动配置类,装配配置文件中自定义的一些内容
要解决的问题:
- 导入静态资源…
- 首页
- jsp,模板引擎thymeleaf
- 装配扩展springmvc
- 增删改查
- 拦截器
- 国际化!
导入静态资源
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
}
什么是webjars?
总结:
-
在springboot,我们可以使用下面的方式处理静态资源
-
webjars -------> localhost:8080/webjars/
-
public,static,/**,resourse ------> localhost:8080/
-
-
优先级:resources>static(默认)>public
首页如何定制
-
首页图标设置
-
实现原理
-
实现方法
-
第一步添加favicon.ico(首页图标)
-
第二步
-
-
-
首页配置:注意点,所有页面的静态资源都需要thymeleaf接管;@{}
-
页面国际化
模板引擎Thymeleaf
结论:只需要使用thymeleaf,只需要导入对应的依赖就可以了!我们将html放在我们的templates目录下即可!
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
- 语法
- 属性优先级
装配扩展springmvc
package com.wzz.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.PrintWriter;
import java.util.Locale;
// 如果你想diy一些定制化的功能,只要写这个组件,然后将它交给springboot,springboot就会帮我们自动装配。
// 扩展springmvc dispathservlet
// 如果我们要扩展springmvc,官方建议我们这样去做!
@Configuration
//@EnableWebMvc // 会导致自己配置的springmvc失效,导入一个类:DelegatingWebMvcConfiguration:从容器中获取所有的webmvcconfig;
public class MyMvcConfig implements WebMvcConfigurer {
//视图跳转
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// System.out.println("start");
registry.addViewController("/wzz").setViewName("test");
// System.out.println("end");
}
// ViewResolver 实现了视图解析器接口的类,我们就可以把它看做视图解析器
/**
@Bean
public ViewResolver myViewResolver(){
return new MyViewResolver();
}
//自定义一个自己的视图解析器MyViewResolver
public static class MyViewResolver implements ViewResolver{
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
return null;
}
}
**/
}
总结:
在springboot中,有非常多的xxx Configuration帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了!
页面国际化
1.首页配置:
- 注意点:所有页面的静态资源都需要使用thymeleaf接管;
- url: @{}
2.页面国际化:
- 我们需要配置i18n文件
- 我们如果需要在项目中按钮自动切换,我们需要自定义一个组件LocaleResolver
- 记得将自己的组件配置到spring容器**@Bean**
- #{}
登录+拦截器
为首页配置拦截器
书写LoginHandlerInterceptor自定义拦截器,并实现 HandlerInterceptor,重写preHandle方法(登录主页之前)
public class LoginHandlerInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登录成功之后,应该有用户的session
Object loginUser = request.getSession().getAttribute("loginUser");
if (loginUser == null){
request.setAttribute("msg","没有权限,请先登录");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}else {
return true;
}
}
}
将自定义的LoginHandlerInterceptor拦截器写入到MyMvcConfig中,重写WebMvcConfigurer中的的addInterceptors方法
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).
addPathPatterns("/**").
excludePathPatterns("/index.html","/","/user/login","/css/*","/js/*","/img/*");
}
推荐阅读
-
手机web app开发笔记
-
学习 Laravel - Web 开发实战入门笔记(1)
-
[springboot 开发单体web shop] 4. Swagger生成Javadoc
-
循序渐进学.Net Core Web Api开发系列【1】:开发环境
-
Spring Cloud和Dubbo整合开发笔记(1)
-
默认文档解析--手机web app开发笔记(二)
-
Web 开发中遇到的UTF-8编码的问题总结第1/2页
-
manifest.json 解析--手机web app开发笔记(三-2)
-
Web开发要知道的三个D#1:声明式VS命令式-终身学习者-SegmentFault思否
-
[书籍精读]《移动WEB前端高级开发实践》精读笔记分享