首页 > 编程知识 正文

在后台java怎么使用,JAVA怎么使用

时间:2023-12-27 22:27:46 阅读:326682 作者:TZAB

本文目录一览:

请问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协议详解,源码,文档都可看。下面是例子截图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。