HttpServletRequest:如何确定所请求资产的Content-Type

时间:2010-08-08 09:52:47

标签: java jetty content-type servlets

我正在使用Jetty编写一个快速且脏的静态文件服务器。我需要为每个响应设置Content-Type:

HttpServletResponse.setContentType("content/type");

对于给定的文件请求,如何可靠地确定要设置的内容类型?这是检查文件扩展名的问题,还是有更复杂的方法? (例如,如果没有文件扩展名,或者扩展名没有反映内容类型,该怎么办?)

谢谢理查德

3 个答案:

答案 0 :(得分:1)

您是否只能检查请求标头Content-Type并将响应设置为?

我不知道您打算支持的客户类型,但如果它们是浏览器,我猜您应该没问题。如果您控制客户端,那么他们最好向您发送该标题。

祝你好运!

答案 1 :(得分:0)

您可以使用URLConnection.guessContentTypeFromStream

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);

答案 2 :(得分:0)

由于您在问题中使用了HttpServletResponse对象,我假设您在控制器中可以使用ServletContext。我刚刚使用servletContext中提供的方法解决了同样的问题。

由于您正在编写文件服务器,因此您只需在ServletContext的getMimeType方法中传入该文件的路径,并且如果可以确定它,则应返回mimeType。

String path = "/js/example.js";
String mimeType = getServletContext().getMimeType(path);
resp.setContentType(mimeType);   // HttpServletResponse object
  

注意:在此特定示例中将内容类型设置为“application-x / javascript”。

其他信息:我相信此解决方案还假设您的文件存储在ServletContext可访问的位置。如果没有,那么其他解决方案之一可能是最好的。