网络中继器管理网址是多少多少钱?哪里有卖网络中继器管理网址是多少的?

博客访问: 9019
博文数量: 5
博客积分: 160
博客等级: 入伍新兵
技术积分: 60
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
本章涵盖内容
■ SWT的重要类:Display和Shell
■ 一个SWT编程实例
■ JFace的重要类: ApplicationWindow
■ 一个SWT/JFace编程实例
GUI编程是软件开发中最有意义的部分之一,但当你一旦依赖于图形界面而非命令行时,就有一个问题浮现出来了:你是怎样接近这些小部件、容器以及操作系统的事件的?那些软件类代表着GUI的不同组件,你又是如何操控它们的?
本章的目的就是要回答上述第一个问题并着手准备第二个。我们将讨论SWT和JFace库的基本类以及它们是如何接近操作系统资源的。本章贡献了两个主源代码HelloSWT.java和HelloSWTJFace.java来演示在有和没有JFace库的情况下如何使用SWT。我们已检查过这些程序并对它们的基本结构得出了结论。本章开始我们将逐步在小部件窗口项目中加入代码。通过这一图形界面我们将融合本书讨论的SWT和JFace的各个主题。我们在此建立其框架并在今后每章中予以更新。由于每一章都会有代码加入,我们建议你紧跟这一开发进程。
2.1 SWT编程
虽然我们很快就能应用JFace,但是本节我们将集中精力于单独的SWT编程。首先,我们要贡献一段基本的GUI代码并检查其结构;然后,本节会详述该套件的两个基本类:Display和Shell。这两个类提供了部件、容器和事件加入的基础。
请注意:为了能编译和执行本书中的代码,你需要在项目中加入SWT/JFace类库,并使程序能找到原生图形库。附录 A “生成SWT/JFace项目”中予以了详尽的介绍。
2.1.1 HelloSWT程序
在开始细节探讨SWT理论之前,最好还是早一点取证明它是如何工作的。由于这个原因,我们贡献了第一个SWT的GUI,HelloSWT.java。我们鼓励你把这个加入到com.swtjface.Ch2包中,并执行程序。
package com.swtjface.Ch2;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class HelloSWT
public static void main (String [] args)
Display display = new Display();
Shell shell = new Shell(display);
Text helloText = new Text(shell, SWT.CENTER);
helloText.setText("Hello SWT!");
helloText.pack();
shell.pack();
shell.open();
while (!shell.isDisposed())
if (!display.readAndDispatch()) display.sleep();
display.dispose();
虽然HelloSWT是一个简单的GUI,但是绝大部分的SWT应用程序都是有着如下的三段式的结构:
第一部分以生成一个Display和Shell类的实例开始。我们马上就会讲到,这一过程是GUI获取底层平台的资源并为其他小部件开辟了一个主窗口。
第二部分是在Shell上加入一个文本小部件,虽然这很简单,但是对于SWT应用程序所作的事情可一样也不能少。它需要处理添加和设置GUI功能生效的阻断。小部件和(容器内)的小部件分组作为Shell的子部件而添加入。
每一个小部件的监听器和事件都做了定义,以便用户的就此开始动作。本节中达代码也对小部件、容器和事件设定了参数以确保它们按要求预定的显示和行为。在此,pack()方法告诉Shell和文本组件使用它们所需的空间。
最后一个部分代表这GUI的操作,直到这一刻为止,整个应用程序的代码除了初始化变量还没有干任何事情。但是一旦Shell的open()方法被调取,应用程序的主窗口就成形其子部件在display中被渲染。只要Shell保持open状态,Display的实例就会使用其readAndDispatch()方法来追踪在操作系统事件队列中与用户相关的事件。当某一个动作促使窗口关闭时,与Display对象(包括Shell以及其子部件等)相联系的资源就全部释放。
图2.1 显示了GUI是如何显现的(基于Linux/GTK)。
祝贺你!你现在已经用SWT库产生了你自己的用户图形界面了。在继续开始下一个使用SWT和JFace的应用程序之前,理解我们所使用的方法和找到设置它们的途径相当重要。
2.1.2 Display类
虽然Display类并不是可见的,但它负责监管着GUI的资源并管理着和操作系统的通信。也即意味着它不光要关注着它自己的窗口是如何显示、移动和重画的,还同时要确保诸如鼠标点击、键盘敲击等事件送达小部件并去处理它们。
Diplay类的操作
虽然Display类在你的代码中仅有区区几行,但是正视和理解其操作相当重要。它是任何SWT和JFace应用程序的承载着,无论你是用SWT/JFace开发或是单用SWT开发,你必须在你的程序中包含这个类的一个实例。唯有如此,你的用户界面才能使用操作系统的小部件和容器并对用户动作作出反应。虽然大部分的应用程序对于Display类所作甚少,或是仅调用了其很少的方法,但是这个类所扮演的角色之重要性还是只得我们大书特书的。
Display类的主要任务就是负责将你的代码重的SWT和JFace命令翻译成底层的命令来调取操作系统。这一过程负责将两部分组合并随着Display类的实例的产生而开始。首先,Display对象构建一个代表着操作系统平台的OS类的实例。这个类通过一系列被称之为原生方法的特殊Java处理过程提供了接触计算机底层资源的途径。
然后,像个总机接线员一样,这个Display对象使用这些方法来直接指令操作系统并向应用程序传达用户动作。如下的关于原生方法的例子中就是对于OS中SetFocus()方法的申明:
public static final native int SetFocus (int hWnd);
这一方法根据其句柄,hWnd在窗口上设定了定位。因为是原生的方法,此间不存在Java代码来指明其操作。反过来,这一关键字告诉了编译器这个方法是用另外一种“其他语言”编写的,并且存在于“另外的文件”之中。本例的HelloSWT.java和其他所有的SWT和JFace应用程序的这一“其他语言”就是C,这一“另外的文件”就是包含于你的项目文件之中的原生图形库。与SetFocus()方法相联系的图形库中的C代码如下:
JNIEXPORT jint JNICALL OS_NATIVE(SetFocus)
(JNIEnv *env, jclass that, jint arg0) {
NATIVE_ENTER(env, that, "SetFocus\n")
rc = (jint)SetFocus((HWND)arg0);
NATIVE_EXIT(env, that, "SetFocus\n")
如你所见,在Java代码中的SetFocus()方法应用的C程序调取了操作系统的SetFocus()函数。很巧,(此处两个SetFocus正好同名,但决不是一体的),相吻合的SWT命令和操作系统调用使得GUI的调试简洁明了。只要你能走出你操作系统API的谜局,你就能明晰在你的代码中到底发生了什么。在这个例子中使用的是Windows的操作系统,但处理的过程在其他Eclipse支持的平台上都是相似的。
需要考虑的另一个要点:如果你的操作系统具有的某类(某一)特性和SWT不兼容,此时你可以使用Java原生接口来自行加入。一切所需的仅是一个SWT中的Java原生方法和调取操作系统的在原生图形库中的C函数。
Display类的方法
表2.1列明并描述了属于Display类的大量方法,这不是一个完全列表,但都是一些使得SWT/JFace发挥作用或是在应用程序中实现特殊能力的至关重要的方法。
有两个在任何基于SWT的GUI中必须用到的方法,第一个是Display(),它产生一个类的实例并将其和GUI相联系;第二个是getCurrent(),它返回一个应用程序的主线程,用户界面线程。第二个方法通常通常是以dispose()方法来终结Display的操作。
表中接下来的两个方法是帮助程序在一旦用户采取了与GUI相关的行动后,接受来自于操作系统的通知。在第四章我们会深入探讨时间处理、句柄和监听器方法,但是理解readAndDispatch()方法是相当重要的,因为这一方法可以接触到操作系统的事件队列并决定着任何用户的动作是否和GUI有关。使用这一方法,HelloSWT类可以知道是否用户决定要丢弃Shell对象。如果是,那么方法就回归一个值“真”,然后应用程序结束。否则,Display对象就调用其sleep()方法,应用程序就持续等待。
虽然Display类是重要的,但是没有办法可以直接观察到其运作的效果。取而代之的办法是你可以使用这些类的可视表现。
综上,所有最重要的类应当是Shell。
2.1.3 Shell类
好比Display类提供了窗口管理一样,Shell类扮演着GUI主窗口的角色。和Display对象不同的是,一个Shell实例是一个可视化的应用,在图2.1中,Shell类在某种程度上通过OS类的接触到操作系统,并仅对主窗口的打开、激活、最大化、最小化和关闭保持追踪。Shell类的主函数为整合在GUI内的容器、小部件和事件提供了一个通用的接入点。从这一点讲,Shell的作用象这些组件的父类。图2.2中显示了在一个应用程序的操作系统、Display、Shell、和其他小部件之间的关系。
表2.1 Display类中的重要方法和它们的功能
Display method Function
Display() 分派平台资源并产生一个Display对象
getCurrent() 返回一个用户界面线程
readAndDispatch() Display对象翻译事件并将它们传递给接受其sleep() Display对象等待事件
每一个SWT/JFace应用程序都是基于其主Shell对象上的小部件的,但是在应用程序中可能还存在着其他的Shell对象,它们通常是和一些临时窗口或是对话框相联系的(这些将在第10章里讨论)。这些Shell并不附着于Display实例,因而被看作是从属性的Shell。附着于Display的shell被成为顶层shell。在HelloSWT应用程序的Shell实例有着大量的属性,这些属性可以允许用户修改状态值或是读取信息。这样的特性形成了组件的风格。你也可以通过向Shell的构造器加入第二个参数来控制Shell的风格。之前我们看到的是在HelloSWT的Shell声名中仅有一个参数,那就是display,这时Shell接受了一个顶层窗口的默认风格,称为“SHELL_TRIM”。
着组合了大量的单个风格元素,并告诉应用程序窗口应该有一个标题栏(SWT.TITLE)和用户可以最小化SWT.MIN)、最大化(SWT.MAX)、改变尺寸(SWT.RESIZE)和关闭(SWT.CLOSE)shell。至于其他的shell的默认风格,DIALOG_TRIM则确保着对话框的shell有一个标题栏、一个活动区的边界(SWT.BORDER)和被关闭的能力。
在你的GUI之内,你可以设定shell或其他小部件的风格参数值,若是多个值则可以用“|”相连。除了提到的属性,你还可以确定shell的形态,以限定用户修改shell的状态。有一个形态对话框会将除对话框以外的动作全部阻断以获取用户的关注。它不能被移动或是改变尺寸,只可以使用给予的按钮关闭或是取消。
最后,由于不是每一个系统平台都可以对GUI的组件进行渲染,所以你应当理解SWT仅是将这些风格设置作为一种指导而不是严格的限定。
2.2 SWT/JFace程序
有着对与SWT的清晰理解,我们就可以直入主题学习JFace了。虽然应用SWT和JFace的编程相对于单独使用SWT的结构全然不同,但是这两个库蕴涵的概念是相近的。象先前的章节一样,本节会提供给读者一个SWT/JFace的实例代码并阐释器结构。再进一步,我们会深入转眼JFace类库里提供的一个重要类:ApplicationWindow。
在第一章,我们解释了构造JFace的目的是为了简化SWT的开发。现在我们深入下去来演示它的主类是如何工作的。
2.2.1 基于模型的适配器
Eclipse文档中使用了两个术语来指代和SWT小部件协同的JFace类:助手类和基于模型的适配器。在本书中我们选择了后者。关于这一点,确实是比较容易引起混淆的,因为在Java中一个适配器是指一个为小部件提供额外的事件处理能力的类,而没有一个有自尊的程序员会使用助手类这一词眼,因此我们就将此称为基于模型的适配器或是JFace适配器。
这些适配器可以被分为四大类,如在表2.2中列示的那样。在随后的章节中我们会深入剖析,但在此我们仅是作大致描述。
Table 2.2 Categories of JFace adapters
适配器分类 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功能
阅读器 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&分离小部件的外观和信息
动作和实施 &&&&&&&&&&&&&&&&&&&&&&&&&简化和组织事件处理进程
图案和字体注册 &&&&&&&&&&&&&&&&&&&&&管理和分配/释放图案、字体资源
对话框和向导 &&&&&&&&&&&&&&&&&&&&&&&扩展SWT对话框和用户互动的能力
第一个也是广为使用的大类包含有Viewer(阅读器)类,这方面的内容在第9章会有全部的叙述。在SWT中,一个GUI组件的信息和外观通常是被绑定在一起的。然而,viewer将这些方面分离了,并允许在不同的表单中使用相同的信息。例如,在SWT中的树的信息是不能被从树对象中分离出来的,但是在JFace的一个树阅读器中的相同信息却可以在一个表阅读器或是列表阅读器中显示。
第二个大类包含有动作和实施,这在本书第4章中有描述。这些适配器简化了事件的处理,并将针对用户命令的反应从引发那种反应的GUI事件中分离出来。这一点可以通过实例得以很好地说明。在SWT中,如果有四个不同的按钮都是去关闭一个对话框的,然后你必须要写上四遍不同的事件处理规程(代码)即便它们完成着相同的结果。在JFace中,这四个规程可以整合在一个动作中,然后JFace可以自动会将这四个按钮作为该行为的实施者。
第三大类包含有图案和字体的注册,这写在本书第7章有叙述。在SWT中,如何保持字体和图案的内存资源分配以最小是相当重要的,因为它们在消耗着操作系统的资源。但是由于有了JFace的注册机制,这些资源可以按需分配和释放。因此如你使用多个的图案和字体,你不必关注如何地手工回收垃圾。
最后一个大类包含有JFace的对话框和向导,本书的第10、11章会展开描述。这一些由于它们拓展了SWT对话框的能力,应该是最容易能够被理解的。JFace提供的对话框可以展示信息、提示错误、显示某一过程的进度,额外的,JFace还提供了一组特别的对话框称为:向导。向导指引着用户完成一组任务,如:安装软件或是设置一个输入文件等。
2.2.2 HelloSWT_JFace程序
学习JFace的最佳途径就是用其类库写上一段代码。如下显示了HelloSWT_JFace类的代码,执行的结果和HelloSWT是相近的,但是程序的结构是完全不同的。
package com.swtjface.Ch2;
import org.eclipse.jface.window.*;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class HelloSWT_JFace extends ApplicationWindow
& public HelloSWT_JFace()
&&& super(null);
& protected Control createContents(Composite parent)
&&& Text helloText = new Text(parent, SWT.CENTER);
&&& helloText.setText("Hello SWT and JFace!");
&&& parent.pack();
& public static void main(String[] args)
&&& HelloSWT_JFace awin = new HelloSWT_JFace();
&&& awin.setBlockOnOpen(true);
&&& awin.open();
&&& Display.getCurrent().dispose();
虽然HelloSWTJFace.java程序代码比HelloSWT.java稍长,但是其结构有三个类的方法分隔而较为明晰。
第一个方法是HelloSWT_JFace(),它构造了主类的一个实例。任何的分配过程中需要执行的设置和通信动作都需在此编写代码。而在HelloSWT_JFace类中这倒是不需要的,因为这个类仅调用了其超类的一个构造器。
第二个方法createContents()处理窗口的设计。由于ApplicationWindow的可视化部分不是直接可得的,这一方法将与一个被成为合成器的小部件容器相联系来控制GUI的外观。这个容器对象作为任何GUI容器的父对象并需要被加入到应用程序中。在所有的小部件生成、设置以及加入父对象后,createContents()方法将该合成器返回主窗口进行显示。
这个应用程序的最后一部分是main()方法,该方法负责照看GUI的真实运作。在ApplicationWindow的资源分配完毕后,这个方法就负责设置窗口的显现,直至setBlockOnOpen()方法以一个真值被调用时关闭。然后,ApplicationWindow的open()方法被调用,根据createContents()方法返回的合成器来显示窗口。而open()方法之后的代码仅当窗口关闭时才发生作用。再后,程序使用dispose()方法来释放GUI的Display实例资源。因为在HelloSWT_JFace中的每一个小部件都是display的子对象,丢弃了display对象也释放了程序中每一个GUI组件。
应用程序中的代码一经编译运行,效果应如图2.3。
2.2.3 JFace and SWT/JFace内的编程
到这一刻,对单独使用SWT编程的HelloSWT.java和应用SWT/JFace变成的HelloSWT_JFace.java的代码进行比照应当对我们有所帮助了。主要的区别在于SWT整合了GUI的外观和操作在其Shell类内,而相对应地,SWT/JFace将这些分离为若干部分。这一模式鼓励代码重用,并可以往使得一个程序员在考虑窗口的行为时,另一个程序员同时设计窗口的视图。由合成器控制着的外观可以用createContents()方法来进行设置,而其运作部分主要是通过ApplicationWindow类的实例来实现。由于这个类对于SWT/JFace的应用程序如此之重要,所以需要细细检查其功效。
2.2.4 The ApplicationWindow类
虽然我们已经提到过,HelloSWT_JFace中的ApplicationWindow如何不同于HelloSWT中的Shell对象,但是这两个应用程序都需要Shell和Display对象来和操作系统进行通信。一个SWT应用程序需要一个独立的Display实例而ApplicationWindow则无论是在构造是带有空参数都会产生其自己的Shell。这个类的关系在图2.4中有显示。表面上看来,无需如此复杂,但是当你是在构建大型的用户界面时使用JFace窗口的好处是显而易见的。
如同在本节开始提到的基于模型的适配器一样,ApplicationWindow作为基于Shell类的JFace适配器有两个好处:其一,之前已经提到的,ApplicationWindow把GUI的外观从其行为中分离开来;其二,它提供了对于设计人员相当有帮助的如何设定窗口的额外方式。虽然Shell类有方法可以改变其尺寸和风格,而ApplicationWindow所具有的方法对于定制化是大有裨益的。这些方法具体见图2.3。如同在表中所见,ApplicationWindow对象所具有的方法使得GUI编程大大简化。你可以快速地设定窗口的菜单栏、状态栏或是状态栏。这些方法还能设定应用程序的exceptoin句柄以及其默认图案。在SWT中,这样的能力需要对你产生的shell逐个设定,而在JFace中,这都是自动的。
表 2.3 ApplicationWindow类中的设置方法
ApplicationWindow方法 功能
addMenuBar() Configures the window with a top-level menu
addToolBar() Adds a toolbar beneath the main menu
addStatusLine() Creates a status area at the bottom of the window
setStatus(String) Displays a message in the status area
getSeparator() Returns the line separating the menu from the window
setDefaultImage(Image) Displays an image when the application has no shell
setExceptionHandler(IExceptionHandler)
Configures the application to handle exceptions according to the specified interface
2.3 开始WidgetWindow(小部件窗口)应用程序
虽然HelloSWT和HelloSWT_JFace类对于学习基础SWT/JFace编程很有帮助,但是这一工具套件提供了如此多的功能,尚需我们进一步地浏览。为了避免多项目情况下的重复代码编写,我们考虑通过建立单一项目并在每章添加代码的方式应是最佳的。
为减少小部件窗口设计的负责度,我们决定同时使用SWT和JFace。在本章中,我们将生成基本的窗口,我们强烈建议你把这个类加入到你的com.swtjface.Ch2程序包中。
package net.
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.window.*;
public class WidgetWindow extends ApplicationWindow
& public WidgetWindow()
&&& super(null);
& protected Control createContents(Composite parent)
&&& getShell().setText("Widget Window");
&&& parent.setSize(400,250);
& public static void main(String[] args)
&&& WidgetWindow wwin = new WidgetWindow();
&&& wwin.setBlockOnOpen(true);
&&& wwin.open();
&&& Display.getCurrent().dispose();
图2.5 显示了虽然平淡但是重要的小部件窗口类的执行输出。presents the unexciting but important
虽然你不得不要等到下面的章节才有机会作一些有趣和激动人心的图形界面,但是现在为止你应当已经相当稳固地掌握了SWT和JFace的内在机理。这些类库使得以平台独立的方式去接近平台的特定资源成为可能,而且理解这些成就这一可能的对象也相当重要。
重要的对象是Display,它在后台与操作系统保持着通信。这一通信确保你的SWT/JFace应用程序可以使用原生组件并处理事件。虽然Display自己没有任何外观,但其它的小部件都需要它的运作才得以成形。
SWT提供一个Shell类作为大一统的GUI应用程序和对话框的容器。Shell形成GUI的父窗口并为子小部件们和Display提供通信。使用风格值,你可以定制Shell的外观和行为。
与上面相对照的,JFace的应用程序使用ApplicationWindow作为它们的主容器。不同于Shell, ApplicationWindow没有内置的form。这意味着你可以随心所欲地指定你的顶级窗口;另外,这些对象提供的方法可以轻易与其他特性集成,如菜单、工具条或是状态栏等。
如你所见的,Shell类和ApplicationWindow类中,SWT和JFace类库提供了相近的功能。这种冗余(重复)性使得笔者在决定本书结构式颇费了一番周章。
最先,我们考虑最好是提供两个相互独立的部分,一部分涵盖SWT,另一部分则讲述SWT/JFace。但我们随即意识到这一方式不可行:首先,因为JFace提供几乎很少的小部件和容器,这两个部分的绝大部分代码会有重复;其次,在我们以后的章节中可以看到,如果要在SWT中实现复杂的功能,则需要惊人的代码量,而同样过程如过有了JFace则会大大简化。
因此,本书决定同步展示SWT和SWT/JFace开发。为了彻底阐明基本概念,我们打算在SWT中演示如何应用GUI特性,但是对于在小部件窗口应用程序中加入功能,我们强烈建议用两个类库编程。如此做法,我们认为不仅会增进你对SWT和JFace的理解,还能提升你对如何整合协同两套工具套件的感悟。
无论如何,提升你的感悟的最好方式就是用真实的小部件来构建真实的GUI。看看它们是如何运作的吧!
阅读(996) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。博客访问: 255344
博文数量: 148
博客积分: 3055
博客等级: 中校
技术积分: 1557
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
基本类和接口一、javax.servlet.Servlet接口servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。&servlet接口中的方法&&&&&&&void&init(ServletConfit&config)throws&ServletException&&&&在servlet被载入后和实施服务前由servlet引擎进行?次性调用。如果init()产生溢出UnavailableException,则servle退出服务。&&&&&&&ServletConfig&getServletConfig()&&&&返回传递到servlet的init()方法的ServletConfig对象&&&&&&&void&service(ServletRequest&request,&ServletResponse&response)throws&ServletException,IOException&&&&处理request对象中描述的请求,使用response对象返回请求结果&&&&&&&String&getServletInfo()&&&&&&&&返回描述servlet的一个字符串&&&&&&&void&destory()&&&&&&&&当servlet将要卸载时由servlet引擎调用&&&&&二、javax.servlet.GenericServlet类(协议无关版本)GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。servlet&API提供了Servlet接口的直接实现,称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet上下文,提供对授权传递到init()方法中的ServletConfig对象的方法。&GenericServlet类中的方法&&&&&&&void&destory()&&&&编飞组成单词“destory”的一个注册入口&&&&&&&String&getInitParameter(String&name)&&&&返回具有指定名称的初始化参数值。通过凋用config.getInitParameter(name)实现。&&&&&&&Enumeration&getInitParameterNames()&&&&返回此serv]et已编码的所有初始化参数的?个枚举类型值。调用config.getInitParameterNames()获得列表。如果未提供初始化参数,则返回?个空的枚举类型值(但不是null)&&&&&&&ServletConfig&getServletConfig()&&&&返回传递到init()方法的ServletConfig对象&&&&&&&ServletContext&getServletContext()&&&&返回在config对象中引用的ServletContext&&&&&&&String&getServletInfo()&&&&返回空字符串&&&&&&&void&init(ServletConfig&config)throws&ServletException&&&&在一实例变量中保存config对象。编写组成单词“init”的注册入口,然后调用方法init()&&&&&&&void&init()throws&ServletException&&&&可以被跳过以处理servlet初始化.在config对象被保存后init(ServletConfig&config)的结尾处自动被调用.servlet作者经常会忘记调用super.init(config)&&&&&&&&void&log(String&msg)&&&&编写注册servlet的入口.为此调用servlet上下文的log()方法.servlet的名字被加到消息文本的开头。&&&&&&&void&log(String&msg,Throwable&t)&&&&编写一个入口和servlet注册的栈轨迹。此方法也是ServletContext中相应方法的一个副本。&&&&&&&abstract&void&service(Request&request,Response&response)throws&ServletException,IOException&&&&由servlet引擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方法。&&&&&&&String&getServletName()&&&&返回在Web应用发布描述器(web.xml)中指定的servlet的名字。&&&&&三、javax.servlet.http.HttpServlet类(HTTP版本)虽然servlet&API允许扩展到其它协议,但最终所有的servlet均在Web环境下实施操作,只有几种servlet直接扩展了GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet。HttpServlet类通过调用指定到HTTP请求方法的方法实现service(),亦即对DELETE、HEAD、GET、OPTIONS、POST、PUT和TRACE,分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,将请求和响应对象置入其HTTP指定子类。&HttpServlet类中的方法&&&&&&&Void&doGet(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&由servlet引擎调用用处理一个HTTP&GET请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。&&&&&&&Void&doPost(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&由servlet引擎调用用处理一个HTTP&POST请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。&&&&&&&Void&doPut(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&由servlet引擎调用用处理一个HTTP&PUT请求。本方法中请求URI指出被载入的文件位置。&&&&&&&Void&doDelete(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&由servlet引擎调用用处理一个HTTP&DELETE请求。请求URI指出资源被删除。&&&&&&&Void&doOptions(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&由servlet引擎调用用处理一个HTTP&OPTIONS请求。返回一个Allow响应头标表明此servlet支持的HTTP方法。一个servlet不需要覆盖此方法,因为HttpServlet方法已经实现规范所需的功能。&&&&&&&Void&doTrace(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&由servlet引擎调用用处理一个HTTP&TRACE请求。使得请求头标被反馈成响应关标。一个servlet不需要覆盖此方法,因为HttpServlet方法已经实现HTTP规范所需的功能。&&&&&&&Void&service(HttpServletRequest&request,HttpServletResponse&response)throws&ServletException,IOException&&&&Service(Request&request,Response&response)调用的一个立即方法,带有指定HTTP请求和响应。此方法实际上将请求导向doGet()、doPost()等等。不应该覆盖此方法。&&&&&&&Void&service(Request&request,Response&response)throws&ServletException,IOException&&&&将请求和响应对象置入其指定的HTTP子类,并调用指定HTTP的service()方法。&&&&&四、javax.servlet.ServletRequest类(协议无关版本)ServletRequest接口封装了客户端请求的细节。它与协议无关,并有一个指定HTTP的子接口。ServletRequest主要处理:1.找到客户端的主机名和IP地址2.检索请求参数3.取得和设置属性4.取得输入和输出流&ServletRequest类中的方法&&&&&&&Object&getAttribute(String&name)&&&&返回具有指定名字的请求属性,如果不存在则返回null。属性可由servlet引擎设置或使用setAttribute()显式加入。&&&&&&&Enumeration&getAttributeName()&&&&返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。&&&&&&&String&getCharacteEncoding()&&&&返回请求所用的字符编码。&&&&&&&Int&getContentLength()&&&&指定输入流的长度,如果未知则返回-1。&&&&&&&ServletInputStream&getInputStream()throws&IOException&&&&返回与请求相关的(二进制)输入流。可以调用getInputStream()或getReader()方法之一。&&&&&&&String&getParameter(String&name)&&&&返回指定输入参数,如果不存在,返回null。&&&&&&&Enumeration&getParameterName()&&&&返回请求中所有参数名的一个可能为空的枚举。&&&&&&&String[]&getParameterValues(String&name)&&&&返回指定输入参数名的取值数组,如果取值不存在则返回null。它在参数具有多个取值的情况下十分有用。&&&&&&&String&get&Protocol()&&&&返回请求使用协议的名称和版本。&&&&&&&String&getScheme()&&&&返回请求URI的子串,但不包含第一个冒号前的内容。&&&&&&&String&getServerName()&&&&返回处理请求的服务器的主机名。&&&&&&&String&getServerPort()&&&&返回接收主机正在侦听的端口号。&&&&&&&BufferedReader&getReader()throws&IOException&&&&返回与请求相关输入数据的一个字符解读器。此方法与getInputStream()只可分别调用,不能同时使用。&&&&&&&String&getRemoteAddr()&&&&返回客户端主机的数字型IP地址。&&&&&&&String&getRemoteHost()&&&&如果知道,返回客户端主机名。&&&&&&&void&setAttribute(String&name,Object&obj)&&&&以指定名称保存请求中指定对象的引用。&&&&&&&void&removeAttribute(String&name)&&&&从请求中删除指定属性&&&&&&&Locale&getLocale()&&&&如果已知,返回客户端的第一现场或者为null。&&&&&&&Enumeration&getLocales()&&&&如果已知,返回客户端的第一现场的一个枚举,否则返回服务器第一现场。&&&&&&&boolean&isSecure()&&&&如果请求使用了如HTTPS安全隧道,返回true&&&&&&&RequestDispatcher&getRequestDispatcher(String&name)&&&&返回指定源名称的RequsetDispatcher对象。&&&&&五、javax.servlet.http.HttpServletRequest接口(HTTP版本)HttpServletRequest类主要处理:1.读取和写入HTTP头标2.取得和设置cookies3.取得路径信息4.标识HTTP会话。&HttpServletRequest接口中的方法&&&&&&&String&getAuthType()&&&&如果servlet由一个鉴定方案所保护,如HTTP基本鉴定,则返回方案名称。&&&&&&&String&getContextPath()&&&&返回指定servlet上下文(web应用)的URL的前缀。&&&&&&&Cookie[]&getCookies()&&&&返回与请求相关cookie的一个数组。&&&&&&&Long&getDateHeader(String&name)&&&&将输出转换成适合构建Date对象的long类型取值的getHeader()的简化版。&&&&&&&String&getHeader(String&name)&&&&返回指定的HTTP头标指。如果其由请求给出,则名字应为大小写不敏感。&&&&&&&Enumeration&getHeaderNames()&&&&返回请求给出的所有HTTP头标名称的权举值。&&&&&&&Enumeration&getHeaders(String&name)&&&&返回请求给出的指定类型的所有HTTP头标的名称的枚举值,它对具有多取值的头标非常有用。&&&&&&&int&getIntHeader(String&name)&&&&将输出转换为int取值的getHeader()的简化版。&&&&&&&String&getMethod()&&&&返回HTTP请求方法(例如GET、POST等等)&&&&&&&String&getPathInfo()&&&&返回在URL中指定的任意附加路径信息。&&&&&&&String&getPathTranslated()&&&&返回在URL中指定的任意附加路径信息,被子转换成一个实际路径。&&&&&&&String&getQueryString()&&&&返回查询字符串,即URL中?后面的部份。&&&&&&&String&getRemoteUser()&&&&如果用户通过鉴定,返回远程用户名,否则为null。&&&&&&&String&getRequestedSessionId()&&&&返回客户端的会话ID&&&&&&&String&getRequestURI()&&&&返回URL中一部分,从“/”开始,包括上下文,但不包括任意查询字符串。&&&&&&&String&getServletPath()&&&&返回请求URI上下文后的子串&&&&&&&HttpSession&getSession()&&&&调用getSession(true)的简化版。&&&&&&&HttpSession&getSession(boolean&create)&&&&返回当前HTTP会话,如果不存在,则创建一个新的会话,create参数为true。&&&&&&&Principal&getPrincipal()&&&&如果用户通过鉴定,返回代表当前用户的java.security.Principal对象,否则为null。&&&&&&&boolean&isRequestedSessionIdFromCookie()&&&&如果请求的会话ID由一个Cookie对象提供,则返回true,否则为false。&&&&&&&boolean&isRequestedSessionIdFromURL()&&&&如果请求的会话ID在请求URL中解码,返回true,否则为false&&&&&&&boolean&isRequestedSessionIdValid()&&&&如果客户端返回的会话ID仍然有效,则返回true。&&&&&&&Boolean&isUserInRole(String&role)&&&&如果当前已通过鉴定用户与指定角色相关,则返回true,如果不是或用户未通过鉴定,则返回false。&&&&&六、javax.servlet.ServletResponse接口(协议无关版本)ServletResponse对象将一个servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由servlet引擎创建.&ServletResponse接口中的方法&&&&&&&void&flushBuffer()throws&IOException&&&&发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送,调用此方法发送状态行和响应头标,以确认请求。&&&&&&&int&getBufferSize()&&&&返回响应使用的缓存大小。如果缓存无效则返加0。&&&&&&&String&getCharacterEncoding()&&&&返回响应使用字符解码的名字。除非显式设置,否则为ISO-8859-1&&&&&&&Locale&getLocale()&&&&返回响应使用的现场。除非用setLocale()修改,否则缺省为服务器现场。&&&&&&&OutputStream&getOutputStream()throws&IOException&&&&返回用于将返回的二进制输出写入客户端的流,此方法和getWrite()方法二者只能调用其一。&&&&&&&Writer&getWriter()throws&IOException&&&&返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。&&&&&&&boolean&isCommitted()&&&&如果状态和响应头标已经被发回客户端,则返回true,在响应被确认后发送响应头标毫无作用。&&&&&&&void&reset()&&&&清除输出缓存及任何响应头标。如果响应已得到确认,则引发事件IllegalStateException。&&&&&&&void&setBufferSize(int&nBytes)&&&&设置响应的最小缓存大小。实际缓存大小可以更大,可以通过调用getBufferSize()得到。如果输出已被写入,则产生IllegalStateException。&&&&&&&void&setContentLength(int&length)&&&&设置内容体的长度。&&&&&&&void&setContentType(String&type)&&&&设置内容类型。在HTTP&servlet中即设置Content-Type头标。&&&&&&&void&setLocale(Locale&locale)&&&&设置响应使用的现场。在HTTP&servlet中,将对Content-Type头标取值产生影响。&&&&&七、javax.servlet.http.HttpServletResponse接口(HTTP版本)HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web页面的HTTP会话ID进行解码。&HttpServletResponse接口中的方法&&&&&&&void&addCookie(Cookie&cookie)&&&&将一个Set-Cookie头标加入到响应。&&&&&&&void&addDateHeader(String&name,long&date)&&&&使用指定日期值加入带有指定名字(或代换所有此名字头标)的响应头标的方法。&&&&&&&void&setHeader(String&name,String&value)&&&&设置具有指定名字和取值的一个响应头标。&&&&&&&void&addIntHeader(String&name,int&value)&&&&使用指定整型值加入带有指定名字的响应头标(或代换此名字的所有头标)。&&&&&&&boolean&containsHeader(String&name)&&&&如果响应已包含此名字的头标,则返回true。&&&&&&&String&encodeRedirectURL(String&url)&&&&如果客户端不知道接受cookid,则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其他被编码的URLs应被传递到encodeURL()&&&&&&&String&encodeURL(String&url)&&&&&&&&&&&void&sendError(int&status)&&&&设置响应状态码为指定值(可选的状态信息)。HttpServleetResponse定义了一个完整的整数常量集合表示有效状态值。&&&&&&&void&sendError(int&status,String&msg)&&&&&&&&&&&void&setStatus(int&status)&&&&设置响应状态码为指定指。只应用于不产生错误的响应,而错误响应使用sendError()。&&&&&八、javax.servlet.ServletContext接口一个servlet上下文是servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系统的一个目录。一个servlet可以通过ServletConfig对象的getServletContext()方法得到servlet上下文的引用,如果servlet直接或间接调用子类GenericServlet,则可以使用getServletContext()方法。Web应用中servlet可以使用servlet上下文得到:1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。2.读取Web应用中文件内容和其他静态资源的功能。3.互相发送请求的方式。4.记录错误和信息化消息的功能。&ServletContext接口中的方法&&&&&&&Object&getAttribute(String&name)&&&&返回servlet上下文中具有指定名字的对象,或使用已指定名捆绑一个对象。从Web应用的标准观点看,这样的对象是全局对象,因为它们可以被同一servlet在另一时刻访问。或上下文中任意其他servlet访问。&&&&&&&void&setAttribute(String&name,Object&obj)&&&&设置servlet上下文中具有指定名字的对象。&&&&&&&Enumeration&getAttributeNames()&&&&返回保存在servlet上下文中所有属性名字的枚举。&&&&&&&ServletContext&getContext(String&uripath)&&&&返回映射到另一URL的servlet上下文。在同一服务器中URL必须是以“/”开头的绝对路径。&&&&&&&String&getInitParameter(String&name)&&&&返回指定上下文范围的初始化参数值。此方法与ServletConfig方法名称不一样,后者只应用于已编码的指定servlet。此方法应用于上下文中所有的参数。&&&&&&&Enumeration&getInitParameterNames()&&&&返回(可能为空)指定上下文范围的初始化参数值名字的枚举值。&&&&&&&int&getMajorVersion()&&&&返回此上下文中支持servlet&API级别的最大和最小版本号。&&&&&&&int&getMinorVersion()&&&&&&&&&&&String&getMimeType(String&fileName)&&&&返回指定文件名的MIME类型。典型情况是基于文件扩展名,而不是文件本身的内容(它可以不必存在)。如果MIME类型未知,可以返回null。&&&&&&&RequestDispatcher&getNameDispatcher(String&name)&&&&返回具有指定名字或路径的servlet或JSP的RequestDispatcher。如果不能创建RequestDispatch,返回null。如果指定路径,必须心“/”开头,并且是相对于servlet上下文的顶部。&&&&&&&RequestDispatcher&getNameDispatcher(String&path)&&&&&&&&&&&String&getRealPath(String&path)&&&&给定一个URI,返回文件系统中URI对应的绝对路径。如果不能进行映射,返回null。&&&&&&&URL&getResource(String&path)&&&&返回相对于servlet上下文或读取URL的输入流的指定绝对路径相对应的URL,如果资源不存在则返回null。&&&&&&&InputStream&getResourceAsStream(String&path)&&&&&&&&&&&String&getServerInfo()&&&&返顺servlet引擎的名称和版本号。&&&&&&&void&log(String&message)void&log(String&message,Throwable&t)&&&&将一个消息写入servlet注册,如果给出Throwable参数,则包含栈轨迹。&&&&&&&void&removeAttribute(String&name)&&&&从servlet上下文中删除指定属性。&&&&&九、javax.servlet.http.HttpSession接口HttpSession类似于哈希表的接口,它提供了setAttribute()和getAttribute()方法存储和检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象,并使之对当前请求可用。&HttpSession接口中的方法&&&&&&&Object&getAttribute(String&name)&&&&将会话中一个对象保存为指定名字,返回或删除前面保存的此名称对象。&&&&&&&void&setAttribute(String&name,Object&value)&&&&&&&&&&&void&removeAttribute(String&name)&&&&&&&&&&&Enumeration&getAttributeName()&&&&返回捆绑到当前会话的所有属性名的枚举值。&&&&&&&long&getCreationTime()&&&&返回表示会话创建和最后访问日期和时间的一个长整型,该整型形式为java.util.Date()构造器中使用的形式。&&&&&&&long&getLastAccessedTime()&&&&&&&&&&&String&getId()&&&&返回会话ID,servlet引擎设置的一个唯一关键字。&&&&&&&ing&getMaxInactiveInterval()&&&&如果没有与客户端发生交互,设置和返回会话存活的最大秒数。&&&&&&&void&setMasInactiveInterval(int&seconds)&&&&&&&&&&&void&invalidate()&&&&使得会话被终止,释放其中任意对象。&&&&&&&boolean&isNew()&&&&如果客户端仍未加入到会话,返回true。当会话首次被创建,会话ID被传入客户端,但客户端仍未进行包含此会话ID的第二次请示时,返回true。&&&&&
阅读(2690) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 中继器管理网址是多少 的文章

 

随机推荐