精华内容
下载资源
问答
  • springbootThymeleaf.zip

    2019-12-07 17:03:26
    自己做的增删改练习,麻雀虽小五脏俱全,集成了mybatis,shrio,redis 主要使用SpringBoot集成开发
  • NULL 博文链接:https://357029540.iteye.com/blog/2381388
  • 一个基于SpringBoot+Thymeleaf渲染的图书管理系统 功能: 用户: a.预约图书 b.查看预约记录 c....管理员: a.添加图书 b.处理预约(借书) c....1.当用户过了还书日期仍旧未还书时会发邮件通知 2.当有书被还时发邮件通知预约书...
  • SpringBoot+thymeleaf

    2019-04-29 13:23:20
    SpringBoot+thymeleaf应用案例,非常适合初学者学习使用
  • spring-boot2.0 thymeleaf bootstrap 整合的一个示例项目,使用idea开发。步骤如下: 首先在idea或者eclipse(STS)中新建springboot项目,在选择依赖(Dependences)时引入web和thymeleaf。 接着我们将新建需要用到的...
  • 使用springboot框架引入mybatis连接mysql数据库(xml和注解两种方式实现sql语句),最后用thymeleaf展示数据。
  • spring boot+thymeleaf+bootstrap 简单实现后台管理系统界面;
  • SpringBoot配置SSM实现简单的增删改查Demo,SQL文件导入可直接运行,用于学习。
  • springboot页面没有使用iframe局部刷新页面各种前端插件权限管理
  • 第一步、首先在MySQL数据生成一张表 第二步、在IDEA中的generatorConfig.xml文件中,输入表的名字,然后点击Maven——plugins——mybatis-generator-mybatis-generator-generate生成代码 第三步、自己写...

    一、Index.html 以及 single-product.html首页、商品展示两个网页

    在这里插入图片描述

    第一步、首先在MySQL数据生成一张表

    在这里插入图片描述

    第二步、在IDEA中的generatorConfig.xml文件中,输入表的名字,然后点击Maven——plugins——mybatis-generator-mybatis-generator-generate生成代码

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    第三步、在HTML文件index.html中添加数据

    在这里插入图片描述

    第四步、在HTML文件single-product.html中添加数据

    在这里插入图片描述

    第五步、自己写Controller和Service,也就是下面三个文件要自己写

    在这里插入图片描述

    Controller:

    在这里插入图片描述

    SuperProductservice:

    @Service
    public interface SuperProductservice {
    
        List<SuperProduct> GetSuperProductList();
    
        SuperProduct GetSuperProductById(int SuperProId);
    
        List<SuperProduct> GetSuperProductByIdList(int[] SuperProIdList);
    }
    
    

    SuperProductserviceImpl:(这是SuperProductservice的实现类,工业标准)

    @Service
    public class SuperProductserviceImpl implements SuperProductservice {
        @Autowired
        SuperProductMapper superProductMapper;
    
        @Override
        public List<SuperProduct> GetSuperProductList() {
            return superProductMapper.selectAll();
        }
    
        @Override
        public SuperProduct GetSuperProductById(int SuperProId) {
            return superProductMapper.selectByPrimaryKey(SuperProId);
        }
    
        @Override
        public List<SuperProduct> GetSuperProductByIdList(int[] SuperProIdList) {
            List<SuperProduct> superProductList = new ArrayList<>();
            for (int j : SuperProIdList) {
                superProductList.add(superProductMapper.selectByPrimaryKey(j));
            }
            return superProductList;
        }
    }
    
    

    Mapper

    @Mapper
    public interface SuperProductMapper {
        int deleteByPrimaryKey(Integer id);
    
        int insert(SuperProduct record);
    
        SuperProduct selectByPrimaryKey(Integer id);
    
        List<SuperProduct> selectAll();
    
        int updateByPrimaryKey(SuperProduct record);
    }
    

    .XML文件

    在这里插入图片描述

    二、registration.html 以及 login.html注册和登录页面

    registration.html
    在这里插入图片描述
    在这里插入图片描述

    RegisterController
    在这里插入图片描述
    login.html
    在这里插入图片描述
    LoginController
    在这里插入图片描述

    三、cart.html 购物车页面

    购物车主要是两个功能,分别是
    ①single-product.html商品页面添加宝贝到购物车,并展示出来的功能
    ②购物车删除宝贝的功能
    ③提交订单的功能

    ①single-product.html添加商品到购物车
    single-product.html商品页面,实现,我一点击商品添加到购物车功能,就可以获得响应
    在这里插入图片描述
    CartController通过PostMappering来获取用户提交的宝贝信息,写入数据库,然后返回关联字让cart.html页面可以显示出来
    在这里插入图片描述
    cart.html
    在这里插入图片描述
    ②购物车删除宝贝的功能
    点击删除的时候把商品的id传回去Controller就可以了
    cart.html
    在这里插入图片描述
    CartController
    在这里插入图片描述
    ③提交订单的功能
    这个功能不用写什么,直接用一个跳转到checkout.html订单页面就可以了,然后Controller通过session接收用户id,再通过用户id在cart数据库表中搜索显示出来就行

    cart.html
    在这里插入图片描述
    Controller
    在这里插入图片描述

    四、checkout.html 订单页面

    订单页面要实现两个功能

    用户提交订单后,相应的数据库要做一些删除的操作

    checkout.html
    在这里插入图片描述

    CartController
    在这里插入图片描述

    展开全文
  • 本文在上一篇(SpringBoot整合多数据源jpa+mybatis(三) )基础上使用thymeleaf实现用户的... 项目结构图如下: 流程图如下: ... 数据源配置不变,实体类也不变。...1.为项目增加依赖 我们只需再加入thymeleaf即可 ......

    本文在上一篇SpringBoot整合多数据源jpa+mybatis(三)基础上使用thymeleaf实现用户的登录注册。

    项目结构图如下:
    在这里插入图片描述
    流程图如下:
    在这里插入图片描述
    user采用JPA,product采用mybatis,html采用thymeleaf模板。

    数据源配置不变,实体类也不变。

    1.为项目增加依赖

    我们只需再加入thymeleaf即可

    <!--thymeleaf-->
    <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    2.修改application.properties,配置相关信息

    添加如下配置

    #关闭thymeleaf缓存,开发时使用,否则没有实时画面
    spring.thymeleaf.cache=false
    

    3.修改功能实现

    3.1修改User---->jpa

    为User的DAO层增加自定义查询方法
    IUserDao.java

    //Jpa提供了增删改查的功能
    public interface IUserDao extends JpaRepository<User, Integer> {  //第一个泛型为实体类,第二个为实体类的主键类型
    
        /**
         * 查找是否有这样的用户名和密码用户存在
         * @param name
         * @param password
         * @return
         */
        User findUserByUserNameAndUserPassword(String name, String password);
    
        /**
         * 查找是否有这样的用户存在
         * @param name
         * @return
         */
        List<User> findUserByUserName(String name);
    }
    

    为User的Service层增加自定义查询方法
    IUserService.java

    	public interface IUserService {
    
        /**
         * 添加新用户
         * @param user
         */
        void saveUser(User user);
    
        /**
         * 查找是否有这样的用户名和密码用户存在
         * @param name
         * @param password
         * @return
         */
        User findByNameAndPassword(String name, String password);
    
        /**
         * 查找是否有这样的用户存在
         * @param name
         * @return
         */
        List<User> findByName(String name);
    }
    

    UserServiceImpl.java

    @Service
    public class UserServiceImpl implements IUserService {
    
        @Autowired
        private IUserDao userDao;
    
        /**
         * 添加新用户
         * @param user
         */
        @Override
        public void saveUser(User user) {
            userDao.save(user);
        }
    
        /**
         * 查找是否有这样的用户名和密码用户存在
         * @param name
         * @param password
         * @return
         */
        @Override
        public User findByNameAndPassword(String name, String password){
            return userDao.findUserByUserNameAndUserPassword(name, password);
        }
    
        /**
         * 查找是否有这样的用户存在
         * @param name
         * @return
         */
        @Override
        public List<User> findByName(String name){
            return userDao.findUserByUserName(name);
        }
    }
    

    3.1修改Product---->mybatis

    为Product的mapper增加自定义查询方法
    ProductMapper.java

    @Qualifier("db2SqlSessionFactory")
    @Mapper
    @Component
    public interface ProductMapper {
    
        /**
         * 添加一个商品
         * @param name
         * @param price
         */
        @Insert("insert into product(productName, productPrice) values(#{productName}, #{productPrice})")
        void addProduct(@Param("productName") String name, @Param("productPrice") Double price);
    
        /**
         * 查询所有的商品
         * @return
         */
        @Select("select * from product")
        List<Product> findAll();
    }
    

    为Product的Service层增加自定义查询方法
    IProductService.java

    @Service
    public class ProductServiceImpl implements IProductService
    {
        @Autowired
        private ProductMapper productMapper;
    
        /**
         * 添加一个商品
         * @param product
         */
        @Override
       // @Transactional(transactionManager = "db2TransactionManager")
        public void saveProduct(Product product) {
            productMapper.addProduct(product.getProductName(), product.getProductPrice());
        }
    
        /**
         * 查询所有的商品
         * @return
         */
        @Override
        public List<Product> findAllProducts() {
            return productMapper.findAll();
        }
    }
    

    5.修改Controller

    IndexController.java

    @Controller
    public class IndexController {
    
        /**
         * 初始界面,选择登录或者注册
         * @return
         */
        @RequestMapping("/")
        public String index(){
            return "index";
        }
    }
    

    UserController.java

    @Controller
    public class UserController {
    
        @Autowired
        IUserService userService;
    
    
        /**
         * 登录界面
         * @return
         */
        @RequestMapping("/login")
        public String login(){
            return "login";
        }
    
        /**
         * 判断能否成功登录
         * @param request
         * @return
         */
        @RequestMapping("/dologin")
        public String login(HttpServletRequest request){
            String name = request.getParameter("username");
            String password = request.getParameter("password");
            User user = userService.findByNameAndPassword(name, password);
            if(user != null){
                return "redirect:/productList";
            }else{
                return "login";
            }
        }
    
        /**
         * 注册界面
         * @return
         */
        @RequestMapping("/register")
        public String register(){
            return "register";
        }
    
        /**
         * 判断是否成功注册
         * @param request
         * @return
         */
        @RequestMapping("/doregister")
        public String register(HttpServletRequest request){
            String name = request.getParameter("username");
            String password = request.getParameter("password");
            String password2 = request.getParameter("password2");
            List<User> userList =  userService.findByName(name);
            if(userList.size() == 0 && password.equals(password2)){
                User user = new User();
                user.setUserName(name);
                user.setUserPassword(password);
                userService.saveUser(user);
                return "login";
            }else{
                return "register";
            }
        }
    }
    

    ProductController.java

    @Controller
    public class ProductController {
    
        @Autowired
        IProductService productService;
    
        /**
         * 商品列表
         * @param model
         * @return
         */
        @RequestMapping("/productList")
        public String productList(Model model){
            List<Product> products = productService.findAllProducts();
            model.addAttribute("products", products);
            return "product/productList";
        }
    }
    

    6.使用Thymeleaf写HTML页面

    1.在Resource—>templates下新建

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Welcome</title>
    </head>
    <body>
    
    <a href="/login">登录</a><br>
    <a href="/register">注册</a>
    
    </body>
    </html>
    

    login.html

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>login</title>
    </head>
    <body>
    
    <form action="/dologin" method="post">
        用户名:<input type="text" name="username"><br>
        密码: <input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
    
    </body>
    </html>
    

    register.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>register</title>
    </head>
    <body>
    
    <form action="/doregister" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        确认密码:<input type="password" name="password2"><br>
        <input type="submit" value="注册">
    </form>
    
    </body>
    </html>
    

    2.在Resource—>templates—>product下新建

    productList.html

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"/>
        <title>productList</title>
    </head>
    <body>
    <br/>
    <h1>商品列表</h1>
    <br/><br/>
    <div class="with:80%">
        <table>
            <thead>
            <tr>
                <th>#</th>
                <th>productName</th>
                <th>productPrice</th>
            </tr>
            </thead>
            <tbody>
            <!--each来进行for循环求值-->
            <tr  th:each="product : ${products}">
                <th scope="row" th:text="${product.productId}"></th>
                <td th:text="${product.productName}"></td>
                <td th:text="${product.productPrice}"></td>
            </tr>
            </tbody>
        </table>
    </div>
    </body>
    </html>
    

    7.页面展示

    index初始界面
    在这里插入图片描述
    登录界面
    在这里插入图片描述
    注册界面
    在这里插入图片描述
    商品列表界面
    在这里插入图片描述

    8.项目源代码

    源代码链接
    https://github.com/Qreply/springbootThymeleaf.git

    展开全文
  • springboot+mybatis+thymeleaf增删改查及前后端交互 准备工作 目录结构 pom.xml文件 都是在创建springboot项目的时候勾选的 无需后续导入依赖包 创建mysql表 编写配置文件application.yml spring: ...

    springboot+mybatis+thymeleaf增删改查及前后端交互

    准备工作

    目录结构

    在这里插入图片描述
    pom.xml文件 都是在创建springboot项目的时候勾选的 无需后续导入依赖包
    在这里插入图片描述

    创建mysql表

    在这里插入图片描述

    编写配置文件application.yml

    spring:
      thymeleaf:
        prefix: classpath:/templates/
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql://192.168.0.103:3306/user
        driver-class-name: com.mysql.cj.jdbc.Driver
        initialization-mode: always
        type: com.alibaba.druid.pool.DruidDataSource
    
    

    导入html文件

    在这里插入图片描述

    编写实体类 User

    public class User {
        private Integer id;
        private String name;
        private String gender;
        private Integer age;
        private String address;
        private String qq;
        private String email;
        }
    
    

    功能实现

    编写mapper层实现CRUD语句的Usermapper

    @Mapper
    public interface UserMapper {
        
        @Select("select * from user")
        public List<User> getAllUser();
    
        @Select("select * from user where id=#{id}")
        public User getUserById(Integer id);
    
        @Delete("delete from user where id=#{id}")
        public int delUserById(Integer id);
    
        @Update("update user set gender=#{gender},age=#{age},address=#{address},qq=#{qq},email=#{email} where name=#{name}")
        public int UpdateUser(User user);
    
        @Options(useGeneratedKeys = true,keyProperty = "id")//是指定主键生成的并且主键是id
        @Insert("insert into user(name,gender,age,address,qq,email) values (#{name},#{gender},#{age},#{address},#{qq},#{email})")
        public int InsertUser(User user);
    
    }
    
    
    

    编写service层的UserService

    @Service
    public class UserService {
        @Autowired
        UserMapper userMapper;
    
        public List<User> userList(){
            return userMapper.getAllUser();
        }
    
        public int insert(User user){
            return userMapper.InsertUser(user);
        }
    
        public int delete(Integer id){
            return userMapper.delUserById(id);
        }
    
        public int update(User user){
            return userMapper.UpdateUser(user);
        }
    
        public User getById(Integer id){
            return userMapper.getUserById(id);
        }
    }
    
    

    编写controller层的UserController

    @Controller
    public class UserController {

    @Autowired
    UserService userService;
    
    @RequestMapping("/index")
    public String index(){
        return "index";
    }
    
    /*查询用户列表*/
    @RequestMapping("/list")
    public String userList(Model model){
        model.addAttribute("users",userService.userList());
        return "list";
    }
    
    /*删除用户*/
    @RequestMapping("/del")
    public String deleteUser(Integer id){
        userService.delete(id);
        return "redirect:/list";
    }
    
    /*添加用户页面*/
    @RequestMapping("/add")
    public String addUser(ModelMap map){
        map.addAttribute("user",new User());
        return "add";
    }
    
    /*更新用户页面*/
    @RequestMapping("/update")
    public String updateUser(ModelMap map){
        map.addAttribute("user",new User());
        return "update";
    }
    
    /*添加完用户后重定向到list页面*/
    @RequestMapping("/saveI")
    public String saveI(@ModelAttribute User user){
    
        userService.insert(user);
        return "redirect:/list";
    }
    
    /*更新完用户后重定向到list页面*/
    @RequestMapping("/saveU")
    public String saveU(@ModelAttribute User user){
        userService.update(user);
        return "redirect:/list";
    }
    

    修改list.html

    使用th:each循环把查询到的用户列表展示出来
    在这里插入图片描述
    修改删除添加按钮都加上在controller层写的映射地址以及跳转地址

    在这里插入图片描述
    修改add.html文件 即选择添加联系人后跳转的页面
    在这里插入图片描述
    修改update.html文件,即选择修改后跳转的页面

    在这里插入图片描述

    运行

    展开全文
  • 步骤一:新建项目 步骤二:在pom.xml中导入AOP和DevTools,并删除无关文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop...org.

    步骤一:新建项目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    步骤二:在pom.xml中导入AOP和DevTools,并删除无关文件

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    步骤三:开始配置

    (1)在这里插入图片描述
    (2)项目默认是thymeleaf2的版本,但3版本性能更好,在pom.xml中配置:

    <properties>
            <java.version>1.8</java.version>
            <springboot-thymeleaf.version>3.0.2.RELEASE</springboot-thymeleaf.version>
            <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
    </properties>
    

    在这里插入图片描述
    (3)配置application.yml

    spring:
        thymeleaf:
          mode: HTML
        #    指定使用哪个配置文件:dev表示application-dev.yml
        profiles:
          active: dev
    

    在这里插入图片描述
    新建application-dev.yml和application-pro.yml,配置:
    在这里插入图片描述
    ①application-dev.yml

    #开发环境的配置
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/resource?useUnicode=true&characterEncoding=utf-8
        username: root
        password: 123
    
      jpa:
        database-platform: org.hibernate.dialect.MySQL5Dialect
        hibernate:
          ddl-auto: update
        show-sql: true
        open-in-view: false
    
    logging:
      level:
        root: info
        com.example: debug
      file:
        path: log/site-dev.log
    
    #default port
    server:
      port: 8080
    

    在这里插入图片描述
    ②application-pro.yml的配置

    #生产环境的配置
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/resource?useUnicode=true&characterEncoding=utf-8
        username: root
        password: 123
    
      jpa:
        database-platform: org.hibernate.dialect.MySQL5Dialect
        hibernate:
          ddl-auto: update
        show-sql: true
        open-in-view: false
    
    logging:
      level:
        root: info
        com.example: debug
      file:
        path: log/site-pro.log
    
    #default port
    server:
      port: 8080
    

    在这里插入图片描述
    (4)日志配置:
    新建logback-spring.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
        <!--包含Spring boot对logback日志的默认配置-->
        <include resource="org/springframework/boot/logging/logback/defaults.xml" />
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    
        <!--重写了Spring Boot框架 org/springframework/boot/logging/logback/file-appender.xml 配置-->
        <appender name="TIME_FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
            <file>${LOG_FILE}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
                <!--保留历史日志一个月的时间-->
                <maxHistory>30</maxHistory>
                <!--
                Spring Boot默认情况下,日志文件10M时,会切分日志文件,这样设置日志文件会在100M时切分日志
                -->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
    
            </rollingPolicy>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="TIME_FILE" />
        </root>
    
    </configuration>
            <!--
                1、继承Spring boot logback设置(可以在appliaction.yml或者application.properties设置logging.*属性)
                2、重写了默认配置,设置日志文件大小在100MB时,按日期切分日志,切分后目录:
    
                    my.2017-08-01.0   80MB
                    my.2017-08-01.1   10MB
                    my.2017-08-02.0   56MB
                    my.2017-08-03.0   53MB
                    ......
            -->
    
    

    在这里插入图片描述

    步骤四:测试

    ①在templates下新建index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
    </head>
    <body>
       <p>首页</p>
    </body>
    </html>
    

    ②建立controller类
    在这里插入图片描述
    启动项目:
    在这里插入图片描述

    步骤五:异常处理

    定义错误页面:404,500,error

    (1)在templates下面新建error文件
    在这里插入图片描述
    在这里插入图片描述
    测试404:
    在这里插入图片描述

    测试500:
    在这里插入图片描述
    在这里插入图片描述

    (2)自定义error页面
    在这里插入图片描述

    package com.example.site.handler;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.core.annotation.AnnotationUtils;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseStatus;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * @author yxx
     * @create 2021-05-12 22:41
     */
    @ControllerAdvice
    public class ControllerExceptionHandler {
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @ExceptionHandler({Exception.class})
        public ModelAndView handleException(HttpServletRequest request, Exception e) throws Exception {
    
            logger.error("Request URL : {} , Exception : {}", request.getRequestURL(), e.getMessage());
    
            if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
                throw e;
            }
            ModelAndView mav = new ModelAndView();
            mav.addObject("url", request.getRequestURL());
            mav.addObject("exception", e);
            mav.setViewName("error/error");
    
            return mav;
        }
    }
    
    

    在这里插入图片描述
    测试:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (3)定义404

    package com.example.site;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    /**
     * @author yxx
     * @create 2021-05-13 16:12
     */
    
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public class NotFoundExcepiton extends RuntimeException {
        public NotFoundExcepiton() {
        }
    
        public NotFoundExcepiton(String message) {
            super(message);
        }
    
        public NotFoundExcepiton(String message, Throwable cause) {
            super(message, cause);
        }
    }
    

    在这里插入图片描述
    测试:
    在这里插入图片描述
    启动:
    在这里插入图片描述
    在这里插入图片描述

    步骤六:日志处理

    在这里插入图片描述

    package com.example.site.aspect;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Arrays;
    
    /**
     * @author yxx
     * @create 2021-05-13 16:18
     */
    
    @Aspect
    @Component
    public class LogAspect {
    
    
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        /**
         * 定义切面
         */
        @Pointcut("execution(* com.example.site.web.*.*(..))")
        public void log() {
        }
    
        //    方法调用前执行
        @Before("log()")
        public void doBefore(JoinPoint joinPoint) {
            //logger.info("-----doBefore-----");
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
            ReqeustLog reqeustLog = new ReqeustLog(
                    request.getRequestURL().toString(),
                    request.getRemoteAddr(),
                    classMethod,
                    joinPoint.getArgs()
            );
            logger.info("Request:{}",reqeustLog);
        }
    
        //    方法调用后执行
        @After("log()")
        public void doAfter() {
    //        logger.info("---------- doAfter----------");
        }
    
        //返回结果
        @AfterReturning(returning = "result",pointcut = "log()")
        public void doAtfertRturn(Object result) {
            logger.info("Return :{}",result );
        }
    
    
        private class ReqeustLog {
            private String url;
            private String ip;
            private String classMethod;
            private Object[] args;
    
            public ReqeustLog(String url, String ip, String classMethod, Object[] args) {
                this.url = url;
                this.ip = ip;
                this.classMethod = classMethod;
                this.args = args;
            }
    
            @Override
            public String toString() {
                return "{" +
                        "url='" + url + '\'' +
                        ", ip='" + ip + '\'' +
                        ", classMethod='" + classMethod + '\'' +
                        ", args=" + Arrays.toString(args) +
                        '}';
            }
        }
    
    }
    
    

    测试:
    在这里插入图片描述
    结果:
    在这里插入图片描述
    在这里插入图片描述
    搭建记录文档:
    链接:https://pan.baidu.com/s/15–OSlRHhdPv1xzrNX8lGg
    提取码:o5pf

    展开全文
  • SpringBoot之Thymeleaf模板和Freemarker模板前言Thymeleaf模板Thymeleaf 是个什么?案例Freemarker模板什么是 FreeMarker?案例 前言 上一篇博客创建项目时所勾选Thymeleaf和Apache Freemarker只是简单的跳过,这篇...
  • 在使用springboot的过程中,如果使用thymeleaf作为模板文件,则要求HTML格式必须为严格的html5格式,必须有结束标签,否则会报错!解决办法如下:1、你可以使用严格的标签,也就是每个标签都有结束标签,这种可能...
  • 目录准备使用传递对象抽取公共元素附:常用的语法语句 引言:开发工具选用IDEA,尽量选择高版本的Thymeleaf避免版本不兼容问题,使用它可以完全替代JSP。 准备 pom文件 除了普通的SpringBoot项目,版本选择1.5.10,...
  • 前提:实现一个跳转到修改页面时将数据显示到页面上的功能 //跳转到修改页面 @RequestMapping("/toUpdate") public String toUpdate(int id,Model model){ Pet pet = petMapper.queryPetById(id);...
  • 继续上一次的WPF客户端对mysql增删改查配置成功后,现在继续搞网站,于是采用了java环境的springboot,就因为这个的学习成本非常低,再加上thymeleaf,也是熟悉html语言的最爱。 废话少说,赶紧进入主题: ...
  • !... +++ !... +++ ...**1、图一红框处,我把 查询所有的数据 放进了 map里面,但是并没有用类似addAttribute的方法把map传出去,为什么前端还能直接拿到map的数据呢?...2、请问大神们有没有比较全面的 thymeleaf传值 的资料...
  • 新建一个spring-boot项目,spring-boot是一个maven项目我们可以在eclipse上添加sts组件也可以在spring官网直接下载STS,完成之后重启新建一个spring-boot项目 选择依赖 finish 项目结构 ...
  • Web安全常见攻击手段 XSS、SQL注入、防盗链、CSRF、上传漏洞 一、 XSS攻击 什么是XSS攻击手段 XSS攻击使用Javascript脚本注入进行攻击 例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地...
  • 目录引入Pagehelper依赖修改部分代码Dao层Service层Controller前端显示将数据循环输出控制每页显示几行数据控制翻页 引入Pagehelper依赖 <dependency> <groupId>.../groupId>...pagehelper-spring-boot-...
  • 引言 通过这段时间的学习和自己对springboot这些知识点的掌握情况,自己springboot+mybatis+thymeleaf写了一个简单的后台管理系统,并部署到腾讯云上了,下面的这篇博客就是我简答的描述一下这个项目的操作流程及其...
  • spring Security框架整合thymeleaf了,现在要实现记住我功能。 记住我功能 这个要在配置里面进行配置记住我的功能 现在的情况,我们只要登录之后,关闭浏览器,再登录,就会让我们重新登录,但是很多网站的情况,...
  • SpringBoot结合Thymeleaf实现分页,很方便。效果如下后台代码项目结构1. 数据库Config由于hibernate自动建表字符集为latin不能插入中文,故需要在application.properties中指定:spring.jpa.properties.hibernate....
  • springboot+thymeleaf前后端联调笔记 前端篇 ...参考2:控制台的多个函数的使用,类似一个使用文档字典。...浏览器控制台 Console.dir 使用 console.dir 命令,可以打印出对象的结构,而 console.log 仅能打印返回值,...
  • 目录 一、JavaEE常用框架文章推荐 二、SpringMVC与Struts的区别 三、创建第1个SpringMVC框架:hello world 四、视图解析器 五、原理 六、HandlerMapping处理映射器 七、核心配置文件 八、注解:代替配置 ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 228
精华内容 91
关键字:

springbootthymeleaf

spring 订阅