我有一个关于 JSP 开发的问题。我的 servlet 达到了我的简单 Java 类无法帮助我处理我的网站的地步,并且 Javascript 接管了。问题是数据非常大,使用 Javascript 非常慢。使用 Javabeans 会加快速度吗?多少?javascript 如何获取值并将值传递给 Javabeans?Javabeans 是像 javascript 一样动态,还是像 JSP 一样在页面刷新时执行?还是我总体上错了(我想我错了)这么多问题请回答。
1 回答
您正在做一件好事并通过愿意编写复杂的服务器端部分和客户端javascript代码来实现重大进展,但正如我从您的问题中看到的那样(对不起,如果我错了)您错过了重点服务器和客户端交互。
首先,让我们看一下规范现代 Web 应用程序如何工作的总体 HTTP 协议。根据 HTTP 架构,客户端(表示为本地计算机上的浏览器应用程序)和服务器(表示为运行 java 类的 servlet 容器 - 即 tomcat/jboss/etc - 远程计算机)之间的所有交互都是通过简单的请求完成的(来自浏览器的问题)-响应(来自服务器的回答)循环。客户端通过 URL 请求一些信息,服务器将此信息提供给客户端,在客户端处理(读取)检索信息(不仅可以有图像、视频、音频、文本,还可以有 javascript 形式的程序代码)并要求更多下一个问题(http-request)中来自服务器的特定信息。在给出答案(处理请求)时,您可以在客户端(在浏览器中 - 保存各种网站的特定信息的 cookie)或在服务器端(在服务器会话、数据库、服务器文件中)存储请求-响应周期之间的中间信息适用于各种网站用户)。希望这部分到目前为止是可以理解的。
Java 完全在服务器端执行,因此任何类型的 JavaBeans,无论是简单的 JavaBeans(或 POJO - 普通的旧 Java 对象)还是 EJB(企业 Java bean - 企业 Java 平台上可用的非常复杂的解决方案)都完全在服务器上工作和生活side 并存在于会话或应用程序范围内。换句话说,用户可以通过 HTTP GET/POST/PUT/DELETE 方法将一些参数传递给您的 servlet/jsp,它们正在读取这些参数并根据用户传递和解析的数据修改 bean 信息。
JavaScript 轮流完全在客户端级别执行。JS 可以将信息保存在浏览器 cookie(或本地存储 - 在 html5 中引入)中,它们基本上是存储在客户端浏览器中的键值数据对,用于通过其 URL 区分的特定站点。
JavaScript 仅用于在快速请求-响应交互期间保存信息,换句话说,您可以将 JS 存储视为在用户关闭其浏览器窗口后完全丢失(结束他与站点的工作)。虽然服务器端信息的存储时间要长得多(大约永远),并且与站点的工作会话有关。
因此,从这个角度来看,您始终可以创建一个完全依赖服务器端逻辑和 Java bean 的瘦客户端(几乎没有 JavaScript)。但是,在瘦客户端的情况下,任何对 Web 应用程序的小操作都需要相当长的时间,因为它需要服务器往返。换句话说,您的应用程序会很慢。因此,为了加快您的网络应用程序的速度,您可以将一些操作从服务器端 java 转移到客户端 javascript,这样它们就可以用更少的服务器请求来执行。举个例子,假设您正在编写一个计算器网络应用程序:您可以创建一个 html 表单并为每个操作 (+-*/) 发送一个请求到服务器(到 java 部分),或者您可以创建一个本机JS-app 并且每个操作都将由 JavaScript 执行而无需服务器端行程(在这种情况下,您的应用程序会更快)。
我建议您阅读有关 HTTP(和 REST - HTTP 协议背后的架构)实际工作原理的更多信息。例如本教程。