- 浏览: 2046405 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
构造方法
一个企业级的应用程式能有几种方法来构造Applet和Servlet的使用。我将向大家介绍三种不同的构造方法,并对他们的优缺点进行比较。
第一种方法实际上只使用了Applet而没有使用Servlet,尽管Applet受到他们的安全模式的限制,不过Applet还是能使用象JDBC、RMI这样的协议来访问象数据库、LDAP目录和Enterprise JavaBeans组件这样的后端信息。
这种方法虽然看上去非常简单,不过这并不是个好的方法,他会带来非常多的问题。首先, 这种安排需求你将所有的访问信息直接嵌入到你的Applet代码中。数据库用户名、口令、服务器标识,所有的这一切都必须包含在你的Applet代码中,这样最终用户就有可能从类文件中搜集到这些信息。
此外,数据库或所有其他你访问的系统都必须在提供Applet的同一台服务器上。这意味着你的服务器将不得不承担双重的负担,他既是个web服务器,也是个数据库服务器。
典型的情况是,你的后端资源可能受到防火墙的保护,不过在这种情况下,这是不可能的,因为运行在客户端上的Applet必须直接访问你的机器。最后,使用这种方法,你想使用web服务器群集,如果不是不可能的,至少也是非常困难的。
好一点的方法是将和后端资源通信的事务封装到Servlet中,而Applet仅仅用来处理前端的工作。在这种构造方法中,正如我们在图2中所示的那样,Servlet克服了Applet固有的安全约束,并用来控制Applet访问企业信息系统和事务逻辑。
当Servlet接受到一个请求时,他会在后端数据库中查询信息、执行计算、处理对代表Applet的信息的获取并作用于来自Applet的信息。这种方法的一大进步是Applet/Servlet对能分布在一个后端web服务器的群集上,所有和某一共享的数据库的通信都存在于后端。
此外,使用Servlet的设计有助于设计的模块化、抽象应用程式的后端处理商业逻辑并提高设计的灵活性。
如果你是围绕Enterprise JavaBeans构建你的应用程式,Servlet就成了中间件。EJB组件能更加有助于将商业逻辑从Servlet中分离出来,并将其更加抽象。
在这种情况下,一个Applet和他的Servlet通信,Servlet再和EJB组件通信。在应用程式构建中引入由EJB组件、Servlet和前端的applet/HTML这样的层次结构,能给我们提供最大限度的弹性和性能。尽管这样做你必须附出复杂化和费用的代价。
通信策略
如果你使用了这样的构造:在前端使用Applet,在后端使用Servlet,那么你将需要执行Applet和Servlet的通信。因为Applet受浏览器的安全模式的限制,我们在对一个Applet存取数据和信息时并没有太多的选择。
正如我们在前面提到的,我们不能读取客户端的文件系统、不能运行客户端的程式,由于Applet不是在服务器上运行的,我们也不能访问服务器上的文件系统。我们只能建立到运行在我们的主机上的服务的网络连接。
另外,不要忘记应用程式是在一个公开的Internet上发布的,防火墙可能会限制通过HTTP到Servlet或其他web-server模块的会话。事实上,因为Applet本身就是在网络上通过HTTP发布的,所以我们必须准确把握通信的策略。
假定在客户端的Applet和服务器端的Servlet之间的网络连接是我们能使用的唯一的通信路径,我们能有几种方法交换信息。正如你知道的,文字流能由服务器通过HTTP发放。
不过你可能不知道Java对象出能用这种方式发放。我们将周详地介绍HTTP文字流和HTTP对象流的使用。另外,我们将简单地介绍通过Socket进行通信的方法。
Applet和Servlet交换信息的最简单地方法就是通过HTTP文字流。Java的URL和URLConnection类型使得从一个URL读取数据变得非常容易,你能不用担心Socket和其他有关网络工作的通常的复杂问题。我们所需要的只是个服务器端的组件,这个组件应该能通过URL发放信息。这就是我们在这儿使用Servlet的原因。
作为一个例子,我们想要监视服务器的JVM所能使用的内存的总数,并在一个Applet中用一个简单的仪表显示他。首先我们需要研发一个Servlet,当通过他的URL访问这个Servlet时能返回我们所需要绘制仪表的信息。这个Servlet的原始码如清单1所示。
清单1
import javax.servlet.*;
import javax.servlet.http.*;
public class ShowMemservlet
extends Httpservlet
{
public void doGet(HttpservletRequest
req, HttpservletResponse res)
throws servletException, IOException
{
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
Runtime rt = Runtime.getRuntime();
out.println(rt.freeMemory());
out.println(rt.totalMemory());
}
}
这个非常简单的Servlet会响应一个GET请求(直接通过浏览器或是象我们在下面将看到的那样通过我们的Applet),并返回两行文字。第一行显示了服务器的JVM的剩余的自由空间,第二行显示了JVM可用的全部空间(译者注:包括已使用的空间)。
要建立我们的Applet中的仪表,我们只需要建立一个到这个Servlet的连接,将他的InputStream封装到一个DataInputStream中,读出这两个参数,将其转换成数字,并更新我们的仪表。
我们能让我们的Applet执行Runnable接口并在其自己的线程中运行。每隔一秒钟,我们能运行一个方法来更新我们的仪表。refresh()方法的代码如清单2所示。
清单2
private void refresh()
throws MalformedURLException,
IOException
{
URL url = new URL(getCodeBase(),
"/servlet/ShowMemServlet");
URLConnection con = url.openConnection();
con.setUseCaches(false);
InputStream in = con.getInputStream();
DataInputStream textStream;
textStream = new DataInputStream(in);
String line1 = textStream.readLine();
String line2 = textStream.readLine();
double freeMem = Double.parseDouble(line1);
double totalMem = Double.parseDouble(line2);
int usedMem = totalMem - freeMem;
int percentUsed =
(int) 100 *(usedMem / totalMem);
meter.setLength(percentUsed);
}
正如你看到的,HTTP文字流的使用相当简单而且直接。Applet建立到Servlet的连接,读取他返回的两行信息并对其进行适当的处理。
使用简单的文字流来交换数据有一个主要的弱点,那就是Applet并不直接理解数据的信息,而是要将其转换成一个有用的格式。在我们的例子中,将字符串转换成数字还不算太复杂,不过当我们试图处理一个更复杂的数据和对象时,转换的工作会非常快变得无法控制。事实上,在下面我们能看到我们一种简单的方法来处理这些复杂的数据。
一个企业级的应用程式能有几种方法来构造Applet和Servlet的使用。我将向大家介绍三种不同的构造方法,并对他们的优缺点进行比较。
第一种方法实际上只使用了Applet而没有使用Servlet,尽管Applet受到他们的安全模式的限制,不过Applet还是能使用象JDBC、RMI这样的协议来访问象数据库、LDAP目录和Enterprise JavaBeans组件这样的后端信息。
这种方法虽然看上去非常简单,不过这并不是个好的方法,他会带来非常多的问题。首先, 这种安排需求你将所有的访问信息直接嵌入到你的Applet代码中。数据库用户名、口令、服务器标识,所有的这一切都必须包含在你的Applet代码中,这样最终用户就有可能从类文件中搜集到这些信息。
此外,数据库或所有其他你访问的系统都必须在提供Applet的同一台服务器上。这意味着你的服务器将不得不承担双重的负担,他既是个web服务器,也是个数据库服务器。
典型的情况是,你的后端资源可能受到防火墙的保护,不过在这种情况下,这是不可能的,因为运行在客户端上的Applet必须直接访问你的机器。最后,使用这种方法,你想使用web服务器群集,如果不是不可能的,至少也是非常困难的。
好一点的方法是将和后端资源通信的事务封装到Servlet中,而Applet仅仅用来处理前端的工作。在这种构造方法中,正如我们在图2中所示的那样,Servlet克服了Applet固有的安全约束,并用来控制Applet访问企业信息系统和事务逻辑。
当Servlet接受到一个请求时,他会在后端数据库中查询信息、执行计算、处理对代表Applet的信息的获取并作用于来自Applet的信息。这种方法的一大进步是Applet/Servlet对能分布在一个后端web服务器的群集上,所有和某一共享的数据库的通信都存在于后端。
此外,使用Servlet的设计有助于设计的模块化、抽象应用程式的后端处理商业逻辑并提高设计的灵活性。
如果你是围绕Enterprise JavaBeans构建你的应用程式,Servlet就成了中间件。EJB组件能更加有助于将商业逻辑从Servlet中分离出来,并将其更加抽象。
在这种情况下,一个Applet和他的Servlet通信,Servlet再和EJB组件通信。在应用程式构建中引入由EJB组件、Servlet和前端的applet/HTML这样的层次结构,能给我们提供最大限度的弹性和性能。尽管这样做你必须附出复杂化和费用的代价。
通信策略
如果你使用了这样的构造:在前端使用Applet,在后端使用Servlet,那么你将需要执行Applet和Servlet的通信。因为Applet受浏览器的安全模式的限制,我们在对一个Applet存取数据和信息时并没有太多的选择。
正如我们在前面提到的,我们不能读取客户端的文件系统、不能运行客户端的程式,由于Applet不是在服务器上运行的,我们也不能访问服务器上的文件系统。我们只能建立到运行在我们的主机上的服务的网络连接。
另外,不要忘记应用程式是在一个公开的Internet上发布的,防火墙可能会限制通过HTTP到Servlet或其他web-server模块的会话。事实上,因为Applet本身就是在网络上通过HTTP发布的,所以我们必须准确把握通信的策略。
假定在客户端的Applet和服务器端的Servlet之间的网络连接是我们能使用的唯一的通信路径,我们能有几种方法交换信息。正如你知道的,文字流能由服务器通过HTTP发放。
不过你可能不知道Java对象出能用这种方式发放。我们将周详地介绍HTTP文字流和HTTP对象流的使用。另外,我们将简单地介绍通过Socket进行通信的方法。
Applet和Servlet交换信息的最简单地方法就是通过HTTP文字流。Java的URL和URLConnection类型使得从一个URL读取数据变得非常容易,你能不用担心Socket和其他有关网络工作的通常的复杂问题。我们所需要的只是个服务器端的组件,这个组件应该能通过URL发放信息。这就是我们在这儿使用Servlet的原因。
作为一个例子,我们想要监视服务器的JVM所能使用的内存的总数,并在一个Applet中用一个简单的仪表显示他。首先我们需要研发一个Servlet,当通过他的URL访问这个Servlet时能返回我们所需要绘制仪表的信息。这个Servlet的原始码如清单1所示。
清单1
import javax.servlet.*;
import javax.servlet.http.*;
public class ShowMemservlet
extends Httpservlet
{
public void doGet(HttpservletRequest
req, HttpservletResponse res)
throws servletException, IOException
{
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
Runtime rt = Runtime.getRuntime();
out.println(rt.freeMemory());
out.println(rt.totalMemory());
}
}
这个非常简单的Servlet会响应一个GET请求(直接通过浏览器或是象我们在下面将看到的那样通过我们的Applet),并返回两行文字。第一行显示了服务器的JVM的剩余的自由空间,第二行显示了JVM可用的全部空间(译者注:包括已使用的空间)。
要建立我们的Applet中的仪表,我们只需要建立一个到这个Servlet的连接,将他的InputStream封装到一个DataInputStream中,读出这两个参数,将其转换成数字,并更新我们的仪表。
我们能让我们的Applet执行Runnable接口并在其自己的线程中运行。每隔一秒钟,我们能运行一个方法来更新我们的仪表。refresh()方法的代码如清单2所示。
清单2
private void refresh()
throws MalformedURLException,
IOException
{
URL url = new URL(getCodeBase(),
"/servlet/ShowMemServlet");
URLConnection con = url.openConnection();
con.setUseCaches(false);
InputStream in = con.getInputStream();
DataInputStream textStream;
textStream = new DataInputStream(in);
String line1 = textStream.readLine();
String line2 = textStream.readLine();
double freeMem = Double.parseDouble(line1);
double totalMem = Double.parseDouble(line2);
int usedMem = totalMem - freeMem;
int percentUsed =
(int) 100 *(usedMem / totalMem);
meter.setLength(percentUsed);
}
正如你看到的,HTTP文字流的使用相当简单而且直接。Applet建立到Servlet的连接,读取他返回的两行信息并对其进行适当的处理。
使用简单的文字流来交换数据有一个主要的弱点,那就是Applet并不直接理解数据的信息,而是要将其转换成一个有用的格式。在我们的例子中,将字符串转换成数字还不算太复杂,不过当我们试图处理一个更复杂的数据和对象时,转换的工作会非常快变得无法控制。事实上,在下面我们能看到我们一种简单的方法来处理这些复杂的数据。
发表评论
-
流式计算
2022-02-07 14:31 279private void postHandle(List& ... -
消息队列使用的四种场景介绍
2018-08-09 16:34 2472以下介绍消息队列在实际应用中常用的使用场 ... -
设计模式
2018-04-11 16:49 9801.桥梁模式,将抽象部分与实现部分隔离开,抽象部分持有实现 ... -
Spring boot web可以访问Service和Mapper层
2018-03-26 16:42 2861Spring boot的web层可以访问Service层,然 ... -
FreeMarker的基础语法使用 && 心得和技巧
2018-01-10 10:03 2053FreeMarker是一个模板引 ... -
webService----wss4j+cxf实现WS-Security(基于UsernameToken)
2017-10-23 18:58 1554分享一下wss4j+cxf基于UsernameToken的安 ... -
Spring MVC之LocaleResolver(解析用户区域)
2017-09-23 15:55 2517为了让web应用程序支持国际化,必须识别每个用户的首选区域, ... -
(转)java泛型
2016-11-12 20:29 1646http://www.cnblogs.com/lwbqqyu ... -
java中如何忽略字符串中的转义字符--转载
2016-06-28 16:42 9899原文地址:http://my ... -
(转)关于JAP FetchType.LAZY(hibernate实现)的理解 .
2016-04-27 15:22 5104JPA定义实体之间的关系有如下几种: @OneToOne ... -
(转)hibernate annotation注解方式来处理映射关系
2016-04-26 16:52 1836http://www.cnblogs.com/xiao ... -
代码片段,导出的文件头
2015-11-18 20:34 1600public static void setDownload ... -
(转)为什么要两次调用encodeURI来解决乱码问题
2015-08-03 20:19 2481地址:http://blog.csdn.net/howla ... -
杀死进程
2015-07-21 14:54 1285sudo lsof -i :9000 COMMAND P ... -
批处理batch,执行多个SQL语句
2015-07-15 19:21 10609批处理batch,执行多个SQL语句。 ... -
中文乱码解决的4种方式
2015-07-03 14:20 2627目前收集到4中方法,中文传参一documentPath为例: ... -
GET请求的中文乱码问题及处理意义
2015-07-03 13:47 6631首先看一段乱码的程序 ... -
java.ByteArrayInputStream与ByteArrayOutputStream再次理解
2015-03-16 17:59 3235第一次看到ByteArrayOutputStream的时 ... -
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
2014-07-28 17:42 2272概述 继 Spring 2.0 对 Spring MVC ... -
java中序列化的serialVersionUID解释
2014-07-25 09:26 1885serialVersionUID: 字面意思上是序列化的版本号 ...
相关推荐
在J2EE企业级应用开发中,Applet和Servlet经常一起用于构建多层架构的Web应用程序。Applet利用Java的动态特性,提供丰富的用户界面,而Servlet则在服务器端处理业务逻辑和数据交互。根据Sun公司推荐的模型,前端使用...
Sun 的应用编程模型推荐在前端使用 Applet、HTML 和 JavaServer Pages(JSP),在后端使用 Java Servlet 配合 Enterprise JavaBeans (EJB) 或其他组件来开发企业级 Java 应用。这种架构的关键在于客户端 Applet 和...
Java EE企业级应用架构是用于构建大规模、复杂的企业级软件系统的框架,它提供了一整套标准和规范,旨在简化开发过程,提高可伸缩性和可维护性。Java EE(原名J2EE)自1990年代以来不断演进,从最初的1.2版本到现在...
1. 2 企业级n-层应用 1. 3 典型Web应用程序的处理过程 1. 3. 1 Web浏览器发送请求 1. 3. 2 执行服务器端程序 1. 3. 3 将结果运回给浏览器 1. 4 服务器端技术 1. 4. 1 各种服务器端技术的比较 1. 4. 2 基于...
它们在企业级应用开发中占据重要地位,因为它们能够提供高效、可扩展且易于维护的解决方案。** **JSP(JavaServer Pages)** 是一个Java技术,允许Web开发者创建动态网页。它结合了HTML代码和Java代码,使得开发者...
Servlet和JSP技术是Web开发中的核心技术,常用于构建动态、交互式的Web应用程序。这篇文档由Gildas Avoine和Philippe Oechslin在EPFL(瑞士洛桑联邦理工学院)撰写,旨在概述这两种技术的基本概念和作用。 1.1 ...
在JavaEE平台上,开发者可以构建可扩展、分布式的企业级应用程序,而Applet是Java的一个早期特性,它允许在Web浏览器中运行Java代码,为用户提供丰富的客户端交互体验。 【描述】中提到,这个系统是基于"Java+...
研究者陈少波提供了有关移动代理在分布式数据挖掘应用中的详细分析和解决方案,并结合具体的应用模型和算法,为实际企业级数据挖掘应用提供了专业指导。陈少波所在的广东石油化工学院位于茂名,他在此领域有着深入的...
通过掌握这些核心知识点,开发者可以更加高效地利用Java Servlet API构建复杂的企业级Web应用。此外,了解相关的Internet规范也有助于开发者更好地遵循标准,确保所开发的应用能够兼容各种网络环境和技术栈。
学习和掌握Servlet技术,对于理解Web服务器的工作原理以及进行企业级应用开发至关重要。通过深入理解Servlet的生命周期、HTTP协议以及Servlet的编程模型,开发者可以创建出高效、灵活且安全的Web服务。
J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,由Oracle公司提供,用于构建和部署分布式企业级应用程序。这个技术框架为开发人员提供了构建可扩展、高可用性、多层的服务器端应用的能力。J2EE的...
J2EE的历史可以追溯到Java Applet时代,随着Web技术的发展,Java Servlet和JSP(Java Server Pages)相继推出,进一步推动了企业级应用的开发。Servlet处理服务器端逻辑,而JSP则简化了表现层的开发。EJB...
“毕设JAVA”表明这个项目专注于Java语言,Java以其跨平台性、安全性以及丰富的类库而广泛应用于企业级应用开发。在这个聊天系统中,Java可能被用来编写服务器端逻辑,处理用户的请求,管理会话状态,并与数据库进行...
3. **跨平台**:由于基于Java,Servlet可以在不同操作系统和应用服务器上运行。 4. **功能强大**:Servlet能直接与Web服务器交互,可以实现CGI难以完成的任务,如共享数据、数据库连接池等。 **6.1.4 Servlet的生命...
中间件,作为一种位于操作系统和应用程序之间的软件,提供了一种隔离机制,使得开发者无需关心底层操作系统细节,专注于应用功能的实现。 随着Java技术的发展,J2EE经历了多次命名变更,从J2EE到Java EE,强调了...
它以其“一次编写,到处运行”的特性而闻名,适用于开发跨平台的桌面应用、网页应用、移动应用以及企业级系统。在本项目中,"聊天系统"是用Java语言构建的,它允许用户通过网络进行实时通信。 【Applet与Java聊天...
在J2EE企业级项目开发中,了解和掌握J2EE容器是非常关键的。J2EE容器是一种特殊的软件环境,它能够管理和控制J2EE应用程序中的组件,确保它们的正确运行和生命周期管理。容器提供了标准接口,让开发者无需关心底层的...
首先,我们要明白J2EE是一个为企业级应用提供服务的框架,包括Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)等组件。在这个聊天程序中,Java Applet将作为客户端的部分运行在用户的浏览器上,而...
首先,J2EE基础部分介绍了J2EE平台的起源、目标及其在企业级应用开发中的作用。J2EE旨在简化企业级应用的开发,提供一套丰富的API和服务,以便开发人员能够构建出可扩展性、可维护性更高的分布式应用系统。分布式...