亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java書店系統(tǒng)畢業(yè)設(shè)計 總體設(shè)計(1)

 更新時間:2016年10月11日 09:18:40   作者:xanlv  
這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設(shè)計,第一步系統(tǒng)總體設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下

java書店系統(tǒng)項目功能需求:

1、能進行操作用戶的注冊,修改基本信息,刪除和查詢。
2、能對圖書的基本信息進行增加、刪除、修改和查詢操作。
3、能填寫進貨單,一張進貨單帶有多條具體的進貨信息,進貨的書籍必須是圖書管理里面已經(jīng)有的;進貨的同時修改庫存對應(yīng)書籍的存貨量。
4、能填寫銷售單,一張銷售單帶有多條具體的銷售信息,銷售的書籍必須是圖書管理里面已經(jīng)有的,而且銷售的數(shù)量不能超過當(dāng)前庫存的數(shù)量;銷售的同時修改庫存對應(yīng)書籍的存貨量。
5、可以查看庫存的明細,可以按照條件進行查找具體的圖書的庫存值。
6、權(quán)限方面進行簡化,做固定的權(quán)限控制。把用戶按照模塊分成不同操作權(quán)限的人員,特設(shè)一個admin的用戶,可以操作全部的功能。

項目基本設(shè)計:

★ 架構(gòu)設(shè)計:
整體框架、模塊劃分
模塊劃分:用戶、圖書、進貨、銷售和庫存5個模塊

★ 系統(tǒng)功能結(jié)構(gòu)設(shè)計:
每個功能模塊的具體功能子模塊
★ 數(shù)據(jù)庫設(shè)計:
項目框架實現(xiàn):分模塊、分層、分包、構(gòu)建應(yīng)用程序
核心框架—-實現(xiàn)每個界面的轉(zhuǎn)換

package cn.hncu.bookStore;
import cn.hncu.bookStore.login.ui.Login;
/**
 * 
 *@author<a href="mailto:2402201666@qq.com">xzm</a>
 */
public class bookStoreApp extends javax.swing.JFrame {
 private static final long serialVersionUID = 1L;
 /** Creates new form bookStoreApp */
 public bookStoreApp() {
  initComponents();
  this.setContentPane(new Login(this));//添加登錄界面
  this.validate();
  getContentPane().setLocation(150, 50);
 }
 //GEN-BEGIN:initComponents
 // <editor-fold defaultstate="collapsed" desc="Generated Code">
 private void initComponents() {

  menuBar = new javax.swing.JMenuBar();
  fileMenu = new javax.swing.JMenu();
  openMenuItem = new javax.swing.JMenuItem();
  saveMenuItem = new javax.swing.JMenuItem();
  saveAsMenuItem = new javax.swing.JMenuItem();
  exitMenuItem = new javax.swing.JMenuItem();
  editMenu = new javax.swing.JMenu();
  cutMenuItem = new javax.swing.JMenuItem();
  copyMenuItem = new javax.swing.JMenuItem();
  pasteMenuItem = new javax.swing.JMenuItem();
  deleteMenuItem = new javax.swing.JMenuItem();
  helpMenu = new javax.swing.JMenu();
  contentsMenuItem = new javax.swing.JMenuItem();
  aboutMenuItem = new javax.swing.JMenuItem();
  jMenu1 = new javax.swing.JMenu();
  menuItemUser = new javax.swing.JMenuItem();
  menuItemBook = new javax.swing.JMenuItem();
  menuItemInMain = new javax.swing.JMenuItem();
  MenuItemOutMain = new javax.swing.JMenuItem();
  menuItemStock = new javax.swing.JMenuItem();
  menuItemLogin = new javax.swing.JMenuItem();

  setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  setMinimumSize(new java.awt.Dimension(800, 600));
  getContentPane().setLayout(null);

  fileMenu.setText("File");

  openMenuItem.setText("Open");
  fileMenu.add(openMenuItem);

  saveMenuItem.setText("Save");
  fileMenu.add(saveMenuItem);

  saveAsMenuItem.setText("Save As ...");
  fileMenu.add(saveAsMenuItem);

  exitMenuItem.setText("Exit");
  exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    exitMenuItemActionPerformed(evt);
   }
  });
  fileMenu.add(exitMenuItem);

  menuBar.add(fileMenu);

  editMenu.setText("Edit");

  cutMenuItem.setText("Cut");
  editMenu.add(cutMenuItem);

  copyMenuItem.setText("Copy");
  editMenu.add(copyMenuItem);

  pasteMenuItem.setText("Paste");
  editMenu.add(pasteMenuItem);

  deleteMenuItem.setText("Delete");
  editMenu.add(deleteMenuItem);

  menuBar.add(editMenu);

  helpMenu.setText("Help");

  contentsMenuItem.setText("Contents");
  helpMenu.add(contentsMenuItem);

  aboutMenuItem.setText("About");
  helpMenu.add(aboutMenuItem);

  menuBar.add(helpMenu);

  jMenu1.setText("Menu");

  menuItemUser.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
    java.awt.event.KeyEvent.VK_U,
    java.awt.event.InputEvent.CTRL_MASK));
  menuItemUser.setText("\u7528\u6237\u6a21\u5757");
  menuItemUser.setEnabled(false);
  menuItemUser.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    menuItemUserActionPerformed(evt);
   }
  });
  jMenu1.add(menuItemUser);

  menuItemBook.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
    java.awt.event.KeyEvent.VK_B,
    java.awt.event.InputEvent.CTRL_MASK));
  menuItemBook.setText("\u56fe\u4e66\u6a21\u5757");
  menuItemBook.setEnabled(false);
  menuItemBook.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    menuItemBookActionPerformed(evt);
   }
  });
  jMenu1.add(menuItemBook);

  menuItemInMain.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
    java.awt.event.KeyEvent.VK_I,
    java.awt.event.InputEvent.CTRL_MASK));
  menuItemInMain.setText("\u8fdb\u8d27\u6a21\u5757");
  menuItemInMain.setEnabled(false);
  menuItemInMain.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    menuItemInMainActionPerformed(evt);
   }
  });
  jMenu1.add(menuItemInMain);

  MenuItemOutMain.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
    java.awt.event.KeyEvent.VK_O,
    java.awt.event.InputEvent.CTRL_MASK));
  MenuItemOutMain.setText("\u9500\u552e\u6a21\u5757");
  MenuItemOutMain.setEnabled(false);
  MenuItemOutMain.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    MenuItemOutMainActionPerformed(evt);
   }
  });
  jMenu1.add(MenuItemOutMain);

  menuItemStock.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
    java.awt.event.KeyEvent.VK_S,
    java.awt.event.InputEvent.CTRL_MASK));
  menuItemStock.setText("\u5e93\u5b58\u6a21\u5757");
  menuItemStock.setEnabled(false);
  menuItemStock.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    menuItemStockActionPerformed(evt);
   }
  });
  jMenu1.add(menuItemStock);

  menuItemLogin.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
    java.awt.event.KeyEvent.VK_L,
    java.awt.event.InputEvent.CTRL_MASK));
  menuItemLogin.setText("\u6ce8\u9500");
  menuItemLogin.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) {
    menuItemLoginActionPerformed(evt);
   }
  });
  jMenu1.add(menuItemLogin);

  menuBar.add(jMenu1);

  setJMenuBar(menuBar);

  pack();
 }// </editor-fold>
 //GEN-END:initComponents

 private void menuItemLoginActionPerformed(java.awt.event.ActionEvent evt) {
  //切換到登錄界面,滅掉切換到五個界面的功能菜單
  menuItemBook.setEnabled(false);
  menuItemInMain.setEnabled(false);
  MenuItemOutMain.setEnabled(false);
  menuItemStock.setEnabled(false);
  menuItemUser.setEnabled(false);
  this.setContentPane(new Login(this));
  this.validate();
 }

 void menuItemStockActionPerformed(java.awt.event.ActionEvent evt) {
  //切換到庫存模塊
  this.setContentPane(new cn.hncu.bookStore.store.ui.listPanel(this));
  this.validate();
 }

 void MenuItemOutMainActionPerformed(java.awt.event.ActionEvent evt) {
  //切換到銷售模塊
  this.setContentPane(new cn.hncu.bookStore.out.ui.listPanel(this));
  this.validate();
 }

 void menuItemInMainActionPerformed(java.awt.event.ActionEvent evt) {
  //切換到進貨模塊
  this.setContentPane(new cn.hncu.bookStore.in.ui.listPanel(this));
  this.validate();
 }

 void menuItemBookActionPerformed(java.awt.event.ActionEvent evt) {
  //切換到圖書模塊
  this.setContentPane(new cn.hncu.bookStore.book.ui.listPanel(this));
  this.validate();
 }

 private void menuItemUserActionPerformed(java.awt.event.ActionEvent evt) {
  //切換到用戶模塊
  this.setContentPane(new cn.hncu.bookStore.user.ui.listPanel(this));
  this.validate();
 }

 public javax.swing.JMenuItem getMenuItemOutMain() {
  return MenuItemOutMain;
 }

 public javax.swing.JMenuItem getMenuItemBook() {
  return menuItemBook;
 }

 public javax.swing.JMenuItem getMenuItemInMain() {
  return menuItemInMain;
 }

 public javax.swing.JMenuItem getMenuItemStock() {
  return menuItemStock;
 }

 public javax.swing.JMenuItem getMenuItemUser() {
  return menuItemUser;
 }

 private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
  System.exit(0);
 }//GEN-LAST:event_exitMenuItemActionPerformed

 /**
  * @param args the command line arguments
  */
 public static void main(String args[]) {
  java.awt.EventQueue.invokeLater(new Runnable() {
   public void run() {
    new bookStoreApp().setVisible(true);
   }
  });
 }

 //GEN-BEGIN:variables
 // Variables declaration - do not modify
 private javax.swing.JMenuItem MenuItemOutMain;
 private javax.swing.JMenuItem aboutMenuItem;
 private javax.swing.JMenuItem contentsMenuItem;
 private javax.swing.JMenuItem copyMenuItem;
 private javax.swing.JMenuItem cutMenuItem;
 private javax.swing.JMenuItem deleteMenuItem;
 private javax.swing.JMenu editMenu;
 private javax.swing.JMenuItem exitMenuItem;
 private javax.swing.JMenu fileMenu;
 private javax.swing.JMenu helpMenu;
 private javax.swing.JMenu jMenu1;
 private javax.swing.JMenuBar menuBar;
 private javax.swing.JMenuItem menuItemBook;
 private javax.swing.JMenuItem menuItemInMain;
 private javax.swing.JMenuItem menuItemLogin;
 private javax.swing.JMenuItem menuItemStock;
 private javax.swing.JMenuItem menuItemUser;
 private javax.swing.JMenuItem openMenuItem;
 private javax.swing.JMenuItem pasteMenuItem;
 private javax.swing.JMenuItem saveAsMenuItem;
 private javax.swing.JMenuItem saveMenuItem;
 // End of variables declaration//GEN-END:variables

}

