IntelliJ IDEA导出war包:
1)单击最左下角的选项按钮;
2)在右侧弹出的maven projects选项展开Lifecycle/package,双击或点击上面的执行按钮,即可;
3)默认会把打好的war包放在在target目录下。
【注意】
默认情况下在IDEA maven项目中src源代码下的xml等资源文件,并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。(如把mapper.xml及Analyzer词典等文件放在src/main/java目录下的情况)
在IDEA有两种方式解决:
1)建立src/main/resources文件夹,将xml等资源文件放置到这个目录中。maven工具默认在编译的时候,会将resources文件夹中的资源文件一块打包进classes目录中。
2)配置maven的pom文件配置,在pom文件中找到<build>节点,添加下列代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
在Tomcat中部署war:
1、将war文件拷贝到tomcat目录webapps下(不要再建目录)。
2、将必要的jar文件拷贝到tomcat目录libxia下。 maven打包时已经将需要的jar打到class目录下,不再需要单独导包。
3、修改tomcat目录conf下的server.xml。
在<Host></Host>中加入:
<Context path="/manager" docBase="manager" debug=“0" privileged="true"/>
- path=“” 为部署后运行的url路径,可直接设定path为“”,则根目录直接打开;
- docBase为你的war的文件名。 第一次运行的时候,tomcat会自动解压war,生成path指定名称的网站。这里docBase中的”manager”就表示war文件名称为“manager.war”;
- reloadable:如果设置为”true”,则表示当你修改jsp文件后,不需要重启服务器就可以实现页面显示的同步.
4、完毕,通过bin/startup.sh启动tomcat 即可。
【注意:在低内存的服务器上,若要更新war包,最好先shutdown tomcat,否则直接替换war会加载大量的class到内存中,以致内存撑爆。】
【在1G的内存的免费版ES2,发现该问题,每次都需要重启实例,多么痛的领悟】
前端静态资源缓存的问题
若在新版本若修改了js,css等静态资源,在发布新版本时,一般通过war包进行替换,但在Chrome等浏览器中还缓存之前的静态资源,如不清除,则还使用之前的资源文件,就会出现资源访问错误。
一般可通过对js,css等静态资源文件变更文件名来解决。
如淘宝:cssjs的引入是通过他们的CDN分布式形式,而且后面带有?t=20150105。作用:标注版本号;用随机数防止缓存。
对于上传的图片等静态资源的保存
1)千万不要将保存路径放置于运行环境下,应使用一个单独的绝对路径。(在发新的war包会将原运行环境的下目录都替换掉,若图片保存在运行环境下则会被清掉)
2)使用虚拟目录映射来解决请求的url与静态资源的映射。即将图片文件存放于一个单独的目录内,配置请求的url与该目录的映射关系,使在访问图片资源时自动从该独立的目录下去访问。
【注意:目录的路径是从根目录下的绝对路径,即保证能在任何目录都能直接使用cd命令打开的路径】
【若使用ngnix来控制静态资源的访问,则可以跳过!】
3)在tomcat/conf/server.xml中配置
<Context path="/" docBase="FBlog" debug="0" privileged="true"/>
<Context path="/uploads" docBase="///custom_file/uploads" reloadable=“false"/>
或者在spring-mvc.xml配置文件中使用
<!-- 处理独立的资源目录虚拟路径映射 -->
<mvc:resources mapping="/post/**" location="file:///custom_file/uploads/"/>