关于这个话题,在网上搜了很多资料,要么看不懂,要么写得不详细,要么跟着做也不能实现。好不容易尝试了一种方法,先记下。
背景:
以前做项目,喜欢把所有文件(html, js, css, class)打包成一个war,然后直接放在tomcat上跑,方便快捷,也没出现过什么问题。最近接触了Apache服务器,发现如果把静态资源放在apache上,访问的速度会比放在tomcat上快,而且也能减少war包的大小,加快部署tomcat的速度。(特别是不用把dojo那堆文件放在war上...)
好了言归正传。下面说一下实现的方法。
第一步:
修改本地host文件(C:\Windows\System32\drivers\etc\host),增加一个FQDN,用来访问静态资源。如:
127.0.0.1 static.topsuapp.com
第二步:
把项目的静态资源复制到Apache的某个目录下(如:${SRVROOT}/htdocs/topsuapp。${SRVROOT}是apache的安装目录)
第三步:
自己写一个conf文件,名字就叫"topsu-app.conf",内容如下。然后在httpd.conf里引用这个文件。 (Include conf/test/topsu-app.conf)
LoadModule headers_module modules/mod_headers.so <VirtualHost *:80> Header set Access-Control-Allow-Origin http://topsuapp.com:9001 ServerName static.topsuapp.com DocumentRoot "${SRVROOT}/htdocs/xwanapp" </VirtualHost>说明:
1)LoadModule, 要先加载apache的headers_module
2)Header 这行很重要,声明哪个url可以跨域访问这些静态资源。(也可以把后面的url改成 “*” ,即 “Header set Access-Control-Allow-Origin *”,表示所有人都能访问这些静态资源,但这样好像很不安全。)
3)ServerName 指出用哪个url来访问这些静态资源。这样用了第一步创建的url "static.topsuapp.com"
4)DocumentRoot 指出放静态资源的位置
第四步:
在项目文件中,比如index.jsp,用下面的方法引用静态资源
<head> <meta charset="UTF-8"> <link href="http://static.topsuapp.com/dojo_lib/gridx/resources/claro/Gridx.css" rel="stylesheet" type="text/css"/> <link href="http://static.topsuapp.com/dojo_lib/dijit/themes/claro/claro.css" rel="stylesheet" type="text/css"/> <link href="http://static.topsuapp.com/css/app.css" rel="stylesheet" type="text/css"/>
最后,把项目部署到tomcat。启动tomcat和apache,访问项目url http://topsuapp.com:9001,发现所有静态资源都可以访问。
补充:
关于Access-Control-Allow-Origin,后面要么匹配一条url (如:http://topsuapp.com:9001),要么匹配所有(如:*)。暂时没发现怎样才能匹配额定几条url。