工具包:

package cn.hncu.bookStore.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {

 /**
  * 把long型時間轉(zhuǎn)換成日期格式"yyyy年MM月dd日HH:mm:ss:"的字符串
  * @param t
  * 待轉(zhuǎn)換的(long型)時間
  * @return
  * 日期格式的字符串
  */
 public static String longToString(long t){
  Date d=new Date();
  DateFormat df=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss:");
  return df.format(d);
 }

 /**
  * 把日期格式"yyyy-MM-dd-HH:mm:ss:"的字符串轉(zhuǎn)換成long型時間
  * @param str
  * 待轉(zhuǎn)換的日期字符串
  * @return
  * long型時間
  * @throws ParseException
  */
 public static long stringToLong(String str) throws ParseException{
  DateFormat df=new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss:");
  Date d=df.parse(str);
  return d.getTime();
 }
}

package cn.hncu.bookStore.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class FileIOUtil {
 /**
  * 構(gòu)造函數(shù)私有化
  */
 private FileIOUtil(){
 }

 /**
  * 把目錄fileName里的數(shù)據(jù)讀出
  * @param fileName
  * 文件地址
  * @return
  * 返回對應(yīng)類型的集合
  */
 public static<E> List<E> readFromFile(String fileName){//定義在靜態(tài)方法上的泛型
  File file=new File(fileName);//凡是讀文件,最好用File開道
  if(!file.exists()){//文件不存在返回空集合
   return new ArrayList<E>();
  }
  ObjectInputStream in=null;
  try {
   in=new ObjectInputStream(new FileInputStream(file));
   @SuppressWarnings("unchecked")
   List<E> list=(List<E>)in.readObject();
   return list;
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }finally{
   if(in!=null){
    try {
     in.close();
    } catch (IOException e) {
     throw new RuntimeException("數(shù)據(jù)文件關(guān)閉失敗", e);
    }
   }
  }
  return new ArrayList<E>();

 }

 /**
  * 存儲:向目錄fileName里讀入數(shù)據(jù)
  * @param list
  * 待存入數(shù)據(jù)的集合
  * @param fileName
  * 文件地址
  * @return
  * 存儲成功就返回true,否則,返回false
  */
 public static<E> boolean writeToFile(List<E> list,String fileName){
  ObjectOutputStream out=null;
  try {
   out=new ObjectOutputStream(new FileOutputStream(fileName));
   out.writeObject(list);
   return true;
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(out!=null){
    try {
     out.close();
    } catch (IOException e) {
     throw new RuntimeException("數(shù)據(jù)文件關(guān)閉失敗", e);
    }
   }
  }
  return false;
 }
}

