0

0

以Servlet+JSP+JavaBean为基础模式的开发的购物车

巴扎黑

巴扎黑

发布时间:2017-08-10 15:16:15

|

2347人浏览过

|

来源于php中文网

原创

上一篇以一个最常用的用户登录注册程序来讲解servlet+jsp+javabean开发模式,所以我们也初步了解了servlet+jsp+javabean(mvc)模式。现在我们以一个网上购物时的购物车程序来重新回顾这种开发模式。

创建MVC架构的Web项目

在Eclipse中新创建一个day10项目,导入项目所需要的开发包(jar包),创建项目所需要的包,在java开发中,架构的层次是以包的形式体现出来的。
项目所需要的开发包(jar包)

序号 开发包名称 描述
1 stl-1.2.jar jstl标签库和EL表达式依赖包

注释:不同于上一篇的用户登录注册程序,该购物车程序是创建一个类来代表数据库,所以不需要用到其他一些jar包,只需用到stl-1.2.jar就行。
项目所需要的包

序号 包名 描述 所属层次
1 cn.itcast.DB 存放代表数据库的类
2 cn.itcast.domain 存放系统的JavaBean类(只包含简单的属性以及属性对应的get和set方法,不包含具体的业务处理方法),提供给【数据访问层】、【业务逻辑层】、【Web层】来使用 domain(域模型)层
3 cn.itcast.dao 存放访问数据库的操作接口的实现类 数据访问层
4 cn.itcast.service 存放处理系统业务接口的实现类 业务逻辑层
5 cn.itcast.web.controller 存放作为系统控制器的Servlet(处理请求的servlet) Web层(表现层)
6 cn.itcast.web.UI 给用户提供用户界面。由于在严格的MVC模式下,jsp被保护起来,禁止外界直接访问,如用户要注册,需要拿一个表单页面,需要用一个servlet转到jsp上面去,有一部分servlet专门给用户提供用户界面,也即是说在实际开发里面有一部分servlet是用来处理请求,有一部分servlet专门用来接收请求之后转到jsp,给用户提供用户界面 Web层(表现层)
7 cn.itcast.utils 存放系统的通用工具类,提供给【数据访问层】、【业务逻辑层】、【Web层】来使用

以上就是根据此项目的实际情况创建的包,可能还需要创建其他的包,这个得根据项目的需要来定了。  
创建代表数据库的类
假设这是一个网上书城的项目,用户购买的商品即为书,所以在数据库中存储的商品就是书。在cn.itcast.DB包下创建一个DB类。
这里写图片描述
DB类具体代码如下:

public class DB {    private static Map map = new LinkedHashMap();

    static {        map.put("1", new Book("1", "javaweb开发", "老张", 38, "一本好书"));        map.put("2", new Book("2", "jdbc开发", "老黎", 18, "一本好书"));        map.put("3", new Book("3", "ajax开发", "老佟", 328, "一本好书"));        map.put("4", new Book("4", "jbpm开发", "老毕", 58, "一本好书"));        map.put("5", new Book("5", "struts开发", "老方", 28, "一本好书"));        map.put("6", new Book("6", "spring开发", "老方", 98, "一本好书"));
    }    public static Map getAll() {        return map;
    }
}1234567891011121314151617

注释:关于怎样创建代表数据库的类——DB.java,可参考我的使用Cookie进行会话管理
在WEB-INF目录下创建一个jsp目录,jsp目录存放系统的一些受保护(不允许用户直接通过URL地址访问)的jsp页面,用户要想访问这些受保护的jsp页面,那么只能通过cn.itcast.web.UI这个包里面的Servlet。
创建好的项目架构如下图所示:  
这里写图片描述

立即学习Java免费学习笔记(深入)”;

分层架构的代码编写

分层架构的代码也是按照【域模型层(domain)】→【数据访问层(dao、dao.impl)】→【业务逻辑层(service、service.impl)】→【表现层(web.controller、web.UI、web.filter、web.listener)】→【工具类(util)】→【测试类(junit.test)】的顺序进行编写的。

开发domain层

在cn.itcast.domain包下创建一个Book类。
这里写图片描述
Book类具体代码如下:

