我正在使用Glassfish 4开发WebApp。我有一个REST后端,使用Jersey在JAVA中开发,以及一个AngularJS前端。所有这些都包含在MAVEN Jersey-Quickstart-Webapp中。
现在,我遇到的问题是,当人们查询我的应用的网址时:
http://localhost:8080/MyApp/
它工作正常,并将适当的index.html发送给用户。但是,如果用户键入的网址应该是'由我的应用程序路由处理,例如:
http://localhost:8080/MyApp/search
它给出了404错误。但是,如果从/ MyApp / route开始,可以从应用程序内部访问此URL,因为与所有angularJS内容一起提供的index.html能够理解和控制路由。
基本上我遇到的问题是我需要为应该返回index.html的所有必要位置设置适当的重定向。
所以,当我点击以下任何一个URL时,它应该向用户发送index.html,并让AngularJs找出路由
例如
http://localhost:8080/MyApp/search ----> index.html
http://localhost:8080/MyApp/results ----> index.html
http://localhost:8080/MyApp/browse ----> index.html
不幸的是,我可能在这里真的很厚,但我不知道如何配置服务器/ webapp来做到这一点。我该怎么做呢?我认为这是相当明显/微不足道的,但我对这些东西都很陌生,所以对我这么说吧!
编辑1:我对使用mod-rewrite或UrlRewriteFilter有一些很好的帮助,但就我所见,这些似乎都不适用于Glassfish4。有没有人可能会知道的那些?
答案 0 :(得分:2)
正如@Tunaki所说,您需要使用apache并使用mod_rewrite
。
另外,您可以使用UrlRewriteFilter这允许您在访问代码之前重写URL。
为此,您需要向您的maven文件添加依赖项:
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.3</version>
</dependency>
并添加 WEB-INF / web.xml 文件:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
此外,您在文档中指定了大量参数: http://cdn.rawgit.com/paultuckey/urlrewritefilter/master/src/doc/manual/4.0/index.html#filterparams
http://localhost:8080/MyApp/search ----> search.html
http://localhost:8080/MyApp/results ----> results.html
http://localhost:8080/MyApp/browse ----> browse.html
答案 1 :(得分:2)
登录glassfish在管理控制台中,展开“配置” 节点。展开server-config节点。如果您愿意,请忽略此步骤 运行开发人员域(没有群集的域) 能力)。展开HTTP服务。展开虚拟服务器。点击 服务器。在“编辑虚拟服务器”页面上,单击“添加属性” 按钮。在“名称”列中,键入redirect_1。
如果您使用的是Application Server 9.0,请键入 从= // myproduct1 值中的url-prefix = / mywarname / mypages / products / myproduct1.jsp 列。
注意 - 您在此提供的价值需要 匹配web.xml中指定的上下文根的值或 application.xml文件。