当前位置: 首页 > 面试题库 >

AngularJS HTML5模式-直接链接如何在不进行服务器特定更改的情况下工作?

羊舌琛
2023-03-14
问题内容

注意:这个问题也可以读为:

如何在Java中支持无哈希的客户端mvc框架的书签。

我正在将使用的有角度的应用程序转换hashtagshtml5mode。我已经成功设置

$locationProvider.html5Mode(true);

并且着陆页(index.html)中的所有链接都可以正常工作。

问题是,如果直接引用部分url,我自然会得到一个404,因为服务器端点定义没有耦合到客户端定义的路由。

因此,如果没有HTML5,我们将获得非SEO友好的hashbang,但是有了HTML5,我们就无法为除登录页面(引导角度的页面)以外的任何内容添加书签。

如果先请求默认登录页面(index.html),即htpp://mydomain.com/,为什么会起作用:

  1. 浏览器从服务器请求index.html
  2. 服务器返回index.html,浏览器加载角度框架
  3. URL更改将发送到客户端路由器,并加载正确的部分。

如果直接从浏览器请求http://mydomain.com/foo,为什么它不起作用:

  1. 浏览器从服务器请求mydomain / foo。
  2. 资源不存在
  3. 服务器返回404

这个故事缺少一些东西,我只是不知道。这是我只能看到的两个答案…

  • 这是设计使然。 这是应该如何工作的吗?用户必须始终登陆客户端MVC框架的引导页面(通常为index.html),然后从那里导航。这是不理想的,因为无法保存状态并且无法添加书签…更不用说爬网了。
  • 服务器解决方案。 这可以通过服务器端技巧来解决吗?例如,对于所有请求,返回index.html并立即使用其他上下文调用router。如果是这样,这与AngularJS完全是客户端并且看起来像黑客一样违背了目标。

问题答案:

该 AngularJS文档事实上确实提到这一点

服务器端使用此模式需要在服务器端重写URL,基本上,您必须重写指向应用程序入口点的所有链接(例如index.html)

在这种情况下,一种基于Java的解决方案是告诉服务器“将所有URL映射到index.html”。这可以在任何HTTP
Server或容器中完成。我希望使用Java /
Servet来实现此目的,因为我希望我的应用程序与HTTP服务器无关(即Apache与NginX,或者仅是Tomcat / JBoss)。

在web.xml中:

  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
      <servlet-name>StaticServlet</servlet-name>
      <jsp-file>/index.jsp</jsp-file>
  </servlet>

  <servlet-mapping>
      <servlet-name>StaticServlet</servlet-name>
      <url-pattern>/app</url-pattern>
  </servlet-mapping>

而且index.jsp看起来像:

<%@ include file="index.html" %>

并将以下内容添加到index.html中的标签中:

<base href="/app" />


 类似资料:
  • 我有一个雇主组合。选择雇主后,表格中会填入特定于雇主的数据: 下面是它绑定到的属性和检查表是否脏的方法。如果表是脏的,则提示用户如果他们改变雇主,改变将丢失: 一切似乎都正常工作: 用户选择更新表的雇主('KMH')。 用户对表进行更改。 用户然后选择不同的雇主('MPC') 提示用户更改将丢失 用户选择“否”并且Can火雇主返回“假” 选择雇主不改变(跳过if{}块) 然而,在GUI中,雇主选项

  • 我指的是HATEOAS/超媒体应用编程接口意义上的“结构链接”。更一般的问题是如何使用既依赖于被封送的实体,又依赖于环境(在本例中,至少是绝对URL)的数据来扩充生成的XML。 我正在使用与Moxy 2.5一起使用的泽西2.9作为JAXB提供程序。 根据该模型: 我想得到这样的XML(以及等效的JSON): 模型没有“href”字段,也不能添加一个。理想情况下,我可以使用UriBuilder直接从

  • 我试图理解在stunnel上用于证书到期时替换的过程。因此,我在Windows上安装了一个stunnel,配置很简单: p1.pem文件的结构如下: 使用java客户端应用程序,我可以成功地打开到端口21234的SSL连接。 p1。pem证书是使用openssl创建的自签名证书。在p1之前。pem证书将过期。我们需要一段时间,服务器将接受两个证书(例如p1.pem和p2.pem)。 我尝试将两个文

  • 问题内容: 去年,我通过此链接为Web服务制作了JAX- WS客户端 该Web 服务使用STS服务获取SAML令牌并使用它访问主要Web服务。我使用apache cxf的wsdl2java为该Web服务生成JAX-WS客户端。一切都很好。 最近,他们已更新其STS服务端点。这个新的STS服务端点。其中具有不同的签名和摘要算法。它在请求正文中有一些额外的元素。 我试图修改当前代码,以使其支持新的ST

  • 我在想怎样才能 1) 如何在没有GUI的情况下直接在Eclipse中运行模型——只需像在Eclipse中运行其他java代码一样运行模型,然后打印出我感兴趣的内容。 2)如何在没有Eclipse的情况下在无头模式下运行它-我计划将我的模型部署在远程服务器中,服务器或我自己的PC可以在一天中的特定时间自动运行模型。 3) 每次更改代码时,我都必须启动一个新的GUI以反映代码的更改。打开GUI至少需要

  • > 如果我想直接从浏览器保存一些东西,它需要我的应用程序的API密钥,我不能把它放在HTML中,因为它不安全。 如果我试图在网页调用我的服务器的地方做任何事情,文件将必须通过我的服务器才能到达谷歌。