【发布时间】:2016-04-13 07:35:08
【问题描述】:
我正在尝试使用 servlet 和 jsp 页面做一个单页面应用程序。 目前我有第一页,这很简单:一个转发到相应 jsp 的 servlet。
导航到第二页时,实现应该如何? 我猜应该是ajax调用,servlet会填充必要的数据,但是jsp如何显示第二页呢?
【问题讨论】:
标签: java jsp servlets single-page-application
我正在尝试使用 servlet 和 jsp 页面做一个单页面应用程序。 目前我有第一页,这很简单:一个转发到相应 jsp 的 servlet。
导航到第二页时,实现应该如何? 我猜应该是ajax调用,servlet会填充必要的数据,但是jsp如何显示第二页呢?
【问题讨论】:
标签: java jsp servlets single-page-application
如果您使用的是 Ajax 请求,那么您需要告诉浏览器重定向到第二个页面。示例:
response.sendRedirect("second_page.jsp");
在您的 servlet 中,您需要区分对第一页的请求和需要重定向到第二页的请求。例如,您可以使用参数或会话值。
if (request.getParameter("page2") != null) {
response.sendRedirect("second_page.jsp");
} else {
.... // include here the normal logic of your Servlet for page 1
}
然后,您可以使用或不使用参数 page2 调用您的 servlet,以转到第 1 页(不带参数)或第 2 页(带参数)。
【讨论】:
JSP 是一种服务器端 ui 技术。 Servlet 侦听特定的 url 并重定向到 JSP 页面。 JSP 被编译为一个类(实际上是另一个 servlet),被调用(将添加数据并运行内联脚本)并将输出(即 HTML)发送到客户端(浏览器)。要访问不同的页面,需要向服务器(servlet)查询另一个 url,从而得到 另一个 html 页面。
要创建 SPA,您需要 客户端 技术,例如 JavaScript。您向服务器查询单个 html 页面。例如,由 HTML 和 JavaScript 组成的页面(甚至可以是单个 JSP 的输出,不要混淆)被发送到客户端(浏览器)并运行 JS。这通常由 AngularJS、EmberJS 或 Backbone 等框架支持。页面设置好后,页面内的链接是anchors (http://example.com/#/mySecondPage),因此单击它们将再次调用框架(Ajax,查询新数据的服务器),但将停留在同一页面上。然后页面的某些内容可能会被新内容替换。
【讨论】:
如果它是真正的 SPA,那么您只需一个 JSP 并使用 Ajax 处理所有功能(在初始页面加载之后)。
您是否考虑过使用诸如 Angular 之类的客户端框架来帮助您解决此问题?
根据您的 SPA 的丰富程度,您可以使用相同的 servlet 或多个 servlet 来服务每个页面。
除非您是为课程或教程这样做并且对如何实现它有一些限制,否则如果您将 Angular 之类的东西与 Spring 之类的服务器端框架结合起来而不是编码,您很可能会为自己节省很多时间小服务程序。作为建议,请查看Spring with Angular。
【讨论】:
在 SPA 中,浏览器只加载文档一次(或几次,每个子应用程序一次),与服务器的进一步通信通常通过 AJAX 或 Websockets 完成。
我建议您将应用程序建模为thin server architecture,即在浏览器中运行的客户端应用程序(HTML、CSS、Javascript)使用服务器提供的 Web 服务 API。
以下几点值得了解;
客户端:
服务器:
客户端和服务器框架都有很多替代方案。
Javascript:AngularJS、EmberJS 或 Backbone,...
JSON-RPC:https://en.wikipedia.org/wiki/JSON-RPC#Implementations
关于 JSON-RPC,您可能想看看 Brutusin-RPC,这是我创建的一个 JEE 微框架 :)
【讨论】: