文章目录 ConfigRegistCenter.java MybatisplusConfig.java CustomerController.java ReceiveAddressJsonController.java Customer.java LoginCustomer.java ReceiveAddress.java JwtInterceptor.java CustomerMapper.java ReceiveAddressMapper.java CustomerServiceImpl.java ReceiveAddressServiceImpl.java ICustomerService.java IReceiveAddressService.java JwtUtil.java ServerResult.java ServletInitializer.java SpringbootDemoApplication.java customer.sql receive_address.sql CustomerMapper.xml ReceiveAddressMapper.xml application.yaml ajax_demo1.js(忽略) ajax_jquery_demo1.js getCustomerInfo_logout.js web.xml ajax_demo1.jsp(忽略) ajax_jquery_demo1.jsp index.jsp login.jsp pom.xml
ConfigRegistCenter.java
package com. example. config ; import com. example. interceptor. JwtInterceptor ;
import org. springframework. context. annotation. Configuration ;
import org. springframework. web. servlet. config. annotation. * ; @Configuration
@EnableWebMvc
public class ConfigRegistCenter implements WebMvcConfigurer { public void addInterceptors ( InterceptorRegistry registry) { registry. addInterceptor ( new JwtInterceptor ( ) ) . addPathPatterns ( "/**" ) . excludePathPatterns ( "/login.jsp" , "/regist.jsp" , "/customer/login" , "/customer/regist" ) . excludePathPatterns ( "/product/**" ) . excludePathPatterns ( "/index.jsp" , "ajax_jquery_demo1.jsp" ) . excludePathPatterns ( "/js/**" , "/css/**" , "/images/**" ) ; } @Override public void addResourceHandlers ( ResourceHandlerRegistry registry) { registry. addResourceHandler ( "/**" ) . addResourceLocations ( "/" , "classpath:webapp/" ) ; WebMvcConfigurer . super . addResourceHandlers ( registry) ; } }
MybatisplusConfig.java
package com. example. config ; import com. baomidou. mybatisplus. annotation. DbType ;
import com. baomidou. mybatisplus. extension. plugins. MybatisPlusInterceptor ;
import com. baomidou. mybatisplus. extension. plugins. inner. PaginationInnerInterceptor ;
import org. springframework. context. annotation. Bean ;
import org. springframework. context. annotation. Configuration ; @Configuration
public class MybatisplusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor ( ) { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor ( ) ; PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor ( ) ; paginationInnerInterceptor. setDbType ( DbType . MYSQL ) ; paginationInnerInterceptor. setOverflow ( true ) ; interceptor. addInnerInterceptor ( paginationInnerInterceptor) ; return interceptor; } }
CustomerController.java
package com. example. controller ; import com. example. entity. Customer ;
import com. example. entity. LoginCustomer ;
import com. example. service. ICustomerService ;
import com. example. util. JwtUtil ;
import com. example. util. ServerResult ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. web. bind. annotation. * ; import org. springframework. stereotype. Controller ;
import org. springframework. web. servlet. ModelAndView ; import javax. servlet. http. HttpServletRequest ;
@Controller
@RequestMapping ( "customer" )
public class CustomerController { @Autowired private ICustomerService customerService; @PostMapping ( "login" ) @ResponseBody public ServerResult login ( String custName, String custPassword) { return customerService. login ( custName, custPassword) ; }
@GetMapping ( "getInfoByToken" ) @ResponseBody public ServerResult getInfoByToken ( HttpServletRequest request) { String token = request. getHeader ( "token" ) ; LoginCustomer loginCustomer = JwtUtil . parseToken ( token) ; if ( loginCustomer != null ) return ServerResult . getSuccess ( loginCustomer) ; return ServerResult . getFail ( "无效的token,没有获得到登录用户的信息 " ) ; }
}
ReceiveAddressJsonController.java
package com. example. controller ; import com. example. entity. LoginCustomer ;
import com. example. entity. ReceiveAddress ;
import com. example. service. IReceiveAddressService ;
import com. example. util. JwtUtil ;
import com. example. util. ServerResult ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. web. bind. annotation. * ; import javax. servlet. http. HttpServletRequest ;
import java. time. LocalDateTime ; @RestController
@RequestMapping ( "/receiveAddressJSon" )
public class ReceiveAddressJsonController { @Autowired private IReceiveAddressService addressService; @GetMapping ( "{addrId}" ) public ServerResult getById ( @PathVariable ( "addrId" ) Integer arrId) { return addressService. getById ( arrId) ; } @GetMapping ( "" ) public ServerResult getAll ( ) { int custId = 1 ; return addressService. getAll ( custId) ; } @PostMapping public ServerResult save ( ReceiveAddress receiveAddress, HttpServletRequest request) { String token = request. getHeader ( "token" ) ; LoginCustomer loginCustomer = JwtUtil . parseToken ( token) ; Integer customerId = loginCustomer. getCustId ( ) ; System . out. println ( "ReceiveAddressJsonController中 save address 解析出来的用户id是:" + customerId) ; receiveAddress. setCustId ( customerId) ; receiveAddress. setStatus ( 1 ) ; receiveAddress. setVersion ( 1 ) ; receiveAddress. setCreateTime ( LocalDateTime . now ( ) ) ; return addressService. save ( receiveAddress) ; } @DeleteMapping ( "/{addrId}" ) public ServerResult remove ( @PathVariable ( "addrId" ) Integer addressId) { System . out. println ( "删除方法" ) ; return addressService. removeById ( addressId) ; } @PutMapping public ServerResult update ( @RequestBody ReceiveAddress receiveAddress) { System . out. println ( receiveAddress) ; System . out. println ( "put controller" ) ; return addressService. updateById ( receiveAddress) ; } @GetMapping ( "page/{pageNum}" ) public ServerResult getByPage ( @PathVariable ( "pageNum" ) Integer pageNum, HttpServletRequest request) { String token = request. getHeader ( "token" ) ; LoginCustomer loginCustomer = JwtUtil . parseToken ( token) ; if ( loginCustomer != null ) { Integer customerId = loginCustomer. getCustId ( ) ; return addressService. getByPage ( pageNum, customerId) ; } else { return ServerResult . getFail ( "登录用户无效" ) ; } }
}
Customer.java
package com. example. entity ; import com. baomidou. mybatisplus. annotation. IdType ;
import com. baomidou. mybatisplus. annotation. TableId ;
import com. baomidou. mybatisplus. annotation. TableName ; import java. io. Serializable ;
import java. time. LocalDate ;
import java. time. LocalDateTime ;
@TableName ( "customer" )
public class Customer implements Serializable { private static final long serialVersionUID = 1L ; @TableId ( value = "cust_id" , type = IdType . AUTO ) private Integer custId; private String custName; private Long custTelno; private String custGender; private LocalDate custBirth; private Integer status; private Integer version; private LocalDateTime createTime; private LocalDateTime updateTime; private String custPassword; public Integer getCustId ( ) { return custId; } public void setCustId ( Integer custId) { this . custId = custId; } public String getCustName ( ) { return custName; } public void setCustName ( String custName) { this . custName = custName; } public Long getCustTelno ( ) { return custTelno; } public void setCustTelno ( Long custTelno) { this . custTelno = custTelno; } public String getCustGender ( ) { return custGender; } public void setCustGender ( String custGender) { this . custGender = custGender; } public LocalDate getCustBirth ( ) { return custBirth; } public void setCustBirth ( LocalDate custBirth) { this . custBirth = custBirth; } public Integer getStatus ( ) { return status; } public void setStatus ( Integer status) { this . status = status; } public Integer getVersion ( ) { return version; } public void setVersion ( Integer version) { this . version = version; } public LocalDateTime getCreateTime ( ) { return createTime; } public void setCreateTime ( LocalDateTime createTime) { this . createTime = createTime; } public LocalDateTime getUpdateTime ( ) { return updateTime; } public void setUpdateTime ( LocalDateTime updateTime) { this . updateTime = updateTime; } public String getCustPassword ( ) { return custPassword; } public void setCustPassword ( String custPassword) { this . custPassword = custPassword; } @Override public String toString ( ) { return "Customer{" + "custId=" + custId + ", custName=" + custName + ", custTelno=" + custTelno + ", custGender=" + custGender + ", custBirth=" + custBirth + ", status=" + status + ", version=" + version + ", createTime=" + createTime + ", updateTime=" + updateTime + ", custPassword=" + custPassword + "}" ; }
}
LoginCustomer.java
package com. example. entity ;
public class LoginCustomer { private Integer custId; private String custName; public LoginCustomer ( ) { } public LoginCustomer ( Integer custId, String custName) { this . custId = custId; this . custName = custName; } public Integer getCustId ( ) { return custId; } public void setCustId ( Integer custId) { this . custId = custId; } public String getCustName ( ) { return custName; } public void setCustName ( String custName) { this . custName = custName; }
}
ReceiveAddress.java
package com. example. entity ; import com. baomidou. mybatisplus. annotation. IdType ;
import com. baomidou. mybatisplus. annotation. TableId ;
import com. baomidou. mybatisplus. annotation. TableName ;
import java. io. Serializable ;
import java. time. LocalDateTime ;
@TableName ( "receive_address" )
public class ReceiveAddress implements Serializable { private static final long serialVersionUID = 1L ; @TableId ( value = "addr_id" , type = IdType . AUTO ) private Integer addrId; private Long receiveUserTelno; private String receiveUsername; private Integer custId; private String addrProvince; private String addrCity; private String addrArea; private String addrStreet; private String addrDetail; private Integer status; private Integer version; private LocalDateTime createTime; private LocalDateTime updateTime; public Integer getAddrId ( ) { return addrId; } public void setAddrId ( Integer addrId) { this . addrId = addrId; } public Long getReceiveUserTelno ( ) { return receiveUserTelno; } public void setReceiveUserTelno ( Long receiveUserTelno) { this . receiveUserTelno = receiveUserTelno; } public String getReceiveUsername ( ) { return receiveUsername; } public void setReceiveUsername ( String receiveUsername) { this . receiveUsername = receiveUsername; } public Integer getCustId ( ) { return custId; } public void setCustId ( Integer custId) { this . custId = custId; } public String getAddrProvince ( ) { return addrProvince; } public void setAddrProvince ( String addrProvince) { this . addrProvince = addrProvince; } public String getAddrCity ( ) { return addrCity; } public void setAddrCity ( String addrCity) { this . addrCity = addrCity; } public String getAddrArea ( ) { return addrArea; } public void setAddrArea ( String addrArea) { this . addrArea = addrArea; } public String getAddrStreet ( ) { return addrStreet; } public void setAddrStreet ( String addrStreet) { this . addrStreet = addrStreet; } public String getAddrDetail ( ) { return addrDetail; } public void setAddrDetail ( String addrDetail) { this . addrDetail = addrDetail; } public Integer getStatus ( ) { return status; } public void setStatus ( Integer status) { this . status = status; } public Integer getVersion ( ) { return version; } public void setVersion ( Integer version) { this . version = version; } public LocalDateTime getCreateTime ( ) { return createTime; } public void setCreateTime ( LocalDateTime createTime) { this . createTime = createTime; } public LocalDateTime getUpdateTime ( ) { return updateTime; } public void setUpdateTime ( LocalDateTime updateTime) { this . updateTime = updateTime; } @Override public String toString ( ) { return "ReceiveAddress{" + "addrId=" + addrId + ", receiveUserTelno=" + receiveUserTelno + ", receiveUsername=" + receiveUsername + ", custId=" + custId + ", addrProvince=" + addrProvince + ", addrCity=" + addrCity + ", addrArea=" + addrArea + ", addrStreet=" + addrStreet + ", addrDetail=" + addrDetail + ", status=" + status + ", version=" + version + ", createTime=" + createTime + ", updateTime=" + updateTime + "}" ; }
}
JwtInterceptor.java
package com. example. interceptor ; import com. example. util. JwtUtil ;
import org. springframework. web. servlet. HandlerInterceptor ;
import org. springframework. web. servlet. ModelAndView ; import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
public class JwtInterceptor implements HandlerInterceptor { @Override public boolean preHandle ( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System . out. println ( "登录检查拦截器正在拦截URL>>>" + request. getRequestURI ( ) ) ; String token = request. getHeader ( "token" ) ; if ( token == null || token. equals ( "" ) ) { System . out. println ( "登录检查拦截器正在拦截,没有获得到token" ) ; response. sendRedirect ( request. getContextPath ( ) + "/login.jsp" ) ; return false ; } else { System . out. println ( "登录检查拦截器正在拦截,获得到的token:" + token) ; if ( JwtUtil . checkToken ( token) ) { return true ; } else { System . out. println ( "被拦截了,无效token" ) ; return false ; } }
} }
CustomerMapper.java
package com. example. mapper ; import com. example. entity. Customer ;
import com. baomidou. mybatisplus. core. mapper. BaseMapper ;
public interface CustomerMapper extends BaseMapper < Customer > { }
ReceiveAddressMapper.java
package com. example. mapper ; import com. example. entity. ReceiveAddress ;
import com. baomidou. mybatisplus. core. mapper. BaseMapper ;
public interface ReceiveAddressMapper extends BaseMapper < ReceiveAddress > { }
CustomerServiceImpl.java
package com. example. service. impl ; import com. baomidou. mybatisplus. core. conditions. query. QueryWrapper ;
import com. example. entity. Customer ;
import com. example. entity. LoginCustomer ;
import com. example. entity. ReceiveAddress ;
import com. example. mapper. CustomerMapper ;
import com. example. service. ICustomerService ;
import com. baomidou. mybatisplus. extension. service. impl. ServiceImpl ;
import com. example. util. JwtUtil ;
import com. example. util. ServerResult ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Service ;
@Service
public class CustomerServiceImpl extends ServiceImpl < CustomerMapper , Customer > implements ICustomerService { @Autowired private CustomerMapper customerMapper; @Override public ServerResult login ( String custName, String custPwd) { QueryWrapper < Customer > wrapper = new QueryWrapper < > ( ) ; wrapper. eq ( "cust_name" , custName) . eq ( "cust_password" , custPwd) ; Customer customer = customerMapper. selectOne ( wrapper) ; System . out. println ( customer. getCustId ( ) ) ; System . out. println ( customer. getCustName ( ) ) ; System . out. println ( customer. getCustPassword ( ) ) ; if ( customer != null ) { String token = JwtUtil . createToken ( customer. getCustId ( ) , customer. getCustName ( ) ) ; return ServerResult . loginSuccess ( token) ; } return ServerResult . loginFail ( null ) ; }
}
ReceiveAddressServiceImpl.java
package com. example. service. impl ; import com. baomidou. mybatisplus. core. conditions. query. QueryWrapper ;
import com. baomidou. mybatisplus. extension. plugins. pagination. Page ;
import com. example. entity. ReceiveAddress ;
import com. example. mapper. ReceiveAddressMapper ;
import com. example. service. IReceiveAddressService ;
import com. baomidou. mybatisplus. extension. service. impl. ServiceImpl ;
import com. example. util. ServerResult ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Service ; import java. time. LocalDateTime ;
import java. util. List ;
@Service
public class ReceiveAddressServiceImpl implements IReceiveAddressService { @Autowired private ReceiveAddressMapper addressMapper; @Override public ServerResult getById ( Integer addressId) { ReceiveAddress address = addressMapper. selectById ( addressId) ; if ( address != null ) { return ServerResult . getSuccess ( address) ; } return ServerResult . getFail ( null ) ; } @Override public ServerResult getAll ( Integer customerId) { QueryWrapper < ReceiveAddress > wrapper = new QueryWrapper < > ( ) ; wrapper. eq ( "cust_id" , customerId) . eq ( "status" , 1 ) ; List < ReceiveAddress > addressList = addressMapper. selectList ( wrapper) ; if ( addressList == null || addressList. size ( ) == 0 ) return ServerResult . getFail ( "暂无收件地址" ) ; return ServerResult . getSuccess ( addressList) ; } public ServerResult save ( ReceiveAddress receiveAddress) { receiveAddress. setStatus ( 1 ) ; receiveAddress. setVersion ( 1 ) ; receiveAddress. setCreateTime ( LocalDateTime . now ( ) ) ; System . out. println ( "尚未添加,从页面拿到的收件地址是:" + receiveAddress) ; int rows = addressMapper. insert ( receiveAddress) ; if ( rows > 0 ) { System . out. println ( "添加成功后:" + receiveAddress) ; return ServerResult . updateSuccess ( receiveAddress) ; } return ServerResult . updateFail ( receiveAddress) ; } @Override public ServerResult removeById ( Integer addressId) { ReceiveAddress address = addressMapper. selectById ( addressId) ; address. setStatus ( 0 ) ; address. setVersion ( address. getVersion ( ) + 1 ) ; int rows = addressMapper. updateById ( address) ; if ( rows > 0 ) return ServerResult . updateSuccess ( address) ; return ServerResult . updateFail ( address) ; } @Override public ServerResult updateById ( ReceiveAddress address) { System . out. println ( "put service" ) ; int oldVersion = addressMapper. selectById ( address. getAddrId ( ) ) . getVersion ( ) ; address. setUpdateTime ( LocalDateTime . now ( ) ) ; address. setVersion ( oldVersion+ 1 ) ; int rows = addressMapper. updateById ( address) ; if ( rows > 0 ) { return ServerResult . updateSuccess ( address) ; } return ServerResult . updateFail ( address) ; } @Override public ServerResult getByPage ( Integer pageNum, Integer customerId) { QueryWrapper < ReceiveAddress > wrapper = new QueryWrapper < > ( ) ; wrapper. eq ( "cust_id" , customerId) . eq ( "status" , 1 ) ; Page < ReceiveAddress > page = new Page < > ( pageNum, 3 ) ; page = addressMapper. selectPage ( page, wrapper) ; if ( page. getRecords ( ) . size ( ) > 0 ) { return ServerResult . getSuccess ( page) ; } return ServerResult . getFail ( page) ; } @Override public ServerResult getByCustId ( Integer custId) { QueryWrapper < ReceiveAddress > queryWrapper = new QueryWrapper < > ( ) ; queryWrapper. eq ( "cust_id" , custId) ; List < ReceiveAddress > receiveAddressList = addressMapper. selectList ( queryWrapper) ; if ( receiveAddressList. size ( ) > 0 ) return ServerResult . getSuccess ( receiveAddressList) ; return ServerResult . getFail ( null ) ; } }
ICustomerService.java
package com. example. service ; import com. example. entity. Customer ;
import com. baomidou. mybatisplus. extension. service. IService ;
import com. example. util. ServerResult ;
public interface ICustomerService extends IService < Customer > { public ServerResult login ( String custName, String custPwd) ; }
IReceiveAddressService.java
package com. example. service ; import com. baomidou. mybatisplus. core. conditions. query. QueryWrapper ;
import com. example. entity. ReceiveAddress ;
import com. baomidou. mybatisplus. extension. service. IService ;
import com. example. util. ServerResult ; import java. util. List ;
public interface IReceiveAddressService { public ServerResult getById ( Integer addressId) ; public ServerResult getAll ( Integer customerId) ; public ServerResult save ( ReceiveAddress receiveAddress) ; public ServerResult removeById ( Integer addressId) ; public ServerResult updateById ( ReceiveAddress address) ; public ServerResult getByPage ( Integer pageNum, Integer customerId) ; public ServerResult getByCustId ( Integer custId) ; }
JwtUtil.java
package com. example. util ; import io. jsonwebtoken. * ;
import org. springframework. boot. autoconfigure. security. oauth2. resource. OAuth2ResourceServerProperties ; import java. util. Date ;
import java. util. HashMap ;
import java. util. Map ;
import com. example. entity. LoginCustomer ; public class JwtUtil { private static final String jwtToken = "dahkgag7*$" ; private static long expireTime = 1000 * 60 * 60 * 24 ; public static String createToken ( Integer customerId, String customerName) { Map < String , Object > claims = new HashMap < > ( ) ; claims. put ( "customerId" , customerId) ; claims. put ( "customerName" , customerName) ; JwtBuilder jwtBuilder = Jwts . builder ( ) . signWith ( SignatureAlgorithm . HS256 , jwtToken) . setClaims ( claims) . setIssuedAt ( new Date ( ) ) . setExpiration ( new Date ( System . currentTimeMillis ( ) + expireTime) ) ; String token = jwtBuilder. compact ( ) ; return token; } public static boolean checkToken ( String token) { if ( token != null && ! token. equals ( "" ) ) { try { Jwt parse = Jwts . parser ( ) . setSigningKey ( jwtToken) . parseClaimsJws ( token) ; return true ; } catch ( ExpiredJwtException e) { System . out. println ( "token已经过期了" ) ; return false ; } catch ( Exception e) { System . out. println ( "无效的token" ) ; return false ; } } else return false ; } public static LoginCustomer parseToken ( String token) { if ( token != null && ! token. equals ( "" ) ) { try { Jwt parse = Jwts . parser ( ) . setSigningKey ( jwtToken) . parseClaimsJws ( token) ; Map < String , Object > map = ( Map < String , Object > ) parse. getBody ( ) ; if ( map != null ) { Integer custId = ( Integer ) map. get ( "customerId" ) ; String custName = ( String ) map. get ( "customerName" ) ; LoginCustomer loginCustomer = new LoginCustomer ( custId, custName) ; System . out. println ( "获得到的登录用户的信息是:" + loginCustomer) ; return loginCustomer; } else { System . out. println ( "获得到的登录用户的信息失败" ) ; return null ; } } catch ( Exception e) { e. printStackTrace ( ) ; return null ; } } else return null ; } }
ServerResult.java
package com. example. util ; public class ServerResult { private int code; private String msg; private Object data; public static ServerResult getSuccess ( Object data) { return new ServerResult ( 200 , "查询成功" , data) ; } public static ServerResult getFail ( Object data) { return new ServerResult ( 201 , "查询失败" , data) ; } public static ServerResult updateSuccess ( Object data) { return new ServerResult ( 200 , "处理成功" , data) ; } public static ServerResult updateFail ( Object data) { return new ServerResult ( 201 , "处理失败" , data) ; } public static ServerResult loginSuccess ( Object data) { return new ServerResult ( 200 , "登录成功" , data) ; } public static ServerResult loginFail ( Object data) { return new ServerResult ( 201 , "登失败" , data) ; } public ServerResult ( ) { } public ServerResult ( int code, String msg, Object data) { this . code = code; this . msg = msg; this . data = data; } public int getCode ( ) { return code; } public void setCode ( int code) { this . code = code; } public String getMsg ( ) { return msg; } public void setMsg ( String msg) { this . msg = msg; } public Object getData ( ) { return data; } public void setData ( Object data) { this . data = data; } @Override public String toString ( ) { return "ServerResult{" + "code=" + code + ", msg='" + msg + '\'' + ", data=" + data + '}' ; }
}
ServletInitializer.java
package com. example ; import org. springframework. boot. builder. SpringApplicationBuilder ;
import org. springframework. boot. web. servlet. support. SpringBootServletInitializer ; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure ( SpringApplicationBuilder application) { return application. sources ( SpringbootDemoApplication . class ) ; } }
SpringbootDemoApplication.java
package com. example ; import org. apache. ibatis. annotations. Mapper ;
import org. mybatis. spring. annotation. MapperScan ;
import org. springframework. boot. SpringApplication ;
import org. springframework. boot. autoconfigure. SpringBootApplication ; @SpringBootApplication
@MapperScan ( "com.example.mapper" )
public class SpringbootDemoApplication { public static void main ( String [ ] args) { SpringApplication . run ( SpringbootDemoApplication . class , args) ; } }
customer.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0 ;
DROP TABLE IF EXISTS ` customer` ;
CREATE TABLE ` customer` ( ` cust_id` int ( 0 ) NOT NULL AUTO_INCREMENT , ` cust_name` varchar ( 50 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL , ` cust_telno` bigint ( 0 ) NOT NULL , ` cust_gender` char ( 1 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL , ` cust_birth` date NULL DEFAULT NULL , ` status` int ( 0 ) NULL DEFAULT NULL COMMENT '状态' , ` version` int ( 0 ) NULL DEFAULT NULL COMMENT '版本号用于做乐观锁' , ` create_time` datetime ( 0 ) NULL DEFAULT NULL COMMENT '数据添加的时间' , ` update_time` datetime ( 0 ) NULL DEFAULT NULL COMMENT '数据修改时间' , ` cust_password` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL , PRIMARY KEY ( ` cust_id` ) USING BTREE , UNIQUE INDEX ` cust_telno` ( ` cust_telno` ) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO ` customer` VALUES ( 1 , 'smith' , 1849430033 , 'M' , '2000-01-01' , 1 , 1 , '2023-08-11 13:39:30' , NULL , '123456' ) ;
INSERT INTO ` customer` VALUES ( 2 , 'allen' , 13771940583 , 'F' , '2001-05-01' , 1 , 1 , '2023-07-31 13:40:09' , NULL , '123456' ) ; SET FOREIGN_KEY_CHECKS = 1 ;
receive_address.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0 ;
DROP TABLE IF EXISTS ` receive_address` ;
CREATE TABLE ` receive_address` ( ` addr_id` int ( 0 ) NOT NULL AUTO_INCREMENT , ` receive_user_telno` bigint ( 0 ) NULL DEFAULT NULL , ` receive_username` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL , ` cust_id` int ( 0 ) NULL DEFAULT NULL , ` addr_province` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '地址的省份' , ` addr_city` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '地址的城市' , ` addr_area` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '地址的区域' , ` addr_street` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '地址的街道' , ` addr_detail` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '详细地址' , ` status` int ( 0 ) NULL DEFAULT NULL COMMENT '状态' , ` version` int ( 0 ) NULL DEFAULT NULL COMMENT '版本号,用于做乐观锁' , ` create_time` datetime ( 0 ) NULL DEFAULT NULL COMMENT '数据添加的时间' , ` update_time` datetime ( 0 ) NULL DEFAULT NULL COMMENT '数据修改时间' , PRIMARY KEY ( ` addr_id` ) USING BTREE , INDEX ` fk_address_customer` ( ` cust_id` ) USING BTREE , CONSTRAINT ` fk_address_customer` FOREIGN KEY ( ` cust_id` ) REFERENCES ` customer` ( ` cust_id` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO ` receive_address` VALUES ( 1 , NULL , NULL , 1 , '江苏省' , '苏州市' , '园区' , '若水路' , '若水路' , 1 , 1 , '2023-08-11 13:47:02' , NULL ) ;
INSERT INTO ` receive_address` VALUES ( 2 , NULL , NULL , 1 , '黑龙江' , '大庆市' , '市区' , '育才路' , '育才路' , 1 , 1 , '2023-07-31 13:47:52' , NULL ) ; SET FOREIGN_KEY_CHECKS = 1 ;
CustomerMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.example.mapper.CustomerMapper" > </ mapper>
ReceiveAddressMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.example.mapper.ReceiveAddressMapper" > </ mapper>
application.yaml
server : servlet : context-path : /appport : 8080 spring : datasource : driver-class-name : com.mysql.cj.jdbc.Driverurl : jdbc: mysql: //localhost: 3306/dict? useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username : rootpassword : 123456 mvc : view : prefix : / suffix : .jsp hiddenmethod : filter : enabled : true logging : file : path : d: //logger level : com.example : debug
ajax_demo1.js(忽略)
document. querySelector ( ".getByIdBtn" ) . onclick = function ( ) { var xhr = new XMLHttpRequest ( ) ; var url = "http://localhost:80/app/receiveAddressJSon/1" xhr. open ( "GET" , url, true ) ; xhr. send ( null ) ; xhr. onreadystatechange = function ( ) { if ( xhr. readyState == 4 && xhr. status == 200 ) { var result = JSON . parse ( xhr. responseText) ; if ( result. code == 200 ) { document. querySelector ( ".address_detail" ) . style. display = "block" ; var username = result. data. receiveUsername; var userTelno = result. data. receiveUserTelnovar detailAddress = result. data. addrProvince + result. data. addrCity + result. data. addrArea + result. data. addrStreet + result. data. addrDetail; document. querySelector ( ".receive_username" ) . innerText = username; document. querySelector ( ".receive_telno" ) . innerText = userTelno; document. querySelector ( ".receive_detail_address" ) . innerText = detailAddress; } else { document. querySelector ( ".address_no_data_info span" ) . innerText = "暂无数据" ; } } else { console. log ( "请求响应失败" ) ; } } }
document. querySelector ( ".saveAddressBtn" ) . onclick = function ( ) { var xhr = new XMLHttpRequest ( ) ; var url = "http://localhost:80/app/receiveAddressJson" xhr. open ( "POST" , url, true ) ; var receiveUsername = document. querySelector ( "#recipientName" ) . value; var receiveUserTelno = document. querySelector ( "#phoneNumber" ) . value; var province = document. querySelector ( "#province" ) . value; var city = document. querySelector ( "#city" ) . value; var district = document. querySelector ( "#district" ) . value; var street = document. querySelector ( "#street" ) . value; var address = document. querySelector ( "#address" ) . value; var formData = "receiveUserTelno=" + receiveUserTelno + "&receiveUsername=" + receiveUsername + "&addrProvince=" + province+ "&addrCity=" + city+ "&addrArea=" + district + "&addrStreet=" + street+ "&addrDetail=" + address; console. log ( formData) xhr. setRequestHeader ( "Content-type" , "application/x-www-form-urlencoded" ) ; xhr. send ( formData) ; xhr. onreadystatechange = function ( ) { if ( xhr. status == 200 && xhr. readyState == 4 ) { console. log ( xhr. responseText) ; let result = JSON . parse ( xhr. responseText) ; if ( result. code = 200 ) { document. querySelector ( ".saveMsg" ) . innerText = "添加成功" ; } else { document. querySelector ( ".saveMsg" ) . innerText = "添加失败" ; } } }
}
ajax_jquery_demo1.js
$ ( ".getByIdBtn" ) . click ( function ( ) { let addressId = 1 ; let url = "http://localhost:80/app/receiveAddressJSon/" + addressId; var token = localStorage. getItem ( "token" ) ; $. ajax ( { type : "get" , url : url, headers : { 'token' : token} , success : function ( result ) { console. log ( result) console. log ( result. code == 200 ) if ( result. code == 200 ) { $ ( ".address_detail" ) . show ( ) ; $ ( ".receive_username" ) . text ( result. data. receiveUsername) ; $ ( ".receive_telno" ) . text ( result. data. receiveUserTelno) ; var detailAddress = result. data. addrProvince + result. data. addrCity + result. data. addrArea + result. data. addrStreet + result. data. addrDetail; $ ( ".receive_detail_address" ) . text ( detailAddress) ; } else { $ ( ".address_no_data_info" ) . text ( "暂无数据" ) ; } } } ) ; } ) ;
$ ( ".saveAddressBtn" ) . click ( function ( ) { let url = "http://localhost:80/app/receiveAddressJSon/" ; let formData = $ ( "#addressForm" ) . serialize ( ) ; let token = localStorage. getItem ( "token" ) ; console. log ( formData) console. log ( token) $. ajax ( { type : "post" , url : url, data : formData, headers : { 'token' : token} , success : function ( ) { $ ( ".saveMsg" ) . text ( "添加成功" ) ; } , error : function ( ) { $ ( ".saveMsg" ) . text ( "添加失败" ) ; } } )
} ) $ ( ".getMyAllAddressBtn" ) . click ( function ( ) { getAddressByPage ( 1 ) ;
} ) function getAddressByPage ( pageNum ) { let url = "http://localhost:80/app/receiveAddressJSon/page/" + pageNum; let token = localStorage. getItem ( "token" ) ; $. ajax ( { type : "get" , url : url, headers : { 'token' : token} , success : function ( result ) { let addressArray = result. data. records; var ulEle = $ ( "#addressList" ) ; ulEle. html ( "" ) ; $ ( ".page-information" ) . html ( "" ) ; for ( var i = 0 ; i < addressArray. length; i++ ) { var addrId = addressArray[ i] . addrId; var username = addressArray[ i] . receiveUsername; var telno = addressArray[ i] . receiveUserTelno; var detailAddress = addressArray[ i] . addrProvince + addressArray[ i] . addrCity + addressArray[ i] . addrArea + addressArray[ i] . addrStreet + addressArray[ i] . addrDetail; let liElement = '<li>\n' + ' <div class="btn-container">\n' + ' <form class="deleteForm" method="post" action="">\n' + ' <input type="hidden" name="_method" value="DELETE">\n' + ' <input type="hidden" name="addressId" value="' + addrId + '">' + ' <input type="button" value="删除" class="delete-btn">\n' + ' <input type="button" value="修改" class="update-btn">' + ' </form>\n' + ' </div>\n' + ' <h3>' + username + '</h3>\n' + ' <p>手机号: ' + telno + '</p>\n' + ' <p>收件地址: ' + detailAddress + '</p>\n' + ' </li>' ; ulEle. append ( liElement) ; } var pageNum = result. data. current; var pages = result. data. pages; var total = result. data. total; var prePage = result. data. current- 1 ; var nextPage = result. data. current+ 1 ; if ( pageNum != 1 ) var prePageEle = '<a href="javascript:getAddressByPage(' + prePage+ ')">上一页</a>' ; var pageEle = ' 当前是' + pageNum+ ' 页,共有 ' + total+ ' 条记录,共有 ' + pages+ '页' ; if ( pageNum != pages) var nextPageEle = '<a href="javascript:getAddressByPage(' + nextPage+ ')">下一页</a>' ; $ ( ".page-information" ) . append ( prePageEle) . append ( pageEle) . append ( nextPageEle) ; } , error : function ( ) { } } )
}
$ ( "#addressList" ) . click ( function ( event ) { event. preventDefault ( ) ; var ele = event. target; if ( ele. nodeName == 'INPUT' ) { if ( ele. className == 'delete-btn' ) { if ( window. confirm ( '你确定要删除这条收件地址记录?' ) ) { var addressId = ele. previousElementSibling. value; removeAddress ( addressId) ; } } else if ( ele. className == 'update-btn' ) { if ( window. confirm ( '你确定要修改这条收件地址记录?' ) ) { var addressId = ele. previousElementSibling. previousElementSibling. value; console. log ( addressId) ; getUpdatePage ( addressId) ; } } }
} ) ; function removeAddress ( addressId ) { $ ( "deleteMsg" ) . text ( "" ) ; let url = "http://localhost:80/app/receiveAddressJSon/" + addressId; let token = localStorage. getItem ( "token" ) ; $. ajax ( { type : "DELETE" , url : url, headers : { 'token' : token} , success : function ( ) { $ ( "deleteMsg" ) . text ( "删除成功" ) ; getAddressByPage ( 1 ) ; } , error : function ( ) { $ ( "deleteMsg" ) . text ( "删除失败" ) ; } } ) }
function getUpdatePage ( addressId ) { var url = "http://localhost:80/app/receiveAddressJSon/" + addressId; let token = localStorage. getItem ( "token" ) ; $. ajax ( { type : "get" , url : url, headers : { 'token' : token} , success : function ( result ) { $ ( '#addrId2' ) . val ( result. data. addrId) ; $ ( '#recipientName2' ) . val ( result. data. receiveUsername) ; $ ( '#phoneNumber2' ) . val ( result. data. receiveUserTelno) ; $ ( '#district2' ) . val ( result. data. addrArea) ; $ ( '#street2' ) . val ( result. data. addrStreet) ; $ ( '#address2' ) . val ( result. data. addrDetail) ; var value = result. data. addrProvince; var $option = $ ( '<option></option>' ) . attr ( 'value' , value) . text ( value) ; $ ( '#province2' ) . prepend ( $option) ; var value2 = result. data. addrCity; var $option2 = $ ( '<option></option>' ) . attr ( 'value' , value2) . text ( value2) ; $ ( '#city2' ) . prepend ( $option2) ; } , error : function ( ) { } } ) } $ ( ".updateBtn" ) . click ( function ( ) { let url = "http://localhost:80/app/receiveAddressJSon" ; let token = localStorage. getItem ( "token" ) ; let form = $ ( "#updateForm" ) ; let formData = { addrId : form. find ( "input[name='addrId']" ) . val ( ) , receiveUsername : form. find ( "input[name='receiveUsername']" ) . val ( ) , receiveUserTelno : form. find ( "input[name='receiveUserTelno']" ) . val ( ) , addrProvince : form. find ( "select[name='addrProvince']" ) . val ( ) , addrCity : form. find ( "select[name='addrCity']" ) . val ( ) , addrArea : form. find ( "input[name='addrArea']" ) . val ( ) , addrStreet : form. find ( "input[name='addrStreet']" ) . val ( ) , addrDetail : form. find ( "input[name='addrDetail']" ) . val ( ) } ; let jsonData = JSON . stringify ( formData) ; $. ajax ( { type : "PUT" , url : url, headers : { 'Content-Type' : 'application/json' , 'token' : token} , data : jsonData, success : function ( ) { getAddressByPage ( 1 ) ; } , error : function ( ) { } } ) } )
getCustomerInfo_logout.js
loadLoginCustomerInfo ( ) ;
function loadLoginCustomerInfo ( ) { $ ( ".login_customer_name" ) . text ( "" ) $ ( ".loginMsg" ) . text ( "" ) let token = localStorage. getItem ( "token" ) ; console. log ( token) let url = "http://localhost:80/app/customer/getInfoByToken" $. ajax ( { type : "get" , url : url, headers : { 'token' : token} , success : function ( result ) { if ( result. code == 200 ) { $ ( ".login_area" ) . show ( ) ; $ ( ".login_customer_name" ) . text ( result. data. custName) ; } else { $ ( ".login_area" ) . hide ( ) ; $ ( ".loginMsg" ) . text ( result. data) } } } )
}
$ ( ".logoutBtn" ) . click ( function ( ) { console. log ( "退出操作..." ) localStorage. removeItem ( "token" ) ; window. location. href= "index.jsp"
} ) ;
$ ( ".backToIndexBtn" ) . click ( function ( ) { window. open ( "index.jsp" )
} ) ;
web.xml
<?xml version="1.0" encoding="UTF-8"?>
< web-app xmlns = " http://xmlns.jcp.org/xml/ns/javaee" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation= " http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version = " 4.0" >
</ web-app>
ajax_demo1.jsp(忽略)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>1.ajax 异步请求:根据主键查询</h1>
<a href="javascript:void(0)" class="getByIdBtn">查询id=1的收件地址</a><div class="address_detail">收件人姓名:<span class="receive_username"></span><br>收件人手机号:<span class="receive_telno"></span><br>收件地址:<span class="receive_detail_address"></span><br></div><div class="address_no_data_info"><span></span>
</div><%--============================2. ajax 异步请求:添加收件地址=======================================================--%>
<h1>2. ajax 异步请求:添加收件地址</h1>
<form id="addressForm" method="post" action="${pageContext.request.contextPath}/receiveAddress"><label for="recipientName">收件人姓名:</label><input type="text" id="recipientName" name="receiveUsername" required> <br><label for="phoneNumber">收件人手机号:</label><input type="tel" id="phoneNumber" name="receiveUserTelno" required> <br><label for="province">省份:</label><select id="province" name="addrProvince" required><option value="">请选择省份</option><option value="北京">北京</option><option value="上海">上海</option><option value="天津">天津</option><option value="重庆">重庆</option><option value="河北">河北</option><option value="河南">河南</option><option value="湖南">湖南</option><option value="湖北">湖北</option><option value="四川">四川</option><option value="广东">广东</option></select> <br><label for="city">城市:</label><select id="city" name="addrCity" required><option value="">请选择城市</option></select> <br><label for="district">区域:</label><input type="text" id="district" name="addrArea" required> <br><label for="street">街道:</label><input type="text" id="street" name="addrStreet" required> <br><label for="address">详细地址:</label><input type="text" id="address" name="addrDetail" required> <br><input type="button" value="添加 " class="saveAddressBtn"/>
</form>
<span class="saveMsg"></span><script>// Cities data for each provincevar citiesData = {"北京": ["北京"],"上海": ["上海"],"天津": ["天津"],"重庆": ["重庆"],"河北": ["石家庄", "唐山", "保定"],"河南": ["郑州", "洛阳", "开封"],"湖南": ["长沙", "株洲", "湘潭"],"湖北": ["武汉", "黄石", "十堰"],"四川": ["成都", "绵阳", "乐山"],"广东": ["广州", "深圳", "东莞"]};// Function to populate cities based on selected provincefunction populateCities() {var provinceSelect = document.getElementById("province");var citySelect = document.getElementById("city");var selectedProvince = provinceSelect.value;// Clear existing city optionscitySelect.innerHTML = "<option value=''>Select City</option>";// Populate city options based on selected provinceif (selectedProvince in citiesData) {citiesData[selectedProvince].forEach(function(city) {var option = document.createElement("option");option.value = city;option.text = city;citySelect.appendChild(option);});}}// Event listener for province select changedocument.getElementById("province").addEventListener("change", populateCities);</script>
<script src="${pageContext.request.contextPath}/js/ajax_demo1.js"></script>
</body>
</html>
ajax_jquery_demo1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>ajax-jquery-收件地址</title><script src="${pageContext.request.contextPath}/js/jquery-3.7.0.min.js"></script><script src="${pageContext.request.contextPath}/js/jquery.form.js"></script><style>.address_detail{display: none;}.login_area{display: none;}</style>
</head>
<body>
<div class="login_area">欢迎<span class="login_customer_name"></span>登录<a href="javascript:void(0)" class="logoutBtn">退出</a>
</div>
<span class="loginMsg"></span><a href="javascript:void(0)" class="backToIndexBtn">返回首页</a><%--============================1. ajax 异步请求:根据主键查询收件地址=======================================================--%>
<h1>1. ajax-jquery 异步请求:根据主键查询收件地址</h1>
<a href="javascript:void(0)" class="getByIdBtn">查询id=1的收件地址</a><div class="address_detail">收件人姓名:<span class="receive_username"></span> <br>收件人手机号:<span class="receive_telno"></span> <br>收件地址:<span class="receive_detail_address"></span> <br>
</div>
<div class="address_no_data_info"><span ></span>
</div><%--============================2. ajax 异步请求:添加收件地址=======================================================--%>
<h1>2. ajax-jquery 异步请求:添加收件地址</h1>
<form id="addressForm" method="post" ><label for="recipientName">收件人姓名:</label><input type="text" id="recipientName" name="receiveUsername" required> <br><label for="phoneNumber">收件人手机号:</label><input type="tel" id="phoneNumber" name="receiveUserTelno" required> <br><label for="province">省份:</label><select id="province" name="addrProvince" required><option value="">请选择省份</option><option value="北京">北京</option><option value="上海">上海</option><option value="天津">天津</option><option value="重庆">重庆</option><option value="河北">河北</option><option value="河南">河南</option><option value="湖南">湖南</option><option value="湖北">湖北</option><option value="四川">四川</option><option value="广东">广东</option></select> <br><label for="city">城市:</label><select id="city" name="addrCity" required><option value="">请选择城市</option></select> <br><label for="district">区域:</label><input type="text" id="district" name="addrArea" required> <br><label for="street">街道:</label><input type="text" id="street" name="addrStreet" required> <br><label for="address">详细地址:</label><input type="text" id="address" name="addrDetail" required> <br><input type="button" value="添加 " class="saveAddressBtn"/>
</form>
<span class="saveMsg"></span><%-- updateform表单 --%>
<form id="updateForm" method="post" ><input type="hidden" name="_method" value="PUT"><input type="hidden" id="addrId2" name="addrId" ><label for="recipientName2">收件人姓名:</label><input type="text" id="recipientName2" name="receiveUsername" required> <br><label for="phoneNumber2">收件人手机号:</label><input type="tel" id="phoneNumber2" name="receiveUserTelno" required> <br><label for="province2">省份:</label><select id="province2" name="addrProvince" required><option value=""></option><option value="北京">北京</option><option value="上海">上海</option><option value="天津">天津</option><option value="重庆">重庆</option><option value="河北">河北</option><option value="河南">河南</option><option value="湖南">湖南</option><option value="湖北">湖北</option><option value="四川">四川</option><option value="广东">广东</option></select> <br><label for="city2">城市:</label><select id="city2" name="addrCity" required><option value="">请选择城市</option></select> <br><label for="district2">区域:</label><input type="text" id="district2" name="addrArea" required> <br><label for="street2">街道:</label><input type="text" id="street2" name="addrStreet" required> <br><label for="address2">详细地址:</label><input type="text" id="address2" name="addrDetail" required> <br><input type="button" value="修改 " class="updateBtn"/>
</form>
<span class="updateMsg"></span><%-- 3.ajax异步请求,查询所有收件地址 --%>
<a href="javascript:void(0)" class="getMyAllAddressBtn">查询所有收件地址(分页)</a><%-- 数据信息 --%>
<ul class="address-list" id="addressList"></ul><ul class="update-list" id="updateList"></ul><%-- 页码信息--%>
<div class="page-information"></div><span class="deleteMsg"></span><%--省份城市下拉列表--%>
<script>// Cities data for each provincevar citiesData = {"北京": ["北京"],"上海": ["上海"],"天津": ["天津"],"重庆": ["重庆"],"河北": ["石家庄", "唐山", "保定"],"河南": ["郑州", "洛阳", "开封"],"湖南": ["长沙", "株洲", "湘潭"],"湖北": ["武汉", "黄石", "十堰"],"四川": ["成都", "绵阳", "乐山"],"广东": ["广州", "深圳", "东莞"]};// Function to populate cities based on selected provincefunction populateCities() {var provinceSelect = document.getElementById("province");var citySelect = document.getElementById("city");var selectedProvince = provinceSelect.value;// Clear existing city optionscitySelect.innerHTML = "<option value=''>Select City</option>";// Populate city options based on selected provinceif (selectedProvince in citiesData) {citiesData[selectedProvince].forEach(function(city) {var option = document.createElement("option");option.value = city;option.text = city;citySelect.appendChild(option);});}}// Event listener for province select changedocument.getElementById("province").addEventListener("change", populateCities);</script><script src="${pageContext.request.contextPath}/js/ajax_jquery_demo1.js"></script><script src="${pageContext.request.contextPath}/js/getCustomerInfo_logout.js"></script>
</body>
</html>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><style>.login_area{display: none;}</style><script src="${pageContext.request.contextPath}/js/jquery-3.7.0.min.js"></script>
</head>
<body>
<h2>首页</h2>
<%--<a href="javascript:void(0)" class="getCustInfoBtn">获得当前用户的信息</a>--%><div class="login_area">欢迎<span class="login_customer_name"></span>登录<a href="javascript:void(0)" class="logoutBtn">退出</a>
</div>
<span class="loginMsg"></span><a href="javascript:void(0)" class="getMyAddressBtn">查看我的所有收件地址</a><%--<script>--%><%-- getCustInfo();--%><%-- /**--%>
<%-- * 获得用户信息--%>
<%-- */--%>
<%-- function getCustInfo(){--%>
<%-- var tokenStr = localStorage.getItem("token");--%>
<%-- var token = JSON.parse(tokenStr);--%>
<%-- console.log("从localStorage 中获得的token是:" + token);--%>
<%-- $.ajax({--%>
<%-- type: "get",--%>
<%-- url:"http://localhost:80/app/customer/info",--%>
<%-- headers: {'token': token},--%>
<%-- success: function (result) {--%>
<%-- console.log("获得当前用户的信息:" +result);--%>
<%-- if(result.code ==200) {--%>
<%-- var custId = result.data.custId;--%>
<%-- var custName = result.data.custName;--%>
<%-- console.log("custId:" + custId);--%>
<%-- console.log("custName:" + custName);--%><%-- // 显示用户登录信息--%>
<%-- $(".loginInfo").css("display","block");--%>
<%-- $(".custName").text(custName)--%>
<%-- }else if(result.code ==202){--%>
<%-- console.log("用户登录超时,请重新登录");--%>
<%-- window.location ="http://localhost:80/app/customer/login.jsp"--%>
<%-- }--%>
<%-- }--%>
<%-- })--%>
<%-- }--%>
<%-- $(".getCustInfoBtn").click(getCustInfo);--%><%-- // 用户退出--%>
<%-- $(".logoutBtn").click(logout);--%><%-- /**--%>
<%-- * 用户退出--%>
<%-- */--%>
<%-- function logout(){--%>
<%-- var tokenStr = localStorage.getItem("token");--%>
<%-- if(tokenStr!=null || tokenStr !=""){--%>
<%-- localStorage.removeItem("token");--%><%-- // 显示用户登录信息--%>
<%-- $(".loginInfo").css("display","none");--%>
<%-- $(".custName").text("")--%>
<%-- }--%>
<%-- }--%><%-- /***********************查看我的所有收件地址**********************************/--%>
<%-- $(".getMyAddressBtn").click(function (){--%>
<%-- var token = localStorage.getItem("token");--%><%-- $.ajax({--%>
<%-- type:"get",--%>
<%-- url:"http://localhost:80/app/receiveAddressJSon/all",--%>
<%-- headers: {'token': token},--%>
<%-- success:function (data){--%>
<%-- console.log(data)--%>
<%-- }--%>
<%-- })--%>
<%-- })--%><%--</script>--%>${result.data}<script src="${pageContext.request.contextPath}/js/getCustomerInfo_logout.js"></script>
</body>
</html>
login.jsp
<%--isELIgnored="false"--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<script src="./js/jquery-3.7.0.min.js" ></script><html>
<head><title>登录</title><script src="${pageContext.request.contextPath}/js/jquery-3.7.0.min.js" ></script>
</head>
<body>
<h2>用户登录</h2>
<form class="loginForm" method="post" >用户名:<input name="custName" class="custName" type="text" /><br>密码:<input name="custPassword" class="custPassword" type="password" /><br><input type="button" class="loginBtn" value="登录">
</form><span class="loginMsg"></span><script>$(".loginBtn").click(function (){var url = "http://localhost:80/app/customer/login";var formData = $(".loginForm").serialize();$.post(url,formData,function (result){console.log(result)if (result.code == 200){localStorage.setItem("token",result.data);//1保存tokenwindow.location.href = "http://localhost:80/app/ajax_jquery_demo1.jsp";//2跳转}else {$(".loginMsg").text(result.data);}})})// $(".loginBtn").click(function (){// $.ajax({// type:"post",// url:"http://localhost:80/app/customer/login",// data:{// custName:$(".custName").val(),// custPassword:$(".custPassword").val()// },// success:function (result){// console.log("result:" + result);// console.log("json result:" + JSON.stringify(result));//// if(result.code ==200) {// //保存信息到本地,里面都 token// var token = JSON.stringify(result.data);// console.log("登录后,得到的token:" + token);//// localStorage.setItem("token", token);// window.location.href = "./index.jsp";// }// }// })// })
</script>
</body>
</html>
pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion> 4.0.0</ modelVersion> < parent> < groupId> org.springframework.boot</ groupId> < artifactId> spring-boot-starter-parent</ artifactId> < version> 2.7.6</ version> < relativePath/> </ parent> < groupId> com.example</ groupId> < artifactId> springboot_demo</ artifactId> < version> 0.0.1-SNAPSHOT</ version> < packaging> war</ packaging> < name> springboot_demo</ name> < description> springboot_demo</ description> < properties> < java.version> 1.8</ java.version> </ properties> < dependencies> < dependency> < groupId> commons-codec</ groupId> < artifactId> commons-codec</ artifactId> < version> 1.9</ version> </ dependency> < dependency> < groupId> io.jsonwebtoken</ groupId> < artifactId> jjwt</ artifactId> < version> 0.9.1</ version> </ dependency> < dependency> < groupId> javax.servlet</ groupId> < artifactId> jstl</ artifactId> < version> 1.2</ version> </ dependency> < dependency> < groupId> taglibs</ groupId> < artifactId> standard</ artifactId> < version> 1.1.0</ version> </ dependency> < dependency> < groupId> org.springframework.boot</ groupId> < artifactId> spring-boot-starter-web</ artifactId> </ dependency> < dependency> < groupId> org.springframework.boot</ groupId> < artifactId> spring-boot-starter-tomcat</ artifactId> < scope> provided</ scope> </ dependency> < dependency> < groupId> org.springframework.boot</ groupId> < artifactId> spring-boot-starter-test</ artifactId> < scope> test</ scope> </ dependency> < dependency> < groupId> mysql</ groupId> < artifactId> mysql-connector-java</ artifactId> < version> 8.0.28</ version> </ dependency> < dependency> < groupId> com.baomidou</ groupId> < artifactId> mybatis-plus-boot-starter</ artifactId> < version> 3.5.2</ version> </ dependency> < dependency> < groupId> com.baomidou</ groupId> < artifactId> mybatis-plus-generator</ artifactId> < version> 3.5.1</ version> </ dependency> < dependency> < groupId> org.freemarker</ groupId> < artifactId> freemarker</ artifactId> < version> 2.3.31</ version> </ dependency> </ dependencies> < build> < plugins> < plugin> < groupId> org.springframework.boot</ groupId> < artifactId> spring-boot-maven-plugin</ artifactId> </ plugin> </ plugins> </ build> </ project>