在本机开发 Java Web 的时候,总是有一个 project 带在名称后面。比如 http://localhost:8080/myporject ,如果生产环境没有这一串的项目名,还要想办法省掉。
最好的方法是生产环境怎么搞,本地就怎么搞。一般有几种方法
- 修改 Tomcat里面的配置文件 servrer.xml
- 使用 Apache的 rewrite
- 使用 Apache 的 proxy_http/proxy_ajp/jk 等
方法一:修改Tomcat里面的配置文件servrer.xml
这个方法最简单了,如果你的生产环境就是一个Tomcat,又看不到项目名字,那应该就是修改了path。
在本地如果你用的是Eclipse来管理Tomcat的话,去Server文件夹找到对应的tomcatconf/server.xml文件,编辑就行了。
<!--修改前-->
<Context docBase="Myproject" path="/Myproject" reloadable="true" source="org.eclipse.jst.j2ee.server:Myproject"/>
<!--修改后(把path去掉)-->
<Context docBase="Myproject" path="/" reloadable="true" source="org.eclipse.jst.j2ee.server:Myproject"/>
这种方法的缺点也很明显:如果你的服务器上只部署了一个WEB应用。那还好办,如果部署了几个项目,就有点不好办了,只能把一个项目配置为根路径。
方法二:使用Apache的rewrite
这种方法被PHP开发者玩的非常熟练了,如果你的服务器是通过Apache做入口代理,tomcat做业务逻辑的话,php开发者会建议你使用这种方法,原因就是因为非常简单。
打开httpd.conf
- 开发mod_rewrite
- 添加一行配置
RewriteRule ^/(Myproject/){0,1}(.*) /Myproject/$2 [PT,L]
优点是轻度配置,缺点是并没有完全省掉项目名,比如你输入 localhost/xxx.html 实际上和 localhost/Myproject/xxx.html 是一样的,两个链接都是正常的。
方法三:使用Apache的proxy_http/proxy_ajp/jk
如果你使用了apahce+tomcat的模式,那肯定用了其中一个模块,就拿proxy_ajp来说,你需要在httpd.conf里面这样配置
ProxyPass / ajp://127.0.0.1:8009/Myproject
ProxyPassReverse / ajp://127.0.0.1:8009/Myproject
其它说明:
其实还可以有其它方法,就不说了,值得注意的是,后两种方法一般都是配合 VirtualHost(建议使用extra/httpd-vhost.conf配置)使用,另外,如果使用了 SSL,那在你的 extra/httpd-ssl.conf里面要把配置复制一份。否则HTTPS是无效的。如
<VirtualHost www.test.com:80>
ProxyPass / ajp://127.0.0.1:8003/Myproject
</VirtualHost>