本文目錄一覽:
- 1、請問用java語言寫的項目,畢業論文可以按面向過程的結構來寫嗎?
- 2、你好,基於java的畢業論文,有沒有新穎一點,簡單一點的選題推薦?
- 3、基於Java的全文檢索技術研究的畢業論文
- 4、求畢業設計及論文“基於Java的學生信息管理系統的設計與實現”
- 5、求一個關於JAVA的論文
請問用java語言寫的項目,畢業論文可以按面向過程的結構來寫嗎?
按面向過程寫的話,需求不能有大的改動,要不然可能牽一髮動全身,因為面向過程的耦合度太高了;也就是說需求要一開始就比較明確;
既然用Java寫項目,還是用面向對象好一些,畢竟Java在面向對象編程方面有優勢;面向對象可讀性較高,好修改和維護;
你好,基於java的畢業論文,有沒有新穎一點,簡單一點的選題推薦?
你好, 計算機專業的畢設一般分為這兩部分: 源碼+論文
首先說選題, 畢設課題以javaweb居多, 框架可以選用ssm, ssh, 或者springboot, 可以選做一些管理系統, 下面是一些常見的命題
校園訂餐管理系統
健身房管理系統
扶貧電子商城
等等, 這些課題可以按照你自己的實力做, 如果技術好的化, 或者有一些成品, 可以做的複雜一些, 比如前端可以layui優化一下, 權限系統採用shiro來做等等
論文方面比較簡單但是比較麻煩, 各種文庫都有很多javaweb的論文,但是直接拷貝的化會過不了查重系統, 需要你自己認真的重構調整一下
基於Java的全文檢索技術研究的畢業論文
摘 要網絡中的資源非常豐富,但是如何有效的搜索信息卻是一件困難的事情。建立搜索引擎就是解決這個問題的最好方法。本論文首先詳細介紹了基於英特網的搜索引擎的系統結構,然後從網絡機器人、索引引擎、Web服務器三個方面進行詳細的說明。為了更加深刻的理解這種技術,本人還親自實現了一個自己的Java搜索引擎——新聞搜索引擎。新聞搜索引擎是從指定的Web頁面中按照超連接進行解析、搜索,並把搜索到的每條新聞進行索引後加入數據庫。然後通過Web服務器接受客戶端請求後從索引數據庫中搜索出所匹配的新聞。本人在介紹搜索引擎的章節中除了詳細的闡述技術核心外還結合了新聞搜索引擎的實現代碼來說明,圖文並茂、易於理解。 關鍵字:搜索引擎,網絡機器人,Lucene,中文分詞,JavaCC AbstractThe resources in the internet are abundant, but it is a difficult job to search some useful information. So a search engine is the best method to solve this problem. This article fist introduces the system structure of search engine based on the internet in detail, and then gives a minute explanation form Spider search, engine and web server. In order to understand the technology more deeply, I have programmed a news search engine by myself in Java.The news search engine is explained and searched according to hyperlink from a appointed web page, then indexes every searched information and adds it to the index database. Then after receiving the customers’ requests from the web server, it soon searches the right news form the index engine,In the chapter of introducing search engine, it is not only elaborating the core technology, but also combine with the modern code, pictures included, easy to understand. Key Words:Search Engine, Spider, Lucene, Phrase Query, JavaCC 目 錄第1章 引言··· 11.1 選題背景:··· 11.2 現實意義··· 1第2章 搜索引擎的結構··· 32.1 系統概述··· 32.2 搜索引擎的構成··· 32.2.1 網絡機器人··· 32.2.2 索引與搜索··· 32.2.3 Web服務器··· 32.3 搜索引擎的主要指標及分析··· 42.4 小節··· 4第3章 網絡機器人··· 53.1 什麼是網絡機器人··· 53.2 網絡機器人的結構分析··· 53.2.1 如何解析HTML· 53.2.2 該類幾種重要的方法。··· 63.2.3 Spider程序結構··· 63.2.4 如何構造Spider程序··· 73.2.5 如何提高程序性能··· 83.2.6 網絡機器人的代碼分析··· 93.3 小節··· 10第4章 基於Lucene的索引與搜索··· 114.1 什麼是全文檢索與全文檢索系統?··· 114.2 什麼是Lucene全文檢索··· 124.3 Lucene的系統結構分析··· 134.3.1 系統結構組織··· 134.3.2 數據流分析··· 144.4 Lucene索引構建邏輯模塊分析··· 154.4.1 緒論··· 154.4.2 對象體系與UML圖··· 164.4.3 Lucene的包結構··· 204.4.4 Lucene的主要邏輯圖··· 214.4.5 對Lucene包的小結··· 224.5 Lucene查詢邏輯··· 224.5.1 查詢者輸入查詢條件··· 224.5.2 查詢條件被傳達到查詢分析器中··· 224.5.3 查詢遍歷樹··· 234.5.4 返回結果··· 234.6 Lucene 檢索原理··· 234.7 Lucene和Nucth的中文分析模塊··· 254.7.1 Nutch分析··· 254.7.2 Nutch中文搜索3.1 中文分詞··· 264.7.3 利用JavaCC構造中文分析模塊··· 274.7.4 分詞小結··· 284.8 Lucene與Spider的結合··· 284.8.1 Index類的實現··· 284.8.2 HTML解析類··· 294.9 Lucene 小結··· 31第5章 基於Lucene的搜索引擎實現··· 325.1 基於Tomcat的Web服務器··· 325.1.1 什麼是基於Tomcat的Web服務器··· 325.2 用戶接口設計··· 325.2.1 客戶端設計··· 325.2.2 服務端設計··· 335.3 在Tomcat上部署項目··· 355.4 小節··· 35第6章 搜索引擎策略··· 366.1 簡介··· 366.2 面向主題的搜索策略··· 366.2.1 導向詞··· 366.2.2 網頁評級··· 366.2.3 權威網頁和中心網頁··· 376.3 小節··· 38結束語··· 39參考文獻··· 40致 謝··· 41外文資料原文··· 42外文原文翻譯··· 48 第1章 引言
1.1 選題背景:
面對浩瀚的網絡資源,搜索引擎為所有網上衝浪的用戶提供了一個入口,毫不誇張的說,所有的用戶都可以從搜索出發到達自己想去的網上任何一個地方。因此它也成為除了電子郵件以外最多人使用的網上服務。搜索引擎技術伴隨着WWW的發展是引人注目的。搜索引擎大約經歷了三代的更新發展:第一代搜索引擎出現於1994年。這類搜索引擎一般都索引少於1,000,000個網頁,極少重新搜集網頁並去刷新索引。而且其檢索速度非常慢,一般都要等待10秒甚至更長的時間。在實現技術上也基本沿用較為成熟的IR(Information Retrieval)、網絡、數據庫等技術,相當於利用一些已有技術實現的一個WWW上的應用。在1994年3月到4月,網絡爬蟲World Web Worm (WWWW)平均每天承受大約1500次查詢。大約在1996年出現的第二代搜索引擎系統大多採用分布式方案(多個微型計算機協同工作)來提高數據規模、響應速度和用戶數量,它們一般都保持一個大約50,000,000網頁的索引數據庫,每天能夠響應10,000,000次用戶檢索請求。1997年11月,當時最先進的幾個搜索引擎號稱能建立從2,000,000到100,000,000的網頁索引。Altavista搜索引擎聲稱他們每天大概要承受20,000,000次查詢。結束語
本課題對基於因特網的Java搜索引擎結構和性能指標進行了分析,了解Spider程序的結構和功能。在進行海量數據搜索時,如果使用單純的數據庫技術,那將是非常痛苦的,速度將是極大的瓶頸。所以本文提出了使用全文搜索引擎Lucene進行索引、搜索。解決中文分詞和有效的中文搜索信息。同時解決了如何把Lucene全文搜索引擎和Spider程序互相集合來實現新聞搜索的功能。對於如何構架基於Tomcat的Web服務器,使得用戶通過瀏覽器進行新聞的搜索有了一定的理解,對Tomcat如何部署進行了說明。
在些基礎上,終於可以調試出一個簡單的在本地搜索新聞Java搜索引擎。
參考文獻
[1] Jeff Heaton(美), Programming Spiders, Bots, and Aggregator in Java.
[2] Borland Software Corporation(美),JBuilder培訓教程(譯者:周鵬 [等] 譯)北京:機械工業出版社
[3]徐寶文,張衛豐. 搜索引擎與信息獲取技術.北京:清華大學出版社,2003.5
[4]車東.基於Java的全文搜索引擎Lucene
[5]羅旭.主題搜索引擎的設計與實現
[6]Bruce Eckel(美).Thinking in Java.北京:機械工業出版社
[7] Otis Gospodnetic Erik Hatcher (美).Action in Lucene.電子工業出版社,2007.1
[8]耿祥義,張躍平. JAVA2實用教程(第二版).北京:清華大學出版社,2004.2
[9]劉彬.JSP數據庫高級教程.北京:清華大學出版社,2006.3
[10]劉衛國,嚴暉.數據庫技術與應用——SQL Server.北京:清華大學出版社,2007.1
[11]閆宏飛.Tiny Search Engine: Design and implementation(PPT). Oct.2003
[12]李曉明,閆宏飛,王繼民.搜索引擎——原理、技術與系統.北京:科學出版社,2004
更多參考請點擊
求畢業設計及論文“基於Java的學生信息管理系統的設計與實現”
僅僅給你個參考
//Java Group Project_StudentManagement源碼
//NetBeans IDE 6.5 環境
package studentmanager;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
class Student implements java.io.Serializable{
String number,name,specialty,grade,borth,sex;
public Student(){};
public void setNumber(String number){ this.number=number;}
public String getNumber(){ return number;}
public void setName(String name){ this.name=name;}
public String getName(){ return name;}
public void setSex(String sex){ this.sex=sex;}
public String getSex(){ return sex;}
public void setSpecialty(String specialty){ this.specialty=specialty;}
public String getSpecialty(){ return specialty;}
public void setGrade(String grade){ this.grade=grade;}
public String getGrade(){ return grade;}
public void setBorth(String borth){ this.borth=borth;}
public String getBorth(){ return borth;}
}
public class StudentManager extends JFrame{
JLabel lb=new JLabel(“錄入請先輸入記錄,查詢、刪除請先輸入學號,修改是對查詢” +
“內容改後的保存!”);
JTextField 學號,姓名,專業,年級,出生;
JRadioButton 男,女;
ButtonGroup group=null;
JButton 錄入,查詢,刪除,修改,顯示;
JPanel p1,p2,p3,p4,p5,p6,pv,ph;
Student 學生=null;
Hashtable 學生散列表=null;
File file=null;
FileInputStream inOne=null;
ObjectInputStream inTwo=null;
FileOutputStream outOne=null;
ObjectOutputStream outTwo=null;
public StudentManager(){
super(“學生基本信息管理系統”);
學號=new JTextField(10);
姓名=new JTextField(10);
專業=new JTextField(10);
年級=new JTextField(10);
出生=new JTextField(10);
group=new ButtonGroup();
男=new JRadioButton(“男”,true);
女=new JRadioButton(“女”,false);
group.add(男);
group.add(女);
錄入=new JButton(“錄入”);
查詢=new JButton(“查詢”);
刪除=new JButton(“刪除”);
修改=new JButton(“修改”);
顯示=new JButton(“顯示”);
錄入.addActionListener(new InputAct());
查詢.addActionListener(new InquestAct());
修改.addActionListener(new ModifyAct());
刪除.addActionListener(new DeleteAct());
顯示.addActionListener(new ShowAct());
修改.setEnabled(false);
p1=new JPanel();
p1.add(new JLabel(“學號:”,JLabel.CENTER));
p1.add(學號);
p2=new JPanel();
p2.add(new JLabel(“姓名:”,JLabel.CENTER));
p2.add(姓名);
p3=new JPanel();
p3.add(new JLabel(“性別:”,JLabel.CENTER));
p3.add(男);
p3.add(女);
p4=new JPanel();
p4.add(new JLabel(“專業:”,JLabel.CENTER));
p4.add(專業);
p5=new JPanel();
p5.add(new JLabel(“年級:”,JLabel.CENTER));
p5.add(年級);
p6=new JPanel();
p6.add(new JLabel(“出生:”,JLabel.CENTER));
p6.add(出生);
pv=new JPanel();
pv.setLayout(new GridLayout(6,1));
pv.add(p1);
pv.add(p2);
pv.add(p3);
pv.add(p4);
pv.add(p5);
pv.add(p6);
ph=new JPanel();
ph.add(錄入);
ph.add(查詢);
ph.add(修改);
ph.add(刪除);
ph.add(顯示);
file=new File(“學生信息.txt”);
學生散列表=new Hashtable();
if(!file.exists()){
try{
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream objectOut=new ObjectOutputStream(out);
objectOut.writeObject(學生散列表);
objectOut.close();
out.close();
}
catch(IOException e){}
}
Container con=getContentPane();
con.setLayout(new BorderLayout());
con.add(lb, BorderLayout.NORTH);
con.add(pv, BorderLayout.CENTER);
con.add(ph, BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100,100,600,300);
setVisible(true);
}
public static void main(String[] args) {new StudentManager();}
class InputAct implements ActionListener{
public void actionPerformed(ActionEvent e){
修改.setEnabled(false);
String number=””;
number=學號.getText();
if(number.length()0){
try{
inOne=new FileInputStream(file);
inTwo=new ObjectInputStream(inOne);
學生散列表=(Hashtable)inTwo.readObject();
inOne.close();
inTwo.close();
}
catch(Exception ee){System.out.println(“創建散列表出現問題!”);}
if(學生散列表.containsKey(number)){
String warning=”該生信息已存在,請到修改頁面修改!”;
JOptionPane.showMessageDialog(null,warning,”警告”,
JOptionPane.WARNING_MESSAGE);
}//end if1
else{
String m=”該生信息將被錄入!”;
int ok=JOptionPane.showConfirmDialog(null,m,”確認”,
JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE);
if(ok==JOptionPane.YES_OPTION){
String name=姓名.getText();
String specialty=專業.getText();
String grade=年級.getText();
String borth=出生.getText();
String sex=null;
if(男.isSelected()){sex=男.getText();}
else{sex=女.getText();}
學生=new Student();
學生.setNumber(number);
學生.setName(name);
學生.setSpecialty(specialty);
學生.setGrade(grade);
學生.setBorth(borth);
學生.setSex(sex);
try{
outOne=new FileOutputStream(file);
outTwo=new ObjectOutputStream(outOne);
學生散列表.put(number,學生);
outTwo.writeObject(學生散列表);
outTwo.close();
outOne.close();
}
catch(Exception ee){System.out.println(“輸出散列表出現問題!”);}
學號.setText(null);
姓名.setText(null);
專業.setText(null);
年級.setText(null);
出生.setText(null);
}
}//end else1
}//end if0
else{
String warning=”必須輸入學號!”;
JOptionPane.showMessageDialog(null,warning,
“警告”,JOptionPane.WARNING_MESSAGE);
}//end else0
}//end actionPerformed
}//end class
class InquestAct implements ActionListener{
public void actionPerformed(ActionEvent e){
String number=””;
number=學號.getText();
if(number.length()0){
try{
inOne=new FileInputStream(file);
inTwo=new ObjectInputStream(inOne);
學生散列表=(Hashtable)inTwo.readObject();
inOne.close();
inTwo.close();
}
catch(Exception ee){System.out.println(“散列表有問題!”);}
if(學生散列表.containsKey(number)){
修改.setEnabled(true);
Student stu=(Student)學生散列表.get(number);
姓名.setText(stu.getName());
專業.setText(stu.getSpecialty());
年級.setText(stu.getGrade());
出生.setText(stu.getBorth());
if(stu.getSex().equals(“男”)){男.setSelected(true);}
else{女.setSelected(true);}
}
else{
修改.setEnabled(false);
String warning=”該學號不存在!”;
JOptionPane.showMessageDialog(null,warning,
“警告”,JOptionPane.WARNING_MESSAGE);
}
}
else{
修改.setEnabled(false);
String warning=”必須輸入學號!”;
JOptionPane.showMessageDialog(null,warning,
“警告”,JOptionPane.WARNING_MESSAGE);
}
}
}
class ModifyAct implements ActionListener{
public void actionPerformed(ActionEvent e){
String number=學號.getText();
String name=姓名.getText();
String specialty=專業.getText();
String grade=年級.getText();
String borth=出生.getText();
String sex=null;
if(男.isSelected()){sex=男.getText();}
else{sex=女.getText();}
Student 學生=new Student();
學生.setNumber(number);
學生.setName(name);
學生.setSpecialty(specialty);
學生.setGrade(grade);
學生.setBorth(borth);
學生.setSex(sex);
try{
outOne=new FileOutputStream(file);
outTwo=new ObjectOutputStream(outOne);
學生散列表.put(number, 學生);
outTwo.writeObject(學生散列表);
outTwo.close();
outOne.close();
學號.setText(null);
姓名.setText(null);
專業.setText(null);
年級.setText(null);
出生.setText(null);
}
catch(Exception ee){
System.out.println(“錄入修改出現異常!”);
修改.setEnabled(false);
}
}
}
class DeleteAct implements ActionListener{
public void actionPerformed(ActionEvent e){
修改.setEnabled(false);
String number=學號.getText();
if(number.length()0){
try{
inOne=new FileInputStream(file);
inTwo=new ObjectInputStream(inOne);
學生散列表=(Hashtable)inTwo.readObject();
inOne.close();
inTwo.close();
}
catch(Exception ee){}
if(學生散列表.containsKey(number)){
Student stu=(Student)學生散列表.get(number);
姓名.setText(stu.getName());
專業.setText(stu.getSpecialty());
年級.setText(stu.getGrade());
出生.setText(stu.getBorth());
if(stu.getSex().equals(“男”)){男.setSelected(true);}
else{女.setSelected(true);}
}
String m=”確定要刪除該學生的記錄嗎?”;
int ok=JOptionPane.showConfirmDialog(null,m,”確認”,
JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(ok==JOptionPane.YES_OPTION){
學生散列表.remove(number);
try{
outOne=new FileOutputStream(file);
outTwo=new ObjectOutputStream(outOne);
outTwo.writeObject(學生散列表);
outTwo.close();
outOne.close();
學號.setText(null);
姓名.setText(null);
專業.setText(null);
年級.setText(null);
出生.setText(null);
}
catch(Exception ee){System.out.println(ee);}
}
else if(ok==JOptionPane.NO_OPTION){
學號.setText(null);
姓名.setText(null);
專業.setText(null);
年級.setText(null);
出生.setText(null);
}
else{
String warning=”該學號不存在!”;
JOptionPane.showMessageDialog(null,warning,
“警告”,JOptionPane.WARNING_MESSAGE);
}
}
else{
String warning=”必須輸入學號!”;
JOptionPane.showMessageDialog(null,warning,
“警告”,JOptionPane.WARNING_MESSAGE);
}
}
}
class ShowAct implements ActionListener{
public void actionPerformed(ActionEvent e){
new StudentShow(file);
}
}
class StudentShow extends JDialog{
Hashtable 學生散列表= null;
JTextArea 顯示=null;
FileInputStream inOne=null;
ObjectInputStream inTwo=null;
File file=null;
public StudentShow(File file){
super(new JFrame(),”顯示對話框”);
this.file=file;
顯示=new JTextArea(16,30);
try{
inOne=new FileInputStream(file);
inTwo=new ObjectInputStream(inOne);
學生散列表=(Hashtable)inTwo.readObject();
inOne.close();
inTwo.close();
}
catch(Exception ee){}
if(學生散列表.isEmpty())顯示.append(“目前還沒有學生的信息記錄!\n”);
else{
顯示.setText(“學號 姓名 性別 專業 年級 出生\n”);
for(Enumeration enm=學生散列表.elements();enm.hasMoreElements();){
Student stu=(Student)enm.nextElement();
String sex=””;
if(stu.getSex().equals(“男”))sex=”男”;
else sex=”女”;
String str=stu.getNumber()+”,”+stu.getName()+”,”+sex+”,”
+stu.getSpecialty()+”,”+stu.getGrade()+”,”+stu.getBorth()+”\n”;
顯示.append(str);
}
}
JScrollPane scroll=new JScrollPane(顯示);
Container con=getContentPane();
con.add(“Center”,scroll);
con.validate();
setVisible(true);
setBounds(200,200,400,300);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){setVisible(false);}
}
);
}
}
}
求一個關於JAVA的論文
TAGS: 畢業論文 計算機 基於 遠程 對象 RMI 方法 實現 調用
哪位老兄有計算機畢業設計論文啊?是基於java的,小弟急用,謝謝!用RMI開發基於Java的企業分布式應用我站還提供更多的免費計算機論文,但免費論文僅供參考,建議廣大網友下載後不要輕易採用。摘要由於Java具有跨平台、代碼可移植性、安全高效等廣泛而強大的功能,因而在開發網絡分布式應用的時候,可以用它自身的機制實現分布式計算,一種基於Java的遠程方法調用(RMI)為我們開發企業分布式應用提供了行之有效的解決方案。
關鍵詞 Java RMI 企業分布式應用
1 概述
隨着電力企業信息化建設的不斷深入和發展,企業內部和企業與企業之間對信息、對數據的交換量大大增加,這些信息與數據越來越需要在不同的計算機網絡間傳送和交流。同時,由於各單位、各部門之間的現存的計算機網絡硬件設備與操作系統千差萬別,應用水平也參差不齊,因此,開發出跨平台、可移植、高效安全的網絡分布式應用來服務於電力企業,就顯得尤為重要。
在當今的編程術語里,分布式計算已經成為很常見的詞,它將企業的業務數據和程序分布在網絡的不同物理位置上,通過調動網絡上多台計算機的處理能力,發揮遠程調用數據的功能。
遠程方法調用(Remote Method Invocation ,RMI),可以在不同的Java虛擬機(JVM)之間實現對象與對象的通信。JVM可以位於相同或不同計算機上,在多個JVM中,一個JVM可以調用存儲在其它JVM的對象的方法。
本文主要介紹RMI的特點,分析應用RMI進行企業分布式計算的原理,以及利用RMI實現基於Java的企業分布式應用的具體步驟。2 遠程方法調用(RMI)的特點
2.1 TCP編程的缺點
由於Java編程語言設計之初就是面向對象和支持網絡的,因此,基於對象的RMI機制已經內置在Java平台中。
我們經常會在網絡開發中使用TCP/IP編程,這樣,自然而然地就會涉及到Socket(套接字)編程。但是,使用Socket編程需要大量重複編碼,在複雜分布式操作時顯得非常麻煩,而且易於出錯。因此,如何快速、高效、安全、可擴展地進行網絡分布式計算,是開發者們一貫追求和倡導的主題。直到RMI的出現,這種繁雜、低效的開發情況才有很大改觀。2.2 RMI編程的特點
當我們利用對象序列化在網絡上分配對象時,RMI提供了非Java平台無法匹敵的獨特而強電子商務資料庫)*!%267’$#7’455大的分布式計算模型,RMI主要有以下特點:
? 客戶機可以向本地方法一樣調用遠程服務器上的方法;
? 可以根據接口指定客戶機/服務器編程合約;
? 可以從服務器對象缺省二進制類文件,自動生成調動/反調動代碼;
? 將Java編程模型擴展到機器邊界(和Java虛擬機(JVM)邊界之外),不需要任何特殊語法;
? 還可以和一個遠程方法調用中的數據同時傳輸行為(代碼)。
儘管RMI不是唯一的企業級遠程對象訪問方案,但它卻是最容易實現的。2.3 RMI與CORBA
作為分布式應用程序框架的規範,COBRA首當其衝,它是由對象管理組織(OMG)開發的。與CORBA不同的是,CORBA能夠利用不同編程語言(例如C/C++、Basic等)開發實現分布式應用,而RMI是一種純Java解決方案。在RMI中,程序的所有部分都由Java語言編寫,這樣,開發出來的程序完全符合Java規範,便於實現跨平台訪問、擴展和移植。按照筆者所在西北電力建設集團公司的情況看,服務器操作系統主要有Linux和Windows2000 Server,分別存在於公司和部門當中,它們是不同的系統平台;同時,公司下屬各個工程項目部又距離很遠,近的幾十公里,遠則達到上千公里甚至位於國外,因此跨平台和遠程訪問這兩大功能在開發企業應用系統時就必須考慮,而RMI恰恰能夠用它的自身特點來滿足編程需要。3 RMI基本體系結構簡介
RMI通過TCP/IP在內部使用Socket,象其名稱暗示的那樣,它能夠幫助我們查找並執行遠程對象的方法。RMI的目的是讓位於不同JVM中的對象,在外觀及行為上都像是本地的對象。
通常,我們把調用這種遠程對象的JVM,稱為客戶機;而把包括這種遠程對象的JVM,稱為服務器。
儘管對一個遠程對象的引用和獲得對本地對象的引用有所不同,但我們可以把遠程對象像本地對象一樣使用。應用程序並不知道一個對象是遠程的還是本地的。實際上,遠程對象上被調用的方法與本地對象上調用的方法,具有相同的語法結構。
作為RMI的底層(會包含複雜的Socket操作),它會自動截獲方法調用,找到遠程對象,然後處理遠程請求。筆者認為,RMI設計的重要之處,就在於不但在設計上實現了遠程訪問功能,而且實現了設計的透明性。
RMI的基本體系結構,概括起來說,由三個抽象層組成:3.1 存根/框架層(Stubs/Skeletons Layer)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150820.html