Springboot--项目实战--账单管理系统(1)

新建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>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值