公共功能:

package cn.hncu.bookStore.common;

public enum uuidModelConstance {
 /**
  * 枚舉:把user的五種類型UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,OutDetailModel,StockModel枚舉出來
  */
 User("UserModel"),Book("BookModel"),In_Main("InMainModel"),In_Detail("InDetailModel"),
 Out_Main("OutMainModel"),Out_Detail("OutDetailModel"),Stock("StockModel");
 private final String name;
 private uuidModelConstance(String name){
  this.name=name;
 }
 public String getName() {
  return name;
 }
}

package cn.hncu.bookStore.common.uuid.vo;

import java.io.Serializable;

public class uuidModel implements Serializable{

 /**
  * 用唱票模型自動生成uuid編號
  * 封裝uuid,自動生成uuid
  */
 private static final long serialVersionUID = 1L;
 private String modelName;//表示UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,OutDetailModel,StockModel
 private int currentNum;//modelName當(dāng)前的uuid編號
 public uuidModel(){

 }
 //set,get
 public String getModelName() {
  return modelName;
 }
 public void setModelName(String modelName) {
  this.modelName = modelName;
 }
 public int getCurrentNum() {
  return currentNum;
 }
 public void setCurrentNum(int currentNum) {
  this.currentNum = currentNum;
 }
 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result
    + ((modelName == null) ? 0 : modelName.hashCode());
  return result;
 }
 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  uuidModel other = (uuidModel) obj;
  if (modelName == null) {
   if (other.modelName != null)
    return false;
  } else if (!modelName.equals(other.modelName))
   return false;
  return true;
 }
}

package cn.hncu.bookStore.common.uuid.dao.Ebi;

import cn.hncu.bookStore.common.uuidModelConstance;

public interface uuidDAO {
 /**
  * 用唱票模型自動生成uuid編號
  * @param umc
  * 需要自動生成uuid的類型(UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,OutDetailModel,StockModel)
  * @return
  * 生成對應(yīng)類型uuid的編號
  */
 public String getNextNum(uuidModelConstance umc);
}

package cn.hncu.bookStore.common.uuid.dao.Ebo;

import java.util.List;

import cn.hncu.bookStore.common.uuidModelConstance;
import cn.hncu.bookStore.common.uuid.dao.Ebi.uuidDAO;
import cn.hncu.bookStore.common.uuid.vo.uuidModel;
import cn.hncu.bookStore.utils.FileIOUtil;

public class uuidEbo implements uuidDAO {

 private final static String FILE_NAME="uuid.txt";//把數(shù)據(jù)存儲到uuid.txt文件中,或讀取

 @Override
 public String getNextNum(uuidModelConstance umc) {
  String modelName=umc.getName();//獲得待生成uuid編號的user類型
  List<uuidModel> list=FileIOUtil.readFromFile(FILE_NAME);//從文件中讀取所有已生成user類型uuid的數(shù)據(jù)
  for(uuidModel um:list){
   if(um.getModelName().equals(modelName.trim())){//如果modelName在文件中存在,則返回此類型uuid下一個編號
    int res=um.getCurrentNum();
    um.setCurrentNum(res+1);
    FileIOUtil.writeToFile(list, FILE_NAME);//把經(jīng)過更新的uuid數(shù)據(jù)存入文件夾
    return ""+res;
   }
  }
  //如果for循環(huán)沒有找到,說明modelName是第一個,編號為1
  //new一個此類型的對象,存入文件夾
  uuidModel um=new uuidModel();
  um.setModelName(modelName);
  um.setCurrentNum(2);
  list.add(um);
  FileIOUtil.writeToFile(list, FILE_NAME);
  return ""+1;
 }

}

package cn.hncu.bookStore.common.uuid.dao.factory;

import cn.hncu.bookStore.common.uuid.dao.Ebi.uuidDAO;
import cn.hncu.bookStore.common.uuid.dao.Ebo.uuidEbo;

public class uuidDAOFactory {
 /**
  * 構(gòu)造函數(shù)私有化
  */
 private uuidDAOFactory(){

 }
 /**
  * 獲得接口uuidDAO
  * @return
  * uuidDAO
  */
 public static uuidDAO getUuidDAO(){
  return new uuidEbo();
 }

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解java jinfo命令

    詳解java jinfo命令

    jinfo是jdk自帶的命令,用來查看jvm的配置參數(shù).通常會先使用jps查看java進程的id,然后使用jinfo查看指定pid的jvm信息,需要的朋友可以參考下
    2021-06-06
  • Java實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作示例

    Java實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作示例

    這篇文章主要介紹了Java實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作,結(jié)合實例形式分析了Java二叉樹的創(chuàng)建、遍歷、計算等相關(guān)算法實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Java多線程編程中使用DateFormat類

    Java多線程編程中使用DateFormat類

    這篇文章主要介紹了Java多線程編程中使用DateFormat類,文中介紹了三種相關(guān)的并發(fā)使用方法,需要的朋友可以參考下
    2015-07-07
  • 利用java實現(xiàn)一個客戶信息管理系統(tǒng)

    利用java實現(xiàn)一個客戶信息管理系統(tǒng)

    這篇文章主要給大家介紹了關(guān)于利用java實現(xiàn)一個客戶信息管理系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法

    使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法

    這篇文章主要介紹了使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • springboot添加AOP日志配置詳解

    springboot添加AOP日志配置詳解

    這篇文章主要介紹了springboot添加AOP日志配置詳解,日志是一種在軟件開發(fā)中常用的技術(shù),用于記錄和跟蹤應(yīng)用程序的運行過程,通過AOP日志,開發(fā)人員可以實時監(jiān)控應(yīng)用程序的行為,包括方法的調(diào)用、參數(shù)的傳遞和返回值的獲取等,需要的朋友可以參考下
    2023-10-10
  • 淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別

    淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別

    本文主要介紹了淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Springboot中項目的屬性配置的詳細介紹

    Springboot中項目的屬性配置的詳細介紹

    很多時候需要用到一些配置的信息,這些信息可能在測試環(huán)境和生產(chǎn)環(huán)境下會有不同的配置,本文主要介紹了Springboot中項目的屬性配置的詳細介紹,感興趣的可以了解一下
    2022-01-01
  • java如何將可運行jar打包成exe可執(zhí)行文件

    java如何將可運行jar打包成exe可執(zhí)行文件

    Java程序完成以后,對于Windows操作系統(tǒng)習(xí)慣總是想雙擊某個exe文件就可以直接運行程序,這篇文章主要給大家介紹了關(guān)于java如何將可運行jar打包成exe可執(zhí)行文件的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Spring中的Filter過濾器詳解

    Spring中的Filter過濾器詳解

    這篇文章主要介紹了Spring中的Filter過濾器詳解,Filter 程序是一個實現(xiàn)了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進行調(diào)用和執(zhí)行的,需要的朋友可以參考下
    2023-08-08

最新評論