CGB2005-Beijing Amoy 19

1. Módulo de usuario

1.1 Operación de cierre de sesión del usuario

1.1.1 Editar UserController

/**
     * 实现用户的登出操作  要求删除cookie 和redis中的数据(key)
     * 步骤: 通过cookie获取ticket信息.
     * url: http://www.jt.com/user/logout.html
     * 参数: 暂时没有
     * 返回值: 重定向到系统首页
     */
    @RequestMapping("/logout")
    public String logout(HttpServletRequest request,HttpServletResponse response){
    
    

        Cookie[] cookies = request.getCookies();
        if(cookies !=null && cookies.length >0){
    
    
            for(Cookie cookie : cookies){
    
    
                if("JT_TICKET".equals(cookie.getName())){
    
    
                    //获取value之后删除cookie
                    String ticket = cookie.getValue();
                    jedisCluster.del(ticket);   //删除redis中的数据
                    //删除cookie时 必须与原来的cookie数据保持一致
                    cookie.setDomain("jt.com");
                    cookie.setPath("/");
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                    break;
                }
            }
        }

        return "redirect:/";
    }

1.2 Optimización de cookies

package com.jt.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieUtil {
    
    

    /**
     * 该工具API主要的任务
     *      1.根据cookie的名称 返回cookie对象
     *      2.根据cookie的名称 返回valve的值
     *      3.新增cookie方法
     *      4.删除cookie方法
     */
    public static Cookie getCookie(String cookieName, HttpServletRequest request){
    
    
        Cookie[] cookies = request.getCookies();
        if(cookies !=null && cookies.length >0) {
    
    
            for (Cookie cookie : cookies) {
    
    
                if (cookieName.equals(cookie.getName())) {
    
    
                    return cookie;
                }
            }
        }
        return null ;
    }

    public static String getCookieValue(String cookieName,HttpServletRequest request){
    
    
        Cookie cookie = getCookie(cookieName, request);
        return cookie ==null?null:cookie.getValue();
    }

    public static void addCookie(String cookieName, String cookieValue, String path,
                                 String domain, int maxAge, HttpServletResponse response){
    
    
        Cookie cookie = new Cookie(cookieName,cookieValue);
        cookie.setPath(path);
        cookie.setDomain(domain);
        cookie.setMaxAge(maxAge);
        response.addCookie(cookie);
    }

    public static void deleteCookie(String cookieName,String path,
                                    String domain,HttpServletResponse response){
    
    

        addCookie(cookieName,"",path, domain, 0, response);
    }

}

1.3 Refactorización de la operación de cierre de sesión del usuario

 /**
     * 实现用户的登出操作  要求删除cookie 和redis中的数据(key)
     * 步骤: 通过cookie获取ticket信息.
     * url: http://www.jt.com/user/logout.html
     * 参数: 暂时没有
     * 返回值: 重定向到系统首页
     */
    @RequestMapping("/logout")
    public String logout(HttpServletRequest request,HttpServletResponse response){
    
    
        String ticket = CookieUtil.getCookieValue("JT_TICKET", request);
        if(!StringUtils.isEmpty(ticket)){
    
    
            //1.删除redis
            jedisCluster.del(ticket);
            //2.删除cookie
            CookieUtil.deleteCookie("JT_TICKET", "/", "jt.com", response);
        }
        return "redirect:/";

       /* Cookie[] cookies = request.getCookies();
        if(cookies !=null && cookies.length >0){
            for(Cookie cookie : cookies){
                if("JT_TICKET".equals(cookie.getName())){
                    //获取value之后删除cookie
                    String ticket = cookie.getValue();
                    jedisCluster.del(ticket);   //删除redis中的数据
                    //删除cookie时 必须与原来的cookie数据保持一致
                    cookie.setDomain("jt.com");
                    cookie.setPath("/");
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                    break;
                }
            }
        }*/
    }

2. Implementación del módulo de carrito de compras

2.1 Crear proyecto jt-cart

2.1.1 Nuevo proyecto

Inserte la descripción de la imagen aquí

2.1.2 Agregar base / dependencia / complemento

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>jt-cart</artifactId>

    <parent>
        <artifactId>jt</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <!--添加依赖项-->
    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>jt-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!--添加插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.1.3 Editar POJO

@TableName("tb_cart")
@Data
@Accessors(chain = true)
public class Cart extends BasePojo{
    
    

    @TableId(type = IdType.AUTO)
    private Long id;            //主键自增
    private Long userId;        //用户id
    private Long itemId;        //商品id
    private String itemTitle;
    private String itemImage;
    private Long itemPrice;
    private Integer num;
}

2.1.4 Editar la estructura del código del carrito

Inserte la descripción de la imagen aquí

2.1.5 Editar archivo de configuración YML

server:
  port: 8094
  servlet:
    context-path: /
spring:
  datasource:
    #引入druid数据源
    #type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

  #提供了MVC的支持
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

#mybatis-plush配置
mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  configuration:
    map-underscore-to-camel-case: true

logging:
  level: 
    com.jt.mapper: debug

#关于Dubbo配置
dubbo:
  scan:
    basePackages: com.jt    #指定dubbo的包路径
  application:              #应用名称
    name: provider-cart     #一个接口对应一个服务名称
  registry:                 #zk集群 主机中的信息与从机中的信息一致的 从zk中获取数据的时候链接的从机 主机的作用就是监控集群
    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183
  protocol:  #指定协议
    name: dubbo  #使用dubbo协议(tcp-ip)  web-controller直接调用sso-Service
    port: 20881  #每一个服务都有自己特定的端口 不能重复.

2.2 Visualización de la lista del carrito de compras

2.2.1 Análisis de página

1). Análisis de la URL de la página
Inserte la descripción de la imagen aquí
2). Descripción de la empresa
Cuando el usuario hace clic en el botón del carrito de compras, la información de los datos del carrito de compras debe consultarse de acuerdo con el ID de usuario, y luego la información de la lista se muestra en cart.jsp.
Inserte la descripción de la imagen aquí

2.2.2 Editar CartController

@Controller
@RequestMapping("/cart")
public class CartController {
    
    

    @Reference(check = false,timeout = 3000)
    private DubboCartService cartService;

    /**
     * 1.购物车列表数据展现
     * url地址: http://www.jt.com/cart/show.html
     * 参数:    暂时没有
     * 返回值:  页面逻辑名称  cart.jsp
     * 页面取值: ${cartList}
     * 应该将数据添加到域对象中 Request域  model工具API操作request对象
     *
     */
    @RequestMapping("/show")
    public String show(Model model){
    
    
        //1.暂时将userId写死    7L
        Long userId = 7L;
        List<Cart> cartList = cartService.findCartListByUserId(userId);
        model.addAttribute("cartList",cartList);
        return "cart";
    }
}

2.2.2 Editar CartService

package com.jt.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.CartMapper;
import com.jt.pojo.Cart;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@Service
public class DubboCartServiceImpl implements DubboCartService{
    
    

    @Autowired
    private CartMapper cartMapper;


    @Override
    public List<Cart> findCartListByUserId(Long userId) {
    
    

        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id", userId);
        return cartMapper.selectList(queryWrapper);
    }
}

2.2.3 Visualización de efectos de página

Inserte la descripción de la imagen aquí

operación:

1. Completar la modificación del carrito de compras
2. Completar la eliminación del carrito de compras

Supongo que te gusta

Origin blog.csdn.net/qq_16804847/article/details/108658932
Recomendado
Clasificación