spring boot web 开发
1,静态资源导入问题
在springboot中,可以使用一下几种方式处理静态资源
-
webjars localhost:8080/webjars/
-
public,static,resources,/* localhost:8080/
优先级:resources>static(默认)>public
在template目录下的所有页面,只能通过controller来访问,相当于原来的MATE-INF,但template目录下访问页面需要导入模板引擎,thymeleaf的依赖
2,首页和图标定制
在静态资源目录下找一个叫index.html的页面映射到首页
3,thymeleaf模板的使用
1,导入thymeleaf的pom依赖(需使用2.X以上的版本)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2,html页面导入约束
<html lang="en" xmlns:th="http://www.thymeleaf.org">
3,国际化
1.i18n文件配置


2.如果需要在项目中进行中/英文自动切换,需要自定义一个组件LocaleResolver
package com.springboot.config;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocalResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String language = request.getParameter("l");
Locale locale=Locale.getDefault();
System.out.println("==========>"+language);
if (!StringUtils.isEmpty(language)){
String[] split = language.split("_");
locale=new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
index.jsp
<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>
3.将自己写的组件加入到spring容器中 @Bean
package com.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfig implements WebMvcConfigurer {
//视图解析器配置
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
}
//国际化
@Bean
public LocaleResolver localeResolver(){
return new MyLocalResolver();
}
}
4,拦截器
1.自定义拦截器,实现HandlerInterceptor接口
package com.springboot.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginHandlerIntercepetor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginUser = request.getSession().getAttribute("loginUser");
if (loginUser==null){
request.setAttribute("msg","NO PRIVEW,LOGIN!");
request.getRequestDispatcher("index.html").forward(request,response);
return false;
}else {
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2.在MvcConfig配置类中配置拦截器及配置拦截路径和方向路径
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerIntercepetor()).addPathPatterns("/**")
.excludePathPatterns("/index.html","/","/user/login","/css/*","/img/**","/js/**");
}
5,列表展示
1.提取公共页面(常用)
-
th:fragment="sidebar"
-
th:insert="~{commons/commons::topbar}"
-
如果要传递参数,用()直接传参,接受判断即可
th:insert="~{commons/commons::sidebar(active='list.html')}"
2,列表页面数据循环展示
<table class="table table-striped table-sm">
<thead>
<tr>
<th>id</th>
<th>lastName</th>
<th>email</th>
<th>gender</th>
<th>department</th>
<th>birth</th>
<th>操作</th>
</tr>
</thead>
<tr th:each="emp:${emps}">
<td th:text="${emp.getId()}"></td>
<td th:text="${emp.getLastName()}"></td>
<td th:text="${emp.getEmail()}"></td>
<td th:text="${emp.getGender()==0?'女':'男'}"></td>
<td th:text="${emp.getDepartment()}"></td>
<td th:text="${#dates.format(emp.getBirth(),'yyyy-MM-dd HH:mm:ss')}"></td>
<td>
<button class="btn btn-sm btn-primary">编辑</button>
<button class="btn btn-sm btn-danger">删除</button>
</td>
</tr>
</table>
浙公网安备 33010602011771号