在後台java怎麼使用,JAVA怎麼使用

本文目錄一覽:

請問JAVA是怎麼運用到網站後台開發的

一、程序運行界面:

1、總控制台

2、計劃任務的設置界面。

3、控制台輸出結果。

二、程序開發環境:

使用Java(JDK 1.4)開發,圖形界面使用Eclipse (2.1.3版)的SWT方式開發。運行主機:P4 2.6+1G內存 windowsXP操作系統

三、預備。

開發此類程序,最好不要直接使用JAVA的線程來編程,這樣會增加不必要的複雜度和難度,吃力不討好。在JAVA中有一個包 java.util.Timer 這個包封裝了對線程的操作,我們可以把它稱做定時器類。我們先來看一個簡單例子:

import java.util.Timer;

import java.util.TimerTask;

public class Reminder {

Timer timer;

public Reminder(int seconds) {

timer = new Timer();

timer.schedule(new RemindTask(),seconds*1000); //參數要求轉化成毫秒

}

public static void main(String args[]) {

new Reminder(5); //5秒後運行

}

/**一個內部類,封裝了所要運行的任務*/

class RemindTask extends TimerTask {

public void run() {

System.out.println(“任務運行。。。。”);

timer.cancel(); //結束timer中的所有任務

}

}

}

這裡涉及於兩個JAVA類Timer和TimerTask。我們繼承TimerTask類後,將所要運行的任務封裝其run方法中;Timer可以管理幾千個任務(TimerTask),注意,同一個任務對象不能兩次加入到Timer中執行。

對(雖然執行的任務都一樣,但是兩個任務對象):

timer.schedule(new RemindTask(), seconds * 1000);

timer.schedule(new RemindTask(), seconds * 1000);

RemindTask task= new RemindTask();

timer.schedule(task, seconds * 1000);

timer.schedule(task, seconds * 2000);

四、設計方案。

主要的類圖

說明:

任務類的設計。我們先創建一個抽象類AbstractTimerTask,這個類直接繼承至TimerTask類,提供對TimerTask封裝。然後所有具體的任務類(如:TimerTask_1)繼承自AbstractTimerTask。

import java.util.TimerTask;

public abstract class AbstractTimerTask extends TimerTask {

TaskEntry taskEntry; //任務記錄

public AbstractTimerTask(TaskEntry taskEntry) {

this.taskEntry = taskEntry;

}

/*

* 生成一個新的實例相當於克隆自身;原因在於:同一任務對象不能兩次加入到Timer

* 在TaskEntry類將看到它的使用方法

*/

abstract AbstractTimerTask getCloneObject();

}

下面是它的一個實現類的源代碼我們可以將要運行任務的代碼寫在這個類中。

import java.util.Calendar;

public class TimerTask_1 extends AbstractTimerTask {

public TimerTask_1(TaskEntry taskEntry) { //構造方法

super(taskEntry);

}

public AbstractTimerTask getCloneObject() {

return new TimerTask_1(taskEntry);

}

public void run() {

/*在這裡寫你要執行的程序。。。。。*/

System.out.println(“??時:”+taskEntry.getName()+”運行了一次”);

this.taskEntry.taskStart(); //運行下一個時間點任務

}

}

在AbstractTimerTask類有一個TaskEntry欄位,這是本設計的一個核心類,它代表一條封裝完整的任務記錄,每個任務類和它的運行計劃都封裝在這條類中,源代碼如下。Timer和AbstractTimerTask前面都已說過,那麼TimePlan是做什麼用的呢?

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import mytimer.util.Util;

/**任務記錄類*/

public class TaskEntry {

public static final int TASK_START = 0; //定義兩個表示任務記錄狀態常量

public static final int TASK_STOP = 1;

private Long oid; //任務ID號,唯一

private String name; //任務名稱

private int state = TASK_STOP; //任務狀態(啟動/停止)

private Timer timer; //JAVA計時器

private TimePlan timePlan; //時間計劃的類型

private AbstractTimerTask timerTask; //任務類的種子對象,由這個對象來不斷克隆

private AbstractTimerTask runTimerTask; //運行計劃的當前任務

/**

* ITaskEntry.taskStart()–TimerTask.run()–ITaskEntry.taskStart()

* 形成一個循環迴路。本方法負責起動本類代表的任務

*/

public void taskStart() {

if (timePlan.haveNext()) {

Date date = timePlan.nextDate();//得到任務計劃時間

runTimerTask = timerTask.getCloneObject();//得到任務(複製)

timer.schedule(runTimerTask, date); //加入計劃隊列

//列印將要運行的計劃任務的信息

Calendar c = Calendar.getInstance();

c.setTimeInMillis(runTimerTask.scheduledExecutionTime());

System.out.println(Util.dateToLongStr(c.getTime())+”將運行”+name);

} else {

state = TASK_STOP;

System.out.println(name + “結束”);

}

}

/**停止任務*/

public void taskStop() {

if (runTimerTask != null) {

//列印信息

Calendar c = Calendar.getInstance();

c.setTimeInMillis(runTimerTask.scheduledExecutionTime());

System.out.println(“計劃於:”+Util.dateToLongStr(c.getTime())+”運行的” + name + “被終止”);

//終止本任務, 調用Timer.cancel()是終止Timer的所有任務。

runTimerTask.cancel();

} else {

System.out.println(name + “未進入執行計劃”);

}

}

……… 一些屬性的get/set方法(省略)

/** 監聽類(內部類) */

public static class DateBeforeTodayException extends NullPointerException {

private Date date;

public DateBeforeTodayException(Date date) {this.date = date;}

public String toString() {

return “計劃時間(” + Util.dateToLongStr(date) + “)早於當前時間”;

}

}

}

1、TimePlan是一個介面(interface),它是表示「運行計劃的方案」,這個程序中提供了三種運行計劃方案(見前圖:計劃任務的設置界面):

一次性運行。

每隔一個時間段運行。

一周中選擇那幾天運行。

將它設計成一個介面是為了方便今後擴展,如果要新增新的時間方案只需要繼承這個介面寫一個新的實現即可。三種時間方案的類圖如下:

說明:

a) TimePlan封裝了五個方法,其它haveNext()和nextDate()最重要,這個兩個方法模仿了Java中集合類(Collection)的迭代器(Iterator)的設計形式,代碼如下:

import java.util.Date;

//時間計劃方案的介面

public interface TimePlan {

boolean haveNext();//判斷還有沒有下一個計劃時間

Date nextDate();//得到下一個計劃時間

Date getCurrentDate();//得到開始時間

void setCurrentDate(Date date); //設計開始時間

String getTimePlanString();//顯示運行計劃方案的文字說明

}

b) AbstractTimePlan是這個抽象類,主要目的是將一些各子類的公共方法寫在這裡。代碼如下:

import java.util.Date;

public abstract class AbstractTimePlan implements TimePlan {

//記錄計劃的第一時間點,除設置新的起始時間,否則不再改變

protected Date currentDate;

/*

當前計劃的時間點,每次計劃替換時被更新,

似乎這個才應叫cureentDate,sorry不想再改了

*/

protected Date planDate;

public boolean haveNext() {

return (planDate != null);

}

public Date getCurrentDate() {

return currentDate;

}

public void setCurrentDate(Date date) {

currentDate = date;

planDate = date; //在賦給currentDate值時,同時也賦給planDate

}

}

c) 然後我們看看三種計劃方案的實現類的源代碼:

//「一次性運行」的計劃方案類

import java.util.Date;

public class TimePlanOnce extends AbstractTimePlan {

public Date nextDate() {

//把要當前的計劃時間保存在中間變數中

Date returnDate = this.planDate;

//算出下一個計劃時間。沒有下一個就設為null

this.planDate = null;

//判斷一下計劃時間合不合條件

if (returnDate == null)

throw new NullPointerException(“沒有下一個計劃日期”);

return returnDate;

}

public String getTimePlanString() {

return “一次性運行,運行時間: (列印this.currentDate) “;

}

}

//「周期性間隔」的時間計劃方案類

import java.util.Date;

public class TimePlanPeriod extends AbstractTimePlan {

public static final int HOUR = 0;

public static final int DAY = 1;

private int spaceTime; //間隔時間,單位毫秒

private int timeType;

public Date nextDate() {

//把要當前的計劃時間保存在中間變數中

Date returnDate = this.planDate;

//算出下一個計劃時間。沒有下一個就設為null

int milliSecond = 0;

if (timeType ==HOUR) milliSecond = spaceTime * 1000; //小時*60*60*1000;

if (timeType ==DAY) milliSecond = spaceTime * 24 * 60 * 60 * 1000; //天

planDate = Util.DateAddSpaceMilliSecond(planDate, milliSecond);

//判斷一下計劃時間合不合條件

if (returnDate == null)

throw new NullPointerException(“沒有下一個計劃日期”);

return returnDate;

}

public String getTimePlanString() {

if (timeType == HOUR)

return “第一次運行於:currentDate.並每隔spaceTime小時運行一次”;

if (timeType == DAY)

return “第一次運行於:currentDate.並每隔spaceTime天運行一次”;

return “”;

}

public int getSpaceTime() { return spaceTime; }

public int getTimeType() { return timeType; }

public void setSpaceTime(int i) { spaceTime = i; }

public void setTimeType(int i) { timeType = i; }

}

/**選擇一周的某幾天,讓這幾天在同一時間點運行任務, 一周內必須選擇一天*/

import java.util.Calendar;

import java.util.Date;

public class TimePlanSelectWeek extends AbstractTimePlan {

private static Calendar c = Calendar.getInstance(); //取得一個日曆實例

private static int spaceMilliSecond = 0; //間隔時間,單位毫秒

private boolean[] selectWeek = new boolean[7]; //0為星期日 ,1為星期一

public Date nextDate() {

Date returnDate = null;

if (!isSelectWeek(planDate)) //如果這一天不是所選周中的一天

planDate = getNextDate(planDate);

returnDate = planDate;

planDate = getNextDate(planDate);

//判斷一下計劃時間合不合條件

if (returnDate == null)

throw new NullPointerException(“沒有下一個計劃日期”);

return returnDate;

}

//算出下一個計劃時間。沒有下一個就設為null

private Date getNextDate(Date date) {

Date tempDate = date;

Date returnDate = null;

for (int i = 0; i 7; i++) {

tempDate = Util.DateAddSpaceMilliSecond(tempDate, spaceMilliSecond);

if (isSelectWeek(tempDate)) {

returnDate = tempDate;

break;

}

}

return returnDate;

}

/**設置某星期是否被選, 0為星期日 ,1為星期一….6為星期六*/

public void setSelectWeek(int i, boolean b) {selectWeek[i] = b;}

/** 判斷某星期是否被選*/

public boolean isSelectWeek(int i) {return selectWeek[i];}

/**判斷某天所屬星期幾是否被選*/

public boolean isSelectWeek(Date date) {

if (date == null) return false;

c.setTime(date);

//Calendar.DAY_OF_WEEK:星期日=1,星期六=7 c.get(Calendar.DAY_OF_WEEK)

return isSelectWeek(c.get(Calendar.DAY_OF_WEEK) – 1);

}

public String getTimePlanString() {

StringBuffer sb = new StringBuffer(“”);

if (selectWeek[1]) sb.append(“周一,”);

if (selectWeek[2]) sb.append(“周二,”);

if (selectWeek[3]) sb.append(“周三,”);

if (selectWeek[4]) sb.append(“周四,”);

if (selectWeek[5]) sb.append(“周五,”);

if (selectWeek[6]) sb.append(“周六,”);

if (selectWeek[0]) sb.append(“周日,”);

return “每周的”+sb.toString()+”運行”;

}

}

TimerTask的工廠類。將生成TimerTask的代碼另起一個類的好處是代碼的層次比較清楚,也比較好管理。由於TimerTask包含有幾個欄位,因此產生一個TimerTask對象還是有一定的複雜度,建立一個專門生成TimerTask的工廠類,這樣我們在生成一個TimerTask對象時就可以少掉很多麻煩的代碼了。當然由於我的工作任務,只需要一個TimerTask對象就夠了,所以最初之前我是將它直接寫在圖形界面的代碼里的。

這裡建立一個TimerTask對象池tasks,它是一個靜態變數,這樣在getInstance時不必總是要新生成一個TimerTask。還有Timer也是一個靜態變數,它是一個全局單例(是最簡單的單例模式了),因為前面說了Timer可以管理幾千個任務,所以Timer對象一個就夠了。

import java.util.HashMap;

import java.util.Timer;

public class TaskEntryFactory {

private static final HashMap tasks = new HashMap();

private static final Timer timer = new Timer();

public static TaskEntry getInstance(Long oid, String name) {

if (tasks.containsKey(oid)) {

return (TaskEntry) tasks.get(oid);

} else {

TaskEntry entry = new TaskEntry();

entry.setOid(oid);

entry.setName(name);

entry.setTimer(timer);

entry.setTimerTask(new TimerTask_1(entry));

tasks.put(oid, entry);

return entry;

}

}

}

起動和停止任務,當「任務設置界面(TaskListDialog.java)」點擊OK後處理。界面的編寫就不在本文討論的範圍內了。

//任務設置界面中點擊」確認(OK)」按鈕後的處理

if (dialog.open() == Window.OK) {

if (taskEntry.getState() == TaskEntry.TASK_START) {

taskEntry.taskStop();//將舊的停掉

taskEntry.taskStart();//開始新設置的

}

if (taskEntry.getState() == TaskEntry.TASK_STOP)

taskEntry.taskStop();

tv.refresh(taskEntry);

}

java中如何後台進行java程序

