由于 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);
}
通过添加以上代码,我的问题得到解决。
我尝试在 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
<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);
}
通过添加以上代码,我的问题得到解决。