public class Book {    private String id;    private String name;    private String author;    private double price;    private String description;    public Book() {        super();        // TODO Auto-generated constructor stub
    }    public Book(String id, String name, String author, double price, String description) {        super();        this.id = id;        this.name = name;        this.author = author;        this.price = price;        this.description = description;
    }    public String getId() {        return id;
    }    public void setId(String id) {        this.id = id;
    }    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public String getAuthor() {        return author;
    }    public void setAuthor(String author) {        this.author = author;
    }    public double getPrice() {        return price;
    }    public void setPrice(double price) {        this.price = price;
    }    public String getDescription() {        return description;
    }    public void setDescription(String description) {        this.description = description;
    }

}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253

开发数据访问层(dao、dao.impl)

在cn.itcast.dao包下创建一个UserDao类。
这里写图片描述
UserDao类具体代码如下:

public class BookDao {    public Map getAll() {        return DB.getAll();
    }    public Book find(String id) {        return DB.getAll().get(id);
    }

}1234567891011

开发service层(service层对web层提供所有的业务服务)

我们在第一次开发一个新项目的过程当中,并不清楚要开发的所有项目的功能,所以我们可以先开发出最容易想到的功能,然后将自己伪装成一个用户,在浏览网站页面的过程中,看用户需要什么功能,那我们程序员就开发什么功能,然后步步为营,将整个项目的功能完成。
例如,我第一次开发这个购物车功能模块的过程当中,首先想到的是要给用户展示所有书籍,以及根据书的ID查询书的信息。其他的功能我没想到,所以可以等这些功能完成之后,根据前端页面来看需要什么功能。
在cn.itcast.service包下创建一个BusinessService类。  
这里写图片描述
先编写实现如下两个业务服务的BusinessService类。

  • 给用户展示所有书籍

  • 根据书的ID查询书的信息

具体代码如下:

// 业务类,统一对web层提供所有服务public class BusinessService {    private BookDao dao = new BookDao();    public Map getAllBook() {        return dao.getAll();
    }    public Book findBook(String id) {        return dao.find(id);
    }
}12345678910111213

开发Web层

开发给用户展示所有书籍的功能

在cn.itcast.web.controller包下编写用于处理给用户展示所有书籍的ListBookServlet。  
这里写图片描述
ListBookServlet类的具体代码如下:

// 获取所有书public class ListBookServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        BusinessService service = new BusinessService();
        Map map = service.getAllBook();
        request.setAttribute("map", map);

        request.getRequestDispatcher("/WEB-INF/jsp/listbook.jsp").forward(request, response);

    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}12345678910111213141516171819

在/WEB-INF/jsp/目录下编写给用户展示所有书籍的jsp页面listbook.jsp。
这里写图片描述  
凡是位于WEB-INF目录下的jsp页面是无法直接通过URL地址直接访问的。在开发中如果项目中有一些敏感web资源不想被外界直接访问,那么可以考虑将这些敏感的web资源放到WEB-INF目录下,这样就可以禁止外界直接通过URL来访问了。
listbook.jsp页面的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>书籍列表页面    

书籍列表

书名 作者 售价 描述 操作
${entry.value.name } ${entry.value.author } ${entry.value.price } ${entry.value.description } 购买
12345678910111213141516171819202122232425262728293031323334

网站一般都有一个首页,在该项目中我们的首页index.jsp中,用户点击浏览书籍超链接即可浏览网站所有书籍。
index.jsp页面的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>网站首页    浏览书籍123456789101112

至此,给用户展示所有书籍的功能就算是开发完成了!下面测试一下开发好的该功能:  
这里写图片描述

开发购买书籍的功能

在现实中购买商品时,用户都是将商品放到购物车中,所以我们应该按照现实中的情况设计一个代表用户购物车的类——Cart.java。
现在再来思考一个问题:在设计代表用户购物车的Cart类时,应该使用private Book book字段(或属性)来代表用户所购买的商品吗?
答案显然不是。若是使用这样的字段,结果就是不可避免地在购物车中出现重复商品,即用户如果购买一本书多次,那么购物车中就出现一本书多次,显然在现实中这是不合理的。那么到底该怎么做呢?——为了避免在购物车里面出现重复商品,我们这时会设计一个专门的对象——CartItem(购物项,代表某个商品以及这个商品出现的次数)
在cn.itcast.domain包下创建一个CartItem类,用于代表某个商品,以及商品出现的次数(购物项)。
这里写图片描述
CartItem类的具体代码如下:

// 用于代表某个商品,以及商品出现的次数(购物项)public class CartItem {    private Book book;    private int quantity;    private double price;    public Book getBook() {        return book;
    }    public void setBook(Book book) {        this.book = book;
    }    public int getQuantity() {        return quantity;
    }    public void setQuantity(int quantity) {        this.quantity = quantity;        this.price = this.book.getPrice() * this.quantity;
    }    public double getPrice() {        return price;
    }    public void setPrice(double price) {        this.price = price;
    }

}12345678910111213141516171819202122232425262728

在cn.itcast.domain包中创建一个代表用户购物车的Cart类。
这里写图片描述
Cart类的具体代码如下:

// 代表用户的购物车public class Cart {    /*
     * 为了避免在购物车里面出现重复商品,
     * 我们这时会设计一个专门的对象——CartItem(购物项,代表某个商品以及这个商品出现的次数)
     */    private Map map = new LinkedHashMap<>();    private double price; // 记住购物车中的所有商品多少钱    public void add(Book book) {        // 看购物车中有没有,要添加的书对应的购物项
        CartItem item = map.get(book.getId());        if(item==null) {
            item = new CartItem();
            item.setBook(book);
            item.setQuantity(1);
            map.put(book.getId(), item);
        } else {
            item.setQuantity(item.getQuantity()+1);
        }
    }    public Map getMap() {        return map;
    }    public void setMap(Map map) {        this.map = map;
    }    public double getPrice() {        double totalprice = 0;        for(Map.Entry entry : map.entrySet()) {
            CartItem item = entry.getValue();
            totalprice += item.getPrice();
        }        this.price = totalprice;        return price;
    }    public void setPrice(double price) {        this.price = price;
    }

}12345678910111213141516171819202122232425262728293031323334353637383940414243

用户浏览网站首页时,会看到网站所有书籍,用户即可对自己感兴趣的书籍进行购买,点击购物超链接时,跳转到一个servlet对用户的请求进行处理。所以在cn.itcast.web.controller包中创建一个代表完成书籍购买的BuyServlet类。
这里写图片描述
BuyServlet类的具体代码如下:

// 完成书籍购买@WebServlet("/BuyServlet")public class BuyServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {

        String id = request.getParameter("id");
        BusinessService service = new BusinessService();
        Book book = service.findBook(id);        // 得到用户的购物车
        Cart cart = (Cart) request.getSession().getAttribute("cart");        // 用户第一次购买,为用户创建购物车        if(cart==null) {
            cart = new Cart();
            request.getSession().setAttribute("cart", cart);
        }        // 把书加到用户的购物车中,完成购买
        cart.add(book);        /* 
         * 浏览器重新访问地址:/WEB-INF/jsp/listcart.jsp
         * 但这个地址被保护起来,外面是无法直接访问的,
         * 要实现的话,会比较麻烦,需要先跳到servlet,然后再转到jsp。
         */        // response.sendRedirect("/WEB-INF/jsp/listcart.jsp");

        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}1234567891011121314151617181920212223242526272829303132333435363738

注意:显示购物车时,记住千万不要用请求转发,而应该使用重定向技术。若不是产生的后果可参考我的笔记Session——使用Session完成简单的购物功能。我上面的代码使用的是请求转发,这是不行的,读者要注意了啊!既然要使用重定向技术,下面这行代码可行吗?

response.sendRedirect("/WEB-INF/jsp/listcart.jsp");1

答案不言而喻,这是不行的。因为这是浏览器重新访问地址/WEB-INF/jsp/listcart.jsp,listcart.jsp页面是被保护起来了,外界是无法直接访问的。如果一定要实现的话,会比较麻烦,还需要先跳到一个servlet,然后再跳转到listcart.jsp。所以正规的做法是:BuyServlet类中使用重定向技术,即添加如下代码:

response.sendRedirect(request.getContextPath()+"/ListCartUIServlet");1

然后在cn.itcast.web.UI包下创建一个ListCartUIServlet类,专门用来接收请求之后转到jsp,给用户提供用户界面。
这里写图片描述
ListCartUIServlet类的具体代码如下:

public class ListCartUIServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}12345678910111213

这毕竟不是一个真实项目,所以不想把其搞得这么复杂哈!所以就干脆用了请求转发,但是读者一定要知道这还是不行的,要知道用重定向技术,怎么使用我也已经写的很明白了!
购物车显示页面listcart.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>购物车列表    

购物车列表

您没有购买任何商品!!!
书名 作者 单价 数量 小计 操作
${entry.value.book.name } ${entry.value.book.author } ${entry.value.book.price } ${entry.value.price } 删除
总价 ${cart.price }元 清空购物车
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293

至此,用户购买书籍的功能就算是开发完成了!下面测试一下开发好的该功能:  
这里写图片描述

迷你天猫商城
迷你天猫商城

迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。所有页面均兼容IE10及以上现代浏览器。部署方式1、项目

下载

开发删除购物车中购物项的功能

编写实现如下业务服务的BusinessService类。

  • 删除购物车中购物项

此时BusinessService类的具体代码如下:

// 业务类,统一对web层提供所有服务public class BusinessService {    private BookDao dao = new BookDao();    public Map getAllBook() {        return dao.getAll();
    }    public Book findBook(String id) {        return dao.find(id);
    }    // 删除购物车中购物项    public void deleteCartItem(String id, Cart cart) {
        cart.getMap().remove(id);
    }

}12345678910111213141516171819

在cn.itcast.web.controller下创建一个DeleteItemServlet类。
这里写图片描述
DeleteItemServlet类的具体代码如下:

public class DeleteItemServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {

        String id = request.getParameter("id");
        Cart cart = (Cart) request.getSession().getAttribute("cart");

        BusinessService service = new BusinessService();
        service.deleteCartItem(id, cart);        // 删除成功,还是跳转到listcart.jsp页面
        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}123456789101112131415161718192021

注意:我上面的代码使用的是请求转发,这依然是不行的,读者要注意了啊!仍然要使用请求重定向,考虑到这毕竟不是一个真实项目,所以尽量不要搞得那么复杂,一切从简。
在购物车显示页面listcart.jsp中还要写入以下JavaScript代码:

123456789

不然的话,用户手贱,不小心删除了所选的购物项,辛辛苦苦购买的商品又要重新购买,用户的感受肯定巨不爽,所以在用户不小心删除了所选的购物项时,还要问用户是否确认删除。只有用户点击确认按钮才会删除,这样对用户来说,体验会更好。
至此,删除购物车中购物项的功能就算是开发完成了!下面测试一下开发好的该功能:
这里写图片描述

开发清空购物车的功能

编写实现如下业务服务的BusinessService类。

  • 清空购物车

编写对应的清空购物车的方法时,由于代表用户购物车的Cart类存在session中,是不是可以像下面这样写呢?

public void clearCart(HttpSession session) {    ...     }123

答:不可以。业务逻辑层用到Web层对象——session,业务逻辑层和Web层牢牢绑定在一起了,业务逻辑层离开Web层就跑不起来了,如果这样写,若要对业务层进行测试,需要把Web服务器起起来,传一个session进去,所以在各层之间传递的只能是JavaBean,不能让Web层的特殊对象侵入到业务逻辑层,污染业务逻辑层
此时BusinessService类的具体代码如下:

// 业务类,统一对web层提供所有服务public class BusinessService {    private BookDao dao = new BookDao();    public Map getAllBook() {        return dao.getAll();
    }    public Book findBook(String id) {        return dao.find(id);
    }    // 删除购物车中购物项    public void deleteCartItem(String id, Cart cart) {
        cart.getMap().remove(id);
    }    // 清空购物车    public void clearCart(Cart cart) {
        cart.getMap().clear();
    }

}123456789101112131415161718192021222324

在cn.itcast.web.controller包下创建一个ClearCartServlet类。
这里写图片描述
ClearCartServlet类的具体代码如下:

public class ClearCartServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {

        Cart cart = (Cart) request.getSession().getAttribute("cart");

        BusinessService service = new BusinessService();
        service.clearCart(cart);

        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}12345678910111213141516171819

注意:我上面的代码使用的是请求转发,这依然是不行的,读者要注意了啊!仍然要使用请求重定向,考虑到这毕竟不是一个真实项目,所以尽量不要搞得那么复杂,一切从简。
在购物车显示页面listcart.jsp中还要写入以下JavaScript代码:

12345678

不然的话,用户手贱,不小心清空了购物车,辛辛苦苦购买的商品又要重新购买,用户的感受肯定巨不爽,所以在用户不小心清空了购物车时,还要问用户是否确认清空。只有用户点击确认按钮才会清空,这样对用户来说,体验会更好。
还有一点要注意:如果用户清空了购物车,那么购物车显示页面不能没有任何显示,这也是对用户体验的一种折磨,明智的做法应该是给用户显示您没有购买任何商品!!!,这样用户体验会更好。那怎样判断用户有没有购买商品呢?——可使用el表达式的函数:empty(object),检测object对象是否为null或”“,若是则返回true。这样购物车显示页面listcart.jsp页面中的关键代码如下:

购物车列表

您没有购买任何商品!!! ...12345678

至此,清空购物车的功能就算是开发完成了!下面测试一下开发好的该功能:
这里写图片描述

开发改变购物车某购物项数量的功能

在现实中的购物中,当用户购买一件商品时,发现还需要购买这件商品,比如数量为100,用户不可能点击这件商品100次,若是这样,那这样的购物网站倒闭1万亿遍了。所以一般来说用户只需要改变其数量即可,这时就需要用到控件,而且用户要输入的数量要是一个正整数,不能是其他乱七八糟的东西。
编写实现如下业务服务的BusinessService类。

  • 改变购物车某购物项的数量

此时BusinessService类的具体代码如下:

// 业务类,统一对web层提供所有服务public class BusinessService {    private BookDao dao = new BookDao();    public Map getAllBook() {        return dao.getAll();
    }    public Book findBook(String id) {        return dao.find(id);
    }    // 删除购物车中购物项    public void deleteCartItem(String id, Cart cart) {
        cart.getMap().remove(id);
    }    // 清空购物车    public void clearCart(Cart cart) {
        cart.getMap().clear();
    }    // 改变购物车某购物项的数量    public void changeItemQuantity(String id, String quantity, Cart cart) {
        CartItem item = cart.getMap().get(id);
        item.setQuantity(Integer.parseInt(quantity));
    }

}123456789101112131415161718192021222324252627282930

在cn.itcast.web.controller中创建ChangeQuantityServlet类。
这里写图片描述
ChangeQuantityServlet类的具体代码如下:

// 把购物车中的书修改为指定数量public class ChangeQuantityServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {

        String id = request.getParameter("id");
        String quantity = request.getParameter("quantity");

        Cart cart = (Cart) request.getSession().getAttribute("cart");

        BusinessService service = new BusinessService();
        service.changeItemQuantity(id, quantity, cart);

        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}1234567891011121314151617181920212223

注意:我上面的代码使用的是请求转发,这依然是不行的,读者要注意了啊!仍然要使用请求重定向,考虑到这毕竟不是一个真实项目,所以尽量不要搞得那么复杂,一切从简。
在购物车显示页面listcart.jsp中还要写入以下JavaScript代码:

1234567891011121314151617

完整的购物车显示页面listcart.jsp代码前面已经给出了,这里不再赘写。
至此,改变购物车某购物项数量的功能就算是开发完成了!下面测试一下开发好的该功能:
这里写图片描述

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.06

java多线程方法汇总
java多线程方法汇总

本专题整合了java多线程面试题、实现函数、执行并发相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.06

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

90

2026.02.06

快手网页版入口与电脑端使用指南 快手官方短视频观看入口
快手网页版入口与电脑端使用指南 快手官方短视频观看入口

本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。

15

2026.02.06

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

10

2026.02.06

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

6

2026.02.06

JavaScript 异步编程与事件驱动架构
JavaScript 异步编程与事件驱动架构

本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。

7

2026.02.06

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

25

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

28

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Tomcat核心原理解析
Tomcat核心原理解析

共57课时 | 7万人学习

React 教程
React 教程

共58课时 | 4.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号