将.war文件部署到GlassFish Server(当前为4.1)时,GF服务器会自动从WEB-INF/
文件夹中传送文件。 (除非我通过指定Servlet覆盖它们的地址,即。)
实际上,在将.war文件部署到GF服务器时,它会将WEB-INF/
下的文件提取到{gf-home}/glassfish/domains/domain1/applications/{app-name}
。
然后在访问http://{hostname}:8080/{app-name}/{path}
时传递它们。
现在,当访问.json文件时,服务器不会发送HTTP Content-Type: application/json
标头。
这导致页面无法正确加载,FireFox控制台显示XML Parsing Error: not well-formed
异常,即使文件内容完全相同。
所以我猜测它是缺少的Content-Type标签。
如何为应用/项目本身更改此mime-mapping?
从我目前看到的页面中,可以在{gf-home}/glassfish/domains/domain1/default-web.xml
文件中重新定义此行为,定义mime-mapping
。但假设我无法访问该文件,只能上传.war文件。 有没有解决方案?是否可以将default-web.xml
打包到.war文件中?
我现在能想到的另一个解决方案是使用servlet覆盖特定的.json文件地址,并在Java中添加Content-Type
标头。但我不确定是否有一种在运行时访问和读取.json文件的万无一失的方法,但是没有将它们移动到Java源代码中的任何地方,而是将它们留在WEB-INF /文件夹中? 有任何建议吗?
答案 0 :(得分:6)
如何为应用/项目本身更改此mime-mapping?
通过在webapp自己的<mime-mapping>
中声明/WEB-INF/web.xml
个条目。
从Servlet 3.0版开始,web.xml
文件成为可选项。这或许可以解释为什么你找不到任何人。您可以在webapp中提供自己的。 GlassFish 4.1是一个支持Servlet 3.1的容器,所以下面的Servlet 3.1兼容web.xml
应该可以帮到你开始:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- Config here. -->
</web-app>
在您的具体情况下,您需要下面的mime映射:
<mime-mapping>
<extension>json</extension>
<mime-type>application/json</mime-type>
</mime-mapping>