源码获取:博客首页 "资源" 里下载!

项目介绍

SpringBoot在线订餐系统项目。主要功能说明:

分为两个角色,餐厅老板和普通用户
餐厅老板可以登录,注册,可以在后台设置菜品目录,菜品详情,查看订单,用户管理,个人中心等
用户查看首页菜品信息,登录后可以点餐,形成购物车,支付后会出现订单详情

请用电脑浏览器打开

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目

6.数据库:MySql 5.7版本;

技术栈

后端框架:SpringBoot + MybatisPlus
模板引擎:Thymeleaf
前端框架:BootStrap
JS技术 :JQuery + Ajax

设计亮点:用Spring-Security5代替传统的Session拦截页面

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,下载所需jar包;
3. 将项目中applicaion.yml配置文件中的数据库配置改为自己的配置
4. 配置tomcat,然后运行项目,输入localhost:8080/xxx 登录

 

 

 

 

后台订单相关controller: 

/**
 * @author yy  后台订单相关controller
 */

@Controller
public class Back_OrderController {

    @Autowired
    private OrderService orderService;
    @Autowired
    private UserService userService;
    @Autowired
    private EvaService evaService;

    /**
     * 跳转到订单详情页面--并展示订单详情
     * @return
     */
    @RequestMapping("/admin/toOrderList")
    public String orderForm(@RequestParam(required = true, defaultValue = "1") Integer page, Model model) {
        PageHelper.startPage(page, 5);
        List<Order> orderAll = orderService.findOrderAll();
        model.addAttribute("order",orderAll);
        PageInfo<Order> pageInfo = new PageInfo<>(orderAll);
        model.addAttribute("page", pageInfo);
        return "/admin/order/order_list";
    }

    @RequestMapping("/admin/deleteOrder")
    public String deleteOrder(String orderId){
        orderService.deleteOrder(orderId);
        return "redirect:/admin/toOrderList";
    }
    /**
     * 修改后台订单状态
     * @param orderId
     * @param orderStatus
     * @return
     */
    @RequestMapping("/admin/updateAdminOrderStatus")
    public String updateAdminOrderStatus(String orderId,Integer orderStatus){
        orderService.updateOrderStatus(orderStatus,orderId);
        return "redirect:/admin/toOrderList";
    }

    /**
     * 跳转到回复评论界面
     * @param orderId
     * @param model
     * @return
     */
    @RequestMapping("/admin/toAnsEva")
    public String toAnsEva(String orderId,Model model){
        Evaluate evaluate = evaService.findEvaListByOrderId(orderId);
        model.addAttribute("evaluate",evaluate);
        return "/admin/adminAnsEva";
    }
    @RequestMapping("/admin/ansEva")
    public String ansEva(String orderId,String ansContent,Integer orderStatus){
        evaService.saveAnsEva(orderId,ansContent);
        orderService.updateOrderStatus(orderStatus,orderId);
        return "redirect:/admin/toOrderList";
    }
    //跳转到订单详情页面
    @RequestMapping("/admin/orderDetailed")
    public String orderDetailed(String orderId,Model model){

        Order order =  orderService.findListByOrderId(orderId);
        model.addAttribute("order",order);
        return "/admin/order/order_detailed";
    }


    /**
     * 根据订单状态查询订单
     */
    @RequestMapping("/admin/searchOrderList")
    public String searchOrderList(Integer status,Model model){
        List<Order> orderList = orderService.findOrderByStatus(status);
        model.addAttribute("orderList",orderList);
        return "/admin/toOrderList";
    }


    /*
     * 导出到excel
     * @return
     */
    @RequestMapping("/admin/downloadInfoToExcel")
    public ModelAndView downloadInfoToExcel() {
        System.out.println("导出到excel");
        ModelAndView mv = new ModelAndView();
        try {
            //1-根据id数组获取数据库数据
            List<Object> dataList = getExcelDataList();
            //2-获取列标题和封装数据
            Map<String, Object> dataMap = getTitleArrayAndVarList(dataList);
            //3-获取Excel表格文件名和表格标题
            Map<String, String> excelMap = getExcelTitleAndFileName();
            //4-创建AbstractExcelView
            AbstractExcelView erv = getAbstractExcelView(excelMap);
            //ObjectExcelViewOrderOperation erv = new ObjectExcelViewOrderOperation(excelMap.get("fileName"),excelMap.get("excelTitle"));
            mv = new ModelAndView(erv, dataMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mv;
    }

    /**
     *@描述 1-1-从数据库获取数据
     */
    protected  List<Object> getExcelDataList(){
        try {
            List<Object> dataList = orderService.find4ExcelDown();
            return dataList;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     *@描述 1-2-导出Excel-自定义列标题和数据
     */
    protected Map<String,Object> getTitleArrayAndVarList(List<Object> dataList) {
        Map<String,Object> dataMap = new HashMap<String,Object>();
        //1-标题
        String[] titleArray = {
                "订单序号",
                "订单编号",
                "订单金额",
                "收货人",
                "收获地址",
                "下单时间",
                "订单状态"
        };
        dataMap.put("titles", Arrays.asList(titleArray));
        //2-数据
        List<OrderExcelExportVO> varList = new ArrayList<OrderExcelExportVO>();
        for(int i=0;i<dataList.size();i++){
            OrderExcelExportVO data = (OrderExcelExportVO)dataList.get(i);
            List<Object> vpd = new ArrayList<>();
            varList.add(data);
        }
        dataMap.put("varList", varList);

        return dataMap;
    }
    /**
     *@描述 1-3-导出excel-自定义Excel标题和文件名
     */
    protected Map<String,String> getExcelTitleAndFileName(){
        Map<String,String> excelMap = new HashMap<String,String>();
        excelMap.put("excelTitle","订单信息表格");//excel标题
        DateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String time = sdf.format(new Timestamp(System.currentTimeMillis()));
        excelMap.put("fileName","订单信息表格" + time);//文件名
        return excelMap;
    }
    /**
     *@描述 1-4-创建AbstractExcelView
     */
    protected AbstractExcelView getAbstractExcelView(Map<String, String> excelMap){
        try {
            ObjectExcelViewOrder erv = new ObjectExcelViewOrder(excelMap.get("fileName"),excelMap.get("excelTitle"));
            return erv;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

后端product模块相关的controller:

/**
 * @author yy 后端product模块相关的controller
 */
@Controller
public class Back_ProductController {

    @Autowired
    private ProductService productService;

    @Autowired
    private ProductKindService productKindService;

    /**
     * 按条件查找数据--模糊查询
     * @return
     */
    @RequestMapping("/admin/toSelect")
    public String toSelect(@RequestParam("Pname") String Pname, Model model) {
        List<Product> list = productService.findAllProductCondition(Pname);
        model.addAttribute("productList", list);
        return "/admin/product/product_list";
    }

    /**
     *
     * 后台展示商品列表
     */
    @RequestMapping("/admin/toProductList")
    public String toProductList(@RequestParam(required = true, defaultValue = "1") Integer page,
                                Model model,String errorInfo) {
        if(StringUtil.isNotEmpty(errorInfo)){
            model.addAttribute("errorInfo",errorInfo);
        }
        PageHelper.startPage(page, 10);
        //查询所有的商品信息
        List<Product> productList = productService.findAllProductList();
        model.addAttribute("productList", productList);
        PageInfo<Product> pageInfo = new PageInfo(productList);
        model.addAttribute("page", pageInfo);
        return "/admin/product/product_list";
    }

    /**
     * 去添加商品页面
     */
    @RequestMapping("/admin/toAddProductView")
    public String toAddProductView() {
        return "/admin/product/product_edit";
    }
    /**
     * 新增商品
     */
    @RequestMapping("/admin/addNewProduct")
    public String addNewProduct(MultipartFile imageUrl, HttpServletRequest request,Product product, BindingResult bindingResult){
        //1-依次 得到图片的后缀名、得到菜品的种类、生成新的图片名
        String suffix = imageUrl.getOriginalFilename().substring(imageUrl.getOriginalFilename().lastIndexOf("."));
       // int kindId = product.getProductKindId();
        String newPicName = UUIDUtils.getUUID15()+suffix;
        //2-获取项目路径  指定图片按照商品的分类存放 id为1的图片 放置/static/pro/upload/下的1文件夹里
        ServletContext sc = request.getSession().getServletContext();
        String localPath = "/static/pro/upload/";
        //String localPath = "/static/pro/upload/"+kindId+"/";
        String path = sc.getRealPath(localPath);
        //2-2-如果图片不为空 以流的形式存放到指定的文件夹中
        FileOutputStream fos = null;
        InputStream in = null;
        if (!imageUrl.isEmpty()){
            try{
                fos = new FileOutputStream(path + newPicName);
                in = imageUrl.getInputStream();
                int b = 0;
                while((b = in.read()) != -1){
                    fos.write(b);
                }
                //2-3关闭流
                fos.close();
                in.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //3-保存商品的信息到数据库中
        product.setImageUrl(localPath+newPicName);
        productService.addOne(product);
        return "redirect:/admin/toProductList";
    }

    /**
     * 修改商品的信息  数据回显
     * @return
     */
    @RequestMapping("/admin/updateProductView")
    public String updateProductView(Integer id, Model model) {
        Product dbproduct = productService.findProductById(id);
        model.addAttribute("flag","update");
        model.addAttribute("product", dbproduct);
        return "/admin/product/product_edit";
    }

    /**
     * 更新商品信息
     */
    @RequestMapping("/admin/updateProduct")
    public String updateProduct(Product product, BindingResult bindingResult) {
        System.out.println(product.toString());
        productService.updateOne(product);
        return "redirect:/admin/toProductList";
    }

    /**
     * 删除商品
     */
    @GetMapping("/admin/deleteProductById")
    public String deleteProductById(Integer id, RedirectAttributes  redirectAttributes) {
        if(productService.findProductBannerByProductId(id) != null) {
            redirectAttributes.addAttribute("errorInfo","请取消热门关联再进行操作");
            return "redirect:/admin/toProductList";
        }
        productService.deleteById(id);
        return "redirect:/admin/toProductList";
    }

    /**
     * 批量删除商品
     */
    @RequestMapping("/admin/deleteAllProduct")
    public String deleteAll(@RequestParam("id") Integer[] id) {
        productService.deleteAllProduct(id);
        return "redirect:/admin/toProductList";
    }

    /**
     * * 更改商品状态
     */
    @GetMapping("/admin/updateProductStatus")
    public String updateProductStatus(Product product, RedirectAttributes  redirectAttributes){
        if(product.getStatus()==0){
            if(productService.findProductBannerByProductId(product.getId()) != null) {
                redirectAttributes.addAttribute("errorInfo","请取消热门关联再进行操作");
                return "redirect:/admin/toProductList";
            }
        }

        productService.updateProductStatusById(product);
        return "redirect:/admin/toProductList";
    }

    /**
     * 后台展示商品分类
     * @return
     */
    @RequestMapping("/admin/toProductClassifyList")
    public String categoryManage(@RequestParam(required = true, defaultValue = "1") Integer page,Model model) {
        PageHelper.startPage(page, 10);
        //1-查询全部商品类别
        List productKindList = productService.findAllProductKindNameList();
        model.addAttribute("productKindList",productKindList);
        PageInfo<ProductKind> pageInfo = new PageInfo<ProductKind>(productKindList);
        model.addAttribute("page", pageInfo);
        return "/admin/product/productclassify_list";
    }

    /**
     * 添加商品类别
     */
    @RequestMapping("/admin/addClassify")
    public String toAddClassify(ProductKind productKind){
        productKindService.addProductKind(productKind);
        return "redirect:/admin/toProductClassifyList";
    }

    /**
     * 修改商品类别
     */
    @RequestMapping("/admin/updateClassify")
    public String toUpdateClassify(Integer id,String updateKindName){
        ProductKind productKindUpdate = new ProductKind(id,updateKindName);
        productKindService.updateProductKind(productKindUpdate);
        return "redirect:/admin/toProductClassifyList";
    }

    /**
     * 删除商品类别
     */
    @RequestMapping("/admin/deleteKindById")
    public String deleteClassify(Integer kindId){
        ProductKind productKindDel = new ProductKind(kindId);
        productKindService.deleteProductKind(productKindDel);
        return "redirect:/admin/toProductClassifyList";
    }

    /**
     * 批量删除 商品类别
     */
    @RequestMapping("/admin/batchtDeleteProduct")
    public String batchDeleteClassify(@RequestParam("id") Integer[] kindIds){
        productKindService.batchDeletekind(kindIds);
        return "redirect:/admin/toProductClassifyList";
    }

    /**
     * 查询全部分类
     */
    @RequestMapping(value="/admin/productKind/list",produces = "application/json;charset=utf-8")
    @ResponseBody
    public Object productKind(){
        List productKindList= productService.findAllProductKindNameList();
        return ResponseMessageEnum.SUCCESS.appendObjectToString(productKindList);
    }

//---------------------------------------------------------------------------------------------------------------

    @RequestMapping("/admin/toProductBanner")
    public String toProductBanner(Model model,@RequestParam(required = true, defaultValue = "1") Integer page){
        PageHelper.startPage(page,5);
        List<ProductBanner> productBannerList = productService.findAllProductBanner();
        PageInfo<ProductBanner> pageInfo = new PageInfo<>(productBannerList);
        model.addAttribute("page",pageInfo);
        model.addAttribute("productBannerList",productBannerList);
        return "/admin/product/product_banner_list";
    }

    @RequestMapping("/admin/toAddProductBanner")
    public String toAddProductBanner(){
        return "/admin/product/product_banner_edit";
    }

    /**
     *选择上架状态 并且未关联热门的商品
     */
    @GetMapping(value = "/admin/validProduct/list" ,produces = "application/json;charset=utf-8")
    @ResponseBody
    public Object getValidProduct(){
        List<Product> validProductList = new ArrayList<>();
        productService.findAllProductList().
                stream().filter(product -> product.getStatus() == 1).       //过滤上架的商品
                collect(Collectors.toList()).forEach(product ->{
                    if (productService.findProductBannerById(product.getId()) == null){ //过滤未关联的商品
                        validProductList.add(product);
                    }
        });
        return ResponseMessageEnum.SUCCESS.appendObjectToString(validProductList);
    }


    @RequestMapping("/admin/addNewProductBanner")
    public String addNewProductBanner(ProductBanner productBanner){
        productService.addNewProductBanner(productBanner);
        return "redirect:/admin/toProductBanner";
    }
    /**
     * 删除商品类别
     */
    @RequestMapping("/admin/deleteProductBanner")
    public String deleteProductBanner(Integer id){
        productService.deleteProductBanner(id);
        return "redirect:/admin/toProductBanner";
    }

    @RequestMapping("/admin/updateProductBannerStatus")
    public String updateProductBannerStatus(Integer id){
        ProductBanner dbProductBanner = productService.findProductBannerById(id);
        ProductBanner productBanner = new ProductBanner(id);
        if(dbProductBanner.getStatus() == 1){
            productBanner.setStatus(0);
            productService.updateProductBanner(productBanner);
        }else{
            productBanner.setStatus(1);
            productService.updateProductBanner(productBanner);
        }
        return "redirect:/admin/toProductBanner";
    }

    @PostMapping("/admin/checkStatus")
    @ResponseBody
    public Integer checkStatus(Integer productId){
        //针对下架操作 校验是否关联热门
            System.out.println("2");
            ProductBanner dbProductBanner = productService.findProductBannerByProductId(productId);
            if(dbProductBanner == null){
                return ResponseMessageEnum.SUCCESS.getCode();
            }
            return  ResponseMessageEnum.FAIL.getCode();
    }

    public static void main(String[] args) {
      /*  File picture = new File("logo.jpg");
        String suffix = picture.getName().substring(picture.getName().lastIndexOf("."));
        System.out.println(suffix);


        File dir = new File("src/main/webapp/static/pro/upload/8");
        System.out.println(dir.getAbsolutePath());
        if(!dir.exists()){
            dir.mkdir();
        }

        System.out.println(dir.getAbsolutePath()+"创建成功");
*/
    }


}

前台用户操作管理层:

/**
 * @author yy
 *
 */

@Controller
public class UserController {
    @Autowired
    private OrderService orderService;
    @Autowired
    private UserService userService;
    @Autowired
    private EvaService evaService;
    @Autowired
    private LeaveService leaveService;

    /**
     * 去用户中心
     */
    @GetMapping("/toUserCenter")
    public String toUserCenter(Model model,HttpSession session){
        User user = (User) session.getAttribute("user");
        User userInfos = userService.findUserInfo(user.getId());
        model.addAttribute("userInfos",userInfos);
        return "/pages/user/user_center";
    }

    /**
     * 去我的订单
     */
    @RequestMapping("/toUserOrder")
    public String toUserOrder(@RequestParam(required=true,defaultValue="1") Integer page, HttpSession session, Model model){
        User users = (User) session.getAttribute("user");
        User user = userService.findUserInfo(users.getId());
        //PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
        PageHelper.startPage(page, 3);
        List<Order> orderList = orderService.findOrderListByUserId(users.getId());
        PageInfo<Order> p = new PageInfo<Order>(orderList);
        model.addAttribute("page", p);
        model.addAttribute("orderList",orderList);
        model.addAttribute("user",user);
        return "/pages/user/user_orderlist";
    }    /**
     * 显示收货地址
     * @param model
     * @return
     */
    @RequestMapping("/userAddress")
    public String userAddress(Model model, HttpSession session) {

        User user = (User) session.getAttribute("user");
        User userInfos = userService.findUserInfo(user.getId());
        model.addAttribute("userInfos",userInfos);
        return "/pages/user/user_address";
    }
    /**
     *
     *更新收货地址
     */
    @RequestMapping("/updateAddress")
    public String updateAddress(User user,Model model){
        userService.updateAddress(user);
        return "redirect:/userAddress";
    }

    /**
     * 显示个人中心信息
     * @param model
     * @return
     */
    @RequestMapping("/userAccount")
    public String userAccount(Model model,HttpSession session){
        User user = (User) session.getAttribute("user");
        User userInfos = userService.findUserInfo(user.getId());
        model.addAttribute("userInfos",userInfos);
        return "/pages/user/user_account";
    }

    /**
     * 跳转修改密码界面
     * @return
     */
    @RequestMapping("/updatePassword")
    public String updatePassword(){
        return "/pages/user/user_password";
    }

    /**
     * 修改密码
     * @param oldPwd 旧密码
     * @param newPwd 新密码
     * @param comfirmPwd 确认密码
     * @param model 数据
     * @return
     */
    @RequestMapping("/savePassword")
    public String  saveAddress(
            String oldPwd, String newPwd, String comfirmPwd,Model model,HttpSession session){
       /* User user = (User) session.getAttribute("user");
        if(user == null){
            return "/login";
        }
        User userInfo = userService.findUserInfo(user.getUserId());
        String dbPwd = userInfo.getPassword();
        if(StringUtils.isEmpty(oldPwd) && StringUtils.isEmpty(newPwd) && StringUtils.isEmpty(comfirmPwd)){
            //输入为空
            model.addAttribute("errorInfo","输入为空!");
            return "/pages/user/user_password";
        }else if(!dbPwd.equals(oldPwd)){
            //旧密码不对
            model.addAttribute("errorInfo","旧密码不对!");
            return "/pages/user/user_password";
        }else if(!newPwd.equals(comfirmPwd)){
            //两次密码输入不一致
            model.addAttribute("errorInfo","两次输入密码不一致!");
            return "/pages/user/user_password";
        }else{
            //输入合法,进入修改密码
            userService.updatePwd(comfirmPwd);*/
            return "redirect:/userAccount";
    }

    /**
     * 跳转修改更换手机号界面
     * @return
     */
    @RequestMapping("/updateTel")
    public String updateTel(){
        return "/pages/user/user_telephone";
    }

    /*
     * 更换手机号
     * @param newTel
     * @return
     */
    @RequestMapping("/saveTelephone")
    public String saveTel(String newTel,Model model,HttpSession session){
      /*  String regexMobile = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
        User user = (User) session.getAttribute("user");
        if(user == null){
            return "/login";
        }

        if(!newTel.matches(regexMobile)){
            model.addAttribute("msg","格式不对!");
            return "/pages/user/user_telephone";
        }
        userService.updateTel(newTel,user.getUserId());
        model.addAttribute("msg","修改成功");*/
        return "redirect:/userAccount";
    }

    /**
     * 解绑手机号
     * @return
     */
    @RequestMapping("/deleteTel")
    public String deleteTel(HttpSession session){
       /* User user = (User) session.getAttribute("user");
        userService.deleteTel(user.getUserId());*/
        return "redirect:/userAccount";
    }

    /**
     * 跳转到更换邮箱界面
     * @return
     */
    @RequestMapping("/updateEmail")
    public String updateEmail(){
        return "/pages/user/user_email";
    }

    /**
     * 更换邮箱
     * @param newEmail 新邮箱
     * @return
     */
    @RequestMapping("/saveEmail")
    public String saveEmail(String newEmail,Model model,HttpSession session){
        String regexEmail = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        User user = (User) session.getAttribute("user");
        if(user == null){
            return "/login";
        }
        if (!newEmail.matches(regexEmail)){
            model.addAttribute("msg","格式错误!");
            return "/pages/user/user_email";
        }
       /* userService.updateEmail(user.getUserId(),newEmail);*/
        return "redirect:/userAccount";
    }

    /**
     * 修改订单状态
     * @param status
     * @param orderId
     * @return
     */
    @RequestMapping("/updateOrderStatus")
    public String updateOrderStatus(Integer status,String orderId){
        orderService.updateOrderStatus(status,orderId);
        return "redirect:/toUserOrder";
    }

    /**
     * 跳转评价页面
     */
    @RequestMapping("/toEvaluate")
    public String toEvaluate(String orderId,Integer status,Model model){
        List<String> productNameList = new ArrayList<>();
        orderService.findProductByOrderId(orderId).forEach((product) -> {
            productNameList.add(product.getProductName());
        });
        model.addAttribute("productNameList",productNameList);
        model.addAttribute("orderId",orderId);
        model.addAttribute("status",status);
        return "/pages/user/evaluate";
    }


    /**
     * 发布评论
     */
    @RequestMapping("/saveEva")
    public String saveEva(String orderId,String content,Integer status){
        evaService.saveEva(orderId,content,status);
        return "redirect:/toEvaList";
    }

    /**
     * 用户评价列表
     * @return
     */
    @RequestMapping("/toEvaList")
    public String toEvaList(@RequestParam(required=true,defaultValue="1") Integer page,Model model){
        PageHelper.startPage(page, 4);
        List<Evaluate> evaList = evaService.findAllEvaList();
        //PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
        PageInfo<Evaluate> p=new PageInfo<Evaluate>(evaList);
        model.addAttribute("page", p);
        model.addAttribute("evaList",evaList);
        return "/pages/user/evaluate_list";
    }

    @RequestMapping("/createLeave")
    public String createLeave(String content,HttpSession session){
        User user = (User)session.getAttribute("user");
        leaveService.createLeave(content,user);
        return "redirect:/index";
    }
    @RequestMapping("/aboutUs")
    public String aboutUs(){
        return "/pages/other/about_us";
    }
    @RequestMapping("/userLogout")
    public String userLogout(HttpSession httpSession){
        //将user对象从session域中删除
        httpSession.removeAttribute("user");
        //页面应该跳转到登陆页面
        return "redirect:/index";
    }
}

 源码获取:博客首页 "资源" 里下载!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