如何在GlassFish中为自动传送的文件设置Content-Type?

Jay*_*667 5 servlets glassfish mime-types

将.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标签.

如何更改app/project本身的mime-mapping?

从我到目前为止看到的页面,可以在{gf-home}/glassfish/domains/domain1/default-web.xml文件中重新定义此行为,定义mime-mapping.但假设我无法访问该文件,只能上传.war文件.有什么解决方案吗?是否有可能将default-web.xml某个地方打包到.war文件中?

我现在能想到的另一个解决方案是用servlet覆盖特定的.json文件的地址,并Content-Type在Java中添加头.但我不确定是否有一种在运行时访问和读取.json文件的万无一失的方法,但是没有将它们移动到Java源代码中的任何地方,而是将它们留在WEB-INF /文件夹中?有什么建议?

Bal*_*usC 7

如何更改app/project本身的mime-mapping?

通过声明<mime-mapping>webapp自己的条目/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>
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,您需要在其中使用以下mime映射:

    <mime-mapping>
        <extension>json</extension>
        <mime-type>application/json</mime-type>
    </mime-mapping>
Run Code Online (Sandbox Code Playgroud)

也可以看看: