• 第二阶段:代码片段


    MyErrorAttributes.java

    package com.mengxuegu.springboot.component;

    import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.WebRequest;

    import java.util.Map;

    public class MyErrorAttributes extends DefaultErrorAttributes {

        /**
         * 自定义数据进行响应
         * @param webRequest
         * @param includeStackTrace
         * @return
         */
        @Override
        public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
            Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);
            map.put("company", "mengxuegu.com");
            return map;
        }

    }
    MyLocaleResolver.java
    package com.mengxuegu.springboot.component;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    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 {
        Logger logger = LoggerFactory.getLogger(getClass());

        //解析区域信息
        @Override
        public Locale resolveLocale(HttpServletRequest httpServletRequest) {
            //获取自定义请求头信息
            String l = httpServletRequest.getParameter("l");
            logger.info("解析区域信息:" + l);
            //获取浏览器上的区域信息
            Locale locale = httpServletRequest.getLocale();
            //获取当前操作系统 默认的区域信息
    //        Locale locale = Locale.getDefault();

            if(!StringUtils.isEmpty(l)) {
                String[] split = l.split("_");
                //接收第1个参数为:语言代码, 国家代码
                locale = new Locale(split[0], split[1]);
            }
            logger.info("最终采用的区域信息:" + locale.getLanguage() + "_" + locale.getCountry());
            return locale;
        }

        @Override
        public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

        }
    }
    DruidConfig.java
    package com.mengxuegu.springboot.config;

    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;

    import javax.servlet.Filter;
    import javax.sql.DataSource;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;

    /**
    * 绑定Druid相关信息
    */
    @Configuration
    public class DruidConfig {


        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druid() {
            return new DruidDataSource();
        }

        /**
         * 配置一个druid的监控
         * 1. 配置一个druid的后台 管理servlet
         * 2. 配置一个druid的filter
         *
         */
        // 1. 配置一个druid的后台管理servlet
        @Bean
        public ServletRegistrationBean statViewServlet() {
            //注意:请求是 /druid/*
            ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

            //设置初始化参数值
            Map<String, String> initParam = new HashMap<>();

            initParam.put(StatViewServlet.PARAM_NAME_USERNAME, "root");
            initParam.put(StatViewServlet.PARAM_NAME_PASSWORD, "123");
            //如果不写,则默认所有ip都可以访问
            initParam.put(StatViewServlet.PARAM_NAME_ALLOW, "");
            initParam.put(StatViewServlet.PARAM_NAME_DENY, "192.168.10.1");

            bean.setInitParameters(initParam);

            return bean;
        }

        //2. 配置一个druid的filter
        @Bean
        public FilterRegistrationBean webStatFilter() {
            FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
            bean.setFilter(new WebStatFilter());

            Map<String, String> initPrams = new HashMap<>();
            initPrams.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");
            bean.setInitParameters(initPrams);

            //设置拦截请求
            bean.setUrlPatterns(Arrays.asList("/*"));
            return bean;
        }

    }
    MySpringMvcConfigurer.java
    package com.mengxuegu.springboot.config;

    import com.mengxuegu.springboot.component.MyLocaleResolver;
    import com.mengxuegu.springboot.interceptor.LoginHandlerInterceptor;
    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.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

    /**
    */
    @Configuration
    public class MySpringMvcConfigurer {


        @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");
                    registry.addViewController("/main.html").setViewName("main/index");
                }

                @Override
                public void addInterceptors(InterceptorRegistry registry) {
                    registry.addInterceptor(new LoginHandlerInterceptor())
                            //指定要拦截的请求 /** 表示拦截所有请求
                            .addPathPatterns("/**")
                            //排除不需要拦截的请求路径
                            .excludePathPatterns("/", "/index.html", "/login")
                            //springboot2+之后需要将静态资源文件的访问路径 也排除
                            .excludePathPatterns("/css/*", "/img/*","/js/*");
                }
            };
        }

        //区域解析器
        @Bean
        public LocaleResolver localeResolver() {
            return new MyLocaleResolver();
        }


    }
    BillController.java
     
    package com.mengxuegu.springboot.controller;

    import com.mengxuegu.springboot.dao.ProviderDao;
    import com.mengxuegu.springboot.entities.Bill;
    import com.mengxuegu.springboot.entities.BillProvider;
    import com.mengxuegu.springboot.entities.Provider;
    import com.mengxuegu.springboot.mapper.BillMapper;
    import com.mengxuegu.springboot.mapper.ProviderMapper;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;

    import java.util.List;
    import java.util.Map;

    /**
    */
    @Controller
    public class BillController {
        Logger logger = LoggerFactory.getLogger(getClass());


        @Autowired
        ProviderMapper providerMapper;

        @Autowired
        BillMapper billMapper;
       
        @GetMapping("/bills")
        public String list(Map<String, Object> map, Bill bill) {
            logger.info("帐单列表查询。。。" + bill);

            List<BillProvider> billProviders = billMapper.getBills(bill);

            //获取所有的供应商
            List<Provider> providers = providerMapper.getProviders(null);

            map.put("billProviders", billProviders);
            map.put("providers", providers);

            //用于搜索处回显数据
            map.put("billName", bill.getBillName());
            map.put("pid", bill.getPid());
            map.put("pay", bill.getPay());

            return "bill/list";
        }

        /**
         * type = null 进入查看详情页面view.html,
         * type=update 则是进入update.html
         * @return
         */
        @GetMapping("/bill/{bid}")
        public String view(@PathVariable("bid") Integer bid,
                           @RequestParam(value="type", defaultValue = "view") String type,
                           Map<String, Object> map) {
            logger.info("查询" + bid + "的详细信息");

            BillProvider billProvider = billMapper.getBillByBid(bid);

            if( "update".equals(type)) {
                List<Provider> providers = providerMapper.getProviders(null);
                map.put("providers", providers);
            }

            map.put("billProvider", billProvider);

            // type = null 则进入view.html, type=update 则是进入update.html
            return "bill/" + type;
        }

        //修改信息
        @PutMapping("/bill")
        public String update(Bill bill) {
            logger.info("更改信息。。。");
            //更新操作
            billMapper.updateBill(bill);

            return "redirect:bills";
        }

        //前往添加 页面
        @GetMapping("/bill")
        public String toAddPage(Map<String, Object> map) {
            //查询所有供应端
    //        List<Provider> providers = providerMapper.getProviders(null);
            map.put("providers", providerMapper.getProviders(null) );
            return "bill/add";
        }


        //添加数据
        @PostMapping("/bill")
        public String add(Bill bill) {
            logger.info("添加数据" + bill);
            //保存数据操作
            billMapper.addBill(bill);

            return "redirect:/bills";
        }

        //删除
        @DeleteMapping("/bill/{bid}")
        public String delete(@PathVariable("bid") Integer bid) {
            logger.info("删除操作, bid=" + bid);
            billMapper.deteleBillByBid(bid);
            return "redirect:/bills";
        }

    }
    LoginController.java
    package com.mengxuegu.springboot.controller;

    import com.mengxuegu.springboot.entities.User;
    import com.mengxuegu.springboot.mapper.UserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    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 {

        @Autowired
        UserMapper userMapper;

        @PostMapping("/login")
        public String login (HttpSession session, String username, String password, Map<String, Object> map) {


            if(!StringUtils.isEmpty(username)
                    && !StringUtils.isEmpty(password)) {
                User user = userMapper.getUserByUsername(username);
                if(user != null && user.getPassword().equals(password)) {
                    //登录成功
                    session.setAttribute("loginUser", user);
                    //重定向 redirect:可以重定向到任意一个请求中(包括其他项目),地址栏改变
                    return "redirect:/main.html";
                }

            }
            //登录失败
            map.put("msg", "用户名或密码错误");

            return "main/login";

        }

        /**
         * 退出登录
         * @return
         */
        @GetMapping("/logout")
        public String logout(HttpSession session) {
            //1. 清空session中的用户信息
            session.removeAttribute("loginUser");
            //2. 再将session进行注销
            session.invalidate();
            //3. 返回登录页面
            return "redirect:/index.html";
        }

    }
    ProviderController.java
    package com.mengxuegu.springboot.controller;

    import com.mengxuegu.springboot.dao.ProviderDao;
    import com.mengxuegu.springboot.entities.Provider;
    import com.mengxuegu.springboot.mapper.ProviderMapper;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;

    import java.util.Collection;
    import java.util.List;
    import java.util.Map;

    /**
    * 供应商的控制层
    */
    @Controller
    public class ProviderController {
        Logger logger = LoggerFactory.getLogger(getClass());

        @Autowired
        ProviderDao providerDao;
       
        @Autowired
        ProviderMapper providerMapper;
       

        @GetMapping("/providers")
        public String list(Map<String, Object> map, Provider provider) {
            logger.info("供应商列表查询。。。" + provider);

            List<Provider> providers = providerMapper.getProviders(provider);

            map.put("providers", providers);
            map.put("providerName", provider.getProviderName());

            return "provider/list";
        }

        /**
         * type = null 进入查看详情页面view.html,
         * type=update 则是进入update.html
         * @param pid 供应商id
         * @param type
         * @param map
         * @return
         */
        @GetMapping("/provider/{pid}")
        public String view(@PathVariable("pid") Integer pid,
                           @RequestParam(value="type", defaultValue = "view") String type,
                           Map<String, Object> map) {
            logger.info("查询" + pid + "的供应商详细信息");

            Provider provider = providerMapper.getProviderByPid(pid);

            map.put("provider", provider);

            // type = null 则进入view.html, type=update 则是进入update.html
            return "provider/" + type;
        }

        //修改供应商信息
        @PutMapping("/provider")
        public String update(Provider provider) {
            logger.info("更改供应商信息。。。");
            //更新操作
            providerMapper.updateProvider(provider);

            return "redirect:providers";
        }

        //前往添加 页面
        @GetMapping("/provider")
        public String toAddPage() {
            return "provider/add";
        }


        //添加数据
        @PostMapping("/provider")
        public String add(Provider provider) {
            logger.info("添加供应商数据" + provider);
            //保存数据操作
            providerMapper.addProvider(provider);

            return "redirect:/providers";
        }

        //删除供应商
        @DeleteMapping("/provider/{pid}")
        public String delete(@PathVariable("pid") Integer pid) {
            logger.info("删除操作, pid=" + pid);
            providerMapper.deleteProviderByPid(pid);
            return "redirect:/providers";
        }
    }
    UserController.java
    package com.mengxuegu.springboot.controller;

    import com.mengxuegu.springboot.dao.ProviderDao;
    import com.mengxuegu.springboot.entities.Provider;
    import com.mengxuegu.springboot.entities.User;
    import com.mengxuegu.springboot.mapper.ProviderMapper;
    import com.mengxuegu.springboot.mapper.UserMapper;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;

    import javax.servlet.http.HttpSession;
    import java.util.List;
    import java.util.Map;

    /**
    * 供应商的控制层
    */
    @Controller
    public class UserController {
        Logger logger = LoggerFactory.getLogger(getClass());

        @Autowired
        UserMapper userMapper;
       

        @GetMapping("/users")
        public String list(Map<String, Object> map, User user) {
            logger.info("用户列表查询。。。" + user);

            List<User> users = userMapper.getUsers(user);

            map.put("users", users);
            map.put("username", user.getUsername());

            return "user/list";
        }

        /**
         * type = null 进入查看详情页面view.html,
         * type=update 则是进入update.html
         */
        @GetMapping("/user/{id}")
        public String view(@PathVariable("id") Integer id,
                           @RequestParam(value="type", defaultValue = "view") String type,
                           Map<String, Object> map) {
            logger.info("查询" + id + "的详细信息");

            User user = userMapper.getUserById(id);

            map.put("user", user);

            // type = null 则进入view.html, type=update 则是进入update.html
            return "user/" + type;
        }

        //修改供应商信息
        @PutMapping("/user")
        public String update(User user) {
            logger.info("更改信息。。。");
            //更新操作
            userMapper.updateUser(user);

            return "redirect:users";
        }

        //前往添加 页面
        @GetMapping("/user")
        public String toAddPage() {
            return "user/add";
        }


        //添加数据
        @PostMapping("/user")
        public String add(User user) {
            logger.info("添加数据" + user);
            //保存数据操作
            userMapper.addUser(user);

            return "redirect:/users";
        }

        //删除
        @DeleteMapping("/user/{id}")
        public String delete(@PathVariable("id") Integer id) {
            logger.info("删除操作, id=" + id);
            userMapper.deleteUserById(id);

            return "redirect:/users";
        }

        @GetMapping("/user/pwd")
        public String toUpdatePwdPage() {
            return "main/password";
        }

        @ResponseBody
        @GetMapping("/user/pwd/{oldPwd}")
        public Boolean checkPwd(HttpSession session, @PathVariable("oldPwd") String oldPwd) {
            logger.info("旧密码:" + oldPwd);
            //1.从Session中获取当前登录用户的User对象
            User user = (User) session.getAttribute("loginUser");
            if(user.getPassword().equals(oldPwd)) {
                //输入的旧密码正确
                return true;
            }
            return false;
        }

        @PostMapping("/user/pwd")
        public String updatePwd(HttpSession session, String password) {
            //1.从Session中获取当前登录用户信息
            User user = (User) session.getAttribute("loginUser");
            //2. 更新密码
            user.setPassword(password);
            //3. 提交到数据库
            userMapper.updateUser(user);
            //4. 注销重新登录
            return "redirect:/logout";
        }


    }
    BillDao.java
    package com.mengxuegu.springboot.dao;


    import com.mengxuegu.springboot.entities.Bill;
    import com.mengxuegu.springboot.entities.Provider;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    import org.springframework.util.StringUtils;

    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;

    @Repository
    public class BillDao {

        private static Map<Integer, Bill> billMap = null;
        private static Integer initId = 3006;

        @Autowired
        private ProviderDao providerDao;

        static {
            billMap = new HashMap<Integer, Bill>();
            billMap.put(3001, new Bill(3001, "Bi-AA11", "粮油aaa", "斤", 80,480.8, new Provider(2002, "PR-BB", "梦学谷供应商222", "小李", "18888666982", "深圳软件园", "0911-0123453", "品质B"), 1));
            billMap.put(3002, new Bill(3002, "Bi-BB11", "粮油bbb", "斤", 90,390.9,new Provider(2001, "PR-AA", "梦学谷供应商111", "小张", "18888666981", "深圳软件园", "0911-0123456", "品质A"), 2));
            billMap.put(3003, new Bill(3003, "Bi-CC11", "鲜花", "朵", 99,199.9, new Provider(2003, "PR-CC", "梦学谷供应商333", "小白", "18888666983", "深圳软件园", "0911-0123454", "品质C"), 1));
            billMap.put(3004, new Bill(3004, "Bi-DD11", "电脑", "台", 10,100000.1, new Provider(2004, "PR-DD", "梦学谷供应商444", "小梦", "18888666984", "深圳软件园", "0911-0123451", "品质D"), 1));
            billMap.put(3005, new Bill(3005, "Bi-EE11", "手机", "部", 8,50000.6, new Provider(2005, "PR-EE", "梦学谷供应商555", "小谷", "18888666985", "深圳软件园", "0911-0123452", "品质E"), 2));

        }


        public void save(Bill bill){
            if(bill.getBid() == null){
                bill.setBid(initId++);
            }
            //添加供应商
            bill.setProvider( providerDao.getProvider( bill.getProvider().getPid() ));

            billMap.put(bill.getBid(), bill);
        }

        public Collection<Bill> getAll(){
            return billMap.values();
        }

        /**
         * 搜索查询
         * @param bill
         * @return
         */
        public Collection<Bill> getAll(Bill bill){
            Collection<Bill> bills = getAll();

            if (!StringUtils.isEmpty(bill.getBillName())) {
                //
            }
            if (bill.getProvider().getPid() != null) {
                //
            }
            if (bill.getPay() != null) {
                //
            }
            return bills;
        }

        public Bill get(Integer id){
            return billMap.get(id);
        }

        public void delete(Integer id){
            billMap.remove(id);
        }
    }
    LoginHandlerInterceptor.java
    package com.mengxuegu.springboot.interceptor;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    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;
        }
    }
  • 相关阅读:
    (C/C++学习)6.数组指针和指针数组
    (C/C++学习)5.C++中的虚继承-虚函数-多态解析
    (C/C++学习)4.C++类中的虚函数表Virtual Table
    (C/C++学习)3.C++中cin的成员函数(cin.get();cin.getine()……)
    (C/C++学习)2.C语言中文件流操作基本函数总结
    关于for,while与do while
    计算机算法-C语言-统计字母数字个数解
    计算书费
    Truncate table
    sqlserver 在脚本中,为所有字符前没有N标记的字符增加N
  • 原文地址:https://www.cnblogs.com/carpe/p/11049374.html
Copyright © 2020-2023  润新知