給個代碼你參考:import java.awt.*;import java.io.*;import javax.swing.*;import java.awt.event.*;import javax.imageio.ImageIO;public class Test extends JFrame{ private TrayIcon trayIcon;//托盤圖標 private SystemTray systemTray;//系統托盤 public Test() { super(系統托盤圖標); systemTray = SystemTray.getSystemTray();//獲得系統托盤的實例 setSize(150,150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); try { trayIcon = new TrayIcon(ImageIO.read(new File(0.gif))); systemTray.add(trayIcon);//設置托盤的圖標,0.gif與該類文件同一目錄 } catch (IOException e1) {e1.printStackTrace();} catch (AWTException e2) {e2.printStackTrace();} this.addWindowListener( new WindowAdapter(){ public void windowIconified(WindowEvent e){ dispose();//窗口最小化時dispose該窗口 } }); trayIcon.addMouseListener( new MouseAdapter(){ public void mouseClicked(MouseEvent e){ if(e.getClickCount() == 2)//雙擊托盤窗口再現 setExtendedState(Frame.NORMAL); setVisible(true); } }); } public static void main(String args[]) { new Test(); }}

java程序如何後台運行

直接按複位鍵(掛機鍵)會出現一個菜單:終止、最小化;或者按左鍵選項,又有個菜單:窗口後台運行就可以了。(我的是這樣的,大多數都可以吧)

如何用java進行移動端後台開發

java進行移動後台開發與java進行web後台開發完全一樣。java原生的後台框架servlet,如果使用java後台開源框架可以選用spring+springmvc+mybatis,或者使用ssh框架。

一  其實前台與後台交互常用兩種協議方式:

 1 http協議。

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分散式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。

HTTP協議的主要特點可概括如下:

1.支持客戶/伺服器模式。

2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯繫的類型不同。由於HTTP協議簡單,使得HTTP伺服器的程序規模小,因而通信速度很快。

3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

4.無連接:無連接的含義是限制每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在伺服器不需要先前信息時它的應答就較快。

2 webservice,例子有天氣預報介面。

Web service是一個平台獨立的,低耦合的,自包含的、基於可編程的web的應用程序,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發布、發現、協調和配置這些應用程序,用於開發分散式的互操作的應用程序。[1]

Web Service技術, 能使得運行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換數據或集成。依據Web Service規範實施的應用之間, 無論它們所使用的語言、 平台或內部協議是什麼, 都可以相互交換數據。Web Service是自描述、 自包含的可用網路模塊, 可以執行具體的業務功能。Web Service也很容易部署, 因為它們基於一些常規的產業標準以及已有的一些技術,諸如標準通用標記語言下的子集XML、HTTP。Web Service減少了應用介面的花費。Web Service為整個企業甚至多個組織之間的業務流程的集成提供了一個通用機制。

二 前台後台數據傳遞格式常用的也有兩種:

1 xml

XML 三種解析方式簡介

大名鼎鼎的 DOM

說它大名鼎鼎可是一點不為過,DOM 是 W3C 處理 XML 的標準 API,它是許多其它與 XML 處理相關的標準的基礎,不僅是 Java,其它諸如 Javascript,PHP,MS .NET 等等語言都實現了該標準, 成為了應用最為廣泛的 XML 處理方式。當然,為了能提供更多更加強大的功能,Java 對於 DOM 直接擴展工具類有很多,比如很多 Java 程序員耳熟能詳的 JDOM,DOM4J 等等, 它們基本上屬於對 DOM 介面功能的擴充,保留了很多 DOM API 的特性,許多原本的 DOM 程序員甚至都沒有任何障礙就熟練掌握了另外兩者的使用,直觀、易於操作的方式使它深受廣大 Java 程序員的喜愛。

綠色環保的 SAX

SAX 的應運而生有它特殊的需要,為什麼說它綠色環保呢,這是因為 SAX 使用了最少的系統資源和最快速的解析方式對 XML 處理提供了支持。 但隨之而來繁瑣的查找方式也給廣大程序員帶來許多困擾,常常令人頭痛不已,同時它對 XPath 查詢功能的支持,令人們對它又愛又恨。

默默無聞的 Digester:XML 的 JavaBean 化

Digester 是 apache 基金組織下的一個開源項目,筆者對它的了解源於對 Struts 框架的研究,是否有很多程序員想要一解各大開源框架的設計甚至想要自己寫一個功能強大的框架時會碰到這樣一個難題: 這些形形色色的用 XML 語言標記的框架配置文件,框架底層是用什麼技術來解析呢? DOM 解析耗費時間,SAX 解析又過於繁瑣,況且每次解析系統開銷也會過大, 於是,大家想到需要用與 XML 結構相對應的 JavaBean 來裝載這些信息,由此 Digester 應運而生。它的出現為 XML 轉換為 JavaBean 對象的需求帶來了方便的操作介面,使得更多的類似需求得到了比較完美的解決方法, 不再需要程序員自己實現此類繁瑣的解析程序了。與此同時 SUN 也推出了 XML 和 JavaBean 轉換工具類 JAXB,有興趣的讀者可以自行了解。

2 json

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網路傳輸速率)。

三 安卓學習例子

如果想了解安卓與後台交互的例子,請去360手機助手下載安卓學習手冊,裡面有大量安卓的例子以及http協議詳解,源碼,文檔都可看。下面是例子截圖

原創文章,作者:GVVX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136958.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GVVX的頭像GVVX
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:17

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論