由于 MIME 类型 ('') 在部署在 apache karaf 中的 servlet Web 应用程序中不可执行而出现错误

getting error as MIME type ('') is not executable in servlet web application deployed in apache karaf

我尝试在 apache karaf 中的 servlet web 应用程序的 jsp 页面加载 js 文件。

项目结构如图linkproject structure

js 文件包括 angular.min.js,已加载 angular.route.min.js 文件,但未加载 welcome.js 文件,即 angular 控制器文件。 示例代码如下

<script type="text/javascript" src="/resources/js/angular-cookies.min.js"></script>
<script type="text/javascript" src="/resources/js/spin.min.js"></script>

但是下面的js文件没有加载

<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/welcome.js"></script>

error image

得到如上图所示的错误link。

如何解决这个问题?

解决方案 1

创建如下所示的过滤器

 public class CorsFilter implements Filter{
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain filterChain) throws IOException, ServletException {
    
            if(response instanceof HttpServletResponse){
            HttpServletResponse alteredResponse = ((HttpServletResponse)response);
            addCorsHeader(alteredResponse);
        }
    
        filterChain.doFilter(request, response);
        }
    
        private void addCorsHeader(HttpServletResponse response){
            //TODO: externalize the Allow-Origin
            response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
            response.addHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept");
            response.addHeader("Access-Control-Max-Age", "1728000");
        }
    
        @Override
        public void destroy() {}
    
        @Override
        public void init(FilterConfig filterConfig)throws ServletException{}
    }

并在 web.xml

中包含此过滤器
<filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>com.yourpackage.CorsFilter </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

解决方案 2

直接在web.xml

中配置CORS
<filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
            <param-name>cors.allowGenericHttpRequests</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowOrigin</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowSubdomains</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedMethods</param-name>
            <param-value>GET, HEAD, POST, DELETE, PUT, OPTIONS</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedHeaders</param-name>
            <param-value>Content-Type, X-Requested-With</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposedHeaders</param-name>
            <param-value>X-Test-1, X-Test-2</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportsCredentials</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>cors.maxAge</param-name>
            <param-value>-1</param-value>
        </init-param>
    </filter>


    <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

参考:http://software.dzhuvinov.com/cors-filter-configuration.html

希望对您有所帮助。

此问题已通过处理 servlet 中的资源映射得到解决。 我在我的仪表板 servlet 中添加了以下代码片段。

if (request.getServletPath().startsWith("/resources/")){    
        RequestDispatcher rd = getServletContext().getNamedDispatcher("default");
        rd.include(request, response);
  }

通过添加以上代码,我的问题得到解决。