新建Module
导入文件
将静态文件 css
js
image
放到 resources/static
下
将模板文件 main
bill
provider
user
放到 resources/templates
下
创建控制层
com.iris.springboot.controller.ProviderController.java
package com.iris.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/*
* 供应商的控制层
* */
@Controller
public class ProviderController {
//@RequestMapping(value="/providers",method = RequestMethod.GET) //与下面注解相同
@GetMapping("/providers")
public String list(){
return "provider/list";
}
}
关闭缓存,开启热部署
导入热部署的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
修改 resources/application.properties
spring.thymeleaf.cache=false
Thymeleaf 修改资源路径
导入thymeleaf 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
更改 /resources/templates/provider/list.html
代码
对比使用Thymeleaf 使用前后,重启服务器访问页面查看源代码之间的区别
使用webjars 修改 js 路径
导入 webjars 依赖
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
声明公共代码片段
在replaces/templates/main/public.html
中声明,并且在 replaces/templates/provider/list.html
使用 Thymeleaf 导入 简化代码
Thymeleaf 引入公共片段时传入参数
springbootMVC 自定义首页配置
login.html
首页目前的位置 在 resources/templates/main/login.html
创建 com.iris.springboot.config/MySpringConfigure.java
package com.iris.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MySpringMvcConfigure {
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer(){
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("main/login");
registry.addViewController("/index.html").setViewName("main/login");
}
};
}
}
重启服务器 浏览器访问首页
http://localhost:8080
或者
http://localhost:8080/index.html
Springboot 国际化
配置国际化配置文件,新建resource/i18n
文件夹
中文的
再来一个英文的
使用Resource Bundle
配置 配置文件内容
这样配置,三个配置文件都配置好了
这5个 Key 对于首页.html 中的位置
在 resources/application.properties
配置
spring.messages.basename=i18n.login
resources/main/login.html
首页进行更改
重启服务器,访问
默认是中文显示,是因为是根据本地的区域时间显示的
切换本地英文访问
自定义区域解析器 实现中英文切换
首页代码 使用Thymeleaf 进行更改
<div style="margin-left: 100px;">
<a href="#" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a href="#" th:href="@{/index.html(l='en_US')}">English</a>
</div>
新建 com.iris.springboot.component.MyLocaleResolver.java
区域解析器
package com.iris.springboot.component;
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 MyLocaleResolver implements LocaleResolver {
//解析区域信息
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取自定义请求头信息
String l = request.getParameter("l");
//获取系统默认的区域信息
Locale locale = Locale.getDefault();
if(!StringUtils.isEmpty(l)){
String[] split = l.split("_");
//接收第一个参数为源代码,第二个为国家代码
locale = new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
添加 com.iris.springboot.config.MySpringMvcConfigure.java
中
//区域解析器
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
重启服务器
登录成功,跳转主页
对 main/login.html
登录页面进行修改
创建控制层 com.iris.springboot.controller.LoginController.java
package com.iris.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.Map;
@Controller
public class LoginController {
@PostMapping("/login")
public String login(String username, String password, Map<String, Object> map){
//判断用户名不为空,并且密码为123,登录成功
if(!StringUtils.isEmpty(username)&& "123".equals(password)){
//登录成功
return "main/index";
}
//登录失败
map.put("msg","用户名或密码错误");
return "main/login";
}
}
重定向:redirect
可以重定向到任意一个请求中(包括其他项目),地址栏改变
将上述代码更改一下
自定义拦截器
新建 com.iris.springboot.interceptor.LoginHandlerInterceptor.java
package com.iris.springboot.interceptor;
/*
* 登录拦截器
* */
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginHandlerInterceptor implements HandlerInterceptor {
//调用目标方法之前被拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginUser = request.getSession().getAttribute("loginUser");
if(loginUser != null){
//已经登录过,方形
return true;
}
request.setAttribute("msg","没有权限,请先登录!!");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}
}
控制层需要 改动一丢丢
开发主页和退出系统
公共模板 main/public
中退出进行修改
在控制层com.iris.springboot.controller.LoginController.java
增加一个退出方法
package com.iris.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import javax.servlet.http.HttpSession;
import java.util.Map;
@Controller
public class LoginController {
@GetMapping("/logout")
public String Logout(HttpSession session){
//1. 清空session中的用户信息
session.removeAttribute("loginUser");
//2. 再讲session进行注销
session.invalidate();
//使用重定向,返回登录页面
return "redirect:/index.html";
}
}
开发供应商模块–基于Restful
更改控制层 com.iris.springboot.controller.ProviderController.java
package com.iris.springboot.controller;
import com.iris.springboot.dao.ProviderDao;
import com.iris.springboot.entities.Provider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.Collection;
import java.util.Map;
/*
* 供应商的控制层
* */
@Controller
public class ProviderController {
@Autowired
ProviderDao providerDao;
//@RequestMapping(value="/providers",method = RequestMethod.GET) //与下面注解相同
@GetMapping("/providers")
public String list(Map<String,Object> map){
Collection<Provider> providers = providerDao.getAll();
map.put("providers",providers);
//classpath:/templates/
//classpath:/templates/provder/list.html
return "provider/list";
}
}
供应商详情页
增加 com.iris.springboot.controller.ProviderController.java
@GetMapping("/provider/{pid}")
public String view(@PathVariable("pid") Integer pid,Map<String, Object> map){
logger.info("查询" + pid + "的供应商详细信息");
Provider provider = providerDao.getProvider(pid);
map.put("provider",provider);
return "provider/view";
}
查询窗口回显
增加com.iris.springboot.controller.ProviderController.java
代码
修改 供应商列表页面 provider/list.html
开发修改页面
回显
保存功能
继续修改public/update.html
中代码
在com.iris.springboot.controller.ProviderController.java
添加更新数据的方法
//修改供应商信息
@PutMapping("/provider")
public String update(Provider provider){
logger.info("更新供应商信息" + provider);
//更新操作
providerDao.save(provider);
return "redirect:/providers";
}
添加供应商
在 com.iris.springboot.controller.ProviderController.java
//添加供应商
@GetMapping("/provider")
public String toAddPage(){
return "provider/add";
}
com.iris.springboot.controller.ProviderController.java
添加新增数据保存方法
//添加数据保存
@PostMapping("/provider")
public String Add(Provider provider){
logger.info("供应商数据" + provider );
//保存数据操作
providerDao.save(provider);
return "redirect:/providers";
}
未开发模块,自定义响应页面
新建 resources/templates/error/404.html
<!DOCTYPE html>
<html lang="en" th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>404 错误</title>
</head>
<body>
404 模块正在开发....
</body>
</html>
也可以放在静态目录中
resources/static/error/404.html
以下获取错误页面信息只能放在 templates/error/404.html
下,因为static 静态资源是没有模板引擎的
<!DOCTYPE html>
<html lang="en" th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>404 错误</title>
</head>
<body>
404 模块正在开发....
<p>[[${timestamp}]] 时间戳</p>
<p>[[${status}]] 状态码</p>
<p>[[${message}]] 异常信息 </p>
<p>[[${exception}]] 异常对象</p>
<p>[[${error}]] 错误提示</p>
</body>
</html>
以上都可以模糊命名 4xx.html
5xx.html
先找templates下准确的,再找static 下准确的
都没有再找 templates 下模糊的,再找 static 下模糊的
自定义数据进行相应
新建 com.iris.springboot.component.MyErrorAttributes.java
package com.iris.springboot.component;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;
import java.util.Map;
/*自定义数据响应*/
@Component //向容器中添加组件
public class MyErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
map.put("company","iris.com");
return map;
}
}
在404.html
再添加一行代码
<p>[[${company}]]</p>