一、Intellij Idea的关键设置解释
一、目录结构
.idea:
自动生成的不用管
out:
这个目录只是一个名字而已,你想怎么命名都可以,这个目录你只需要知道是存放能够被TOmcat识别的东西就行了,教程里都让人把项目打包成一个war文件,这个过程你可以理解为一种类似压缩的东西,实际上不需要去关心什么是war文件,你只需要知道Tomcat会执行.class文件,而war文件里存的就是这个;
这是我的打包配置,关键英语:Artifacts(打包),Output Directory(输出目录,可以理解为文件存放位置),Web Application Exploded(不压缩,如果你选择Archive,那么这个输出目录会只有一个.war文件,我选择的是直接不压缩,只编译),CompileOutput(编译输出:什么文件需要编译?.java文件,所以这个ManagementSystem320299"compile out put"里面只会有.java对应的class),Web Facet Resources("web方面的源文件,web源文件是我上图中的web目录,为什么是web下面有可以配置详解")
outputlayout下明确显示了WEB-INF/classes下存放的是项目编译文件,而下图也刚好对应,class目录下只有一个com....目录,这个是我建立的包,而下面也只有java对应的.class的代码,你可能会奇怪为什么.xml文件也在里面,因为,java目录被标记为source,resources被标记为了resources,而lib目录下也只有jar文件,lib下存放jar文件这没法解释,不理解也没办法;最后是web方面源文件,哪些是web方面源文件后面会讲,至此输出目录解释完毕
src:
先上两张图
主要是第二张图有一个SourceRoots,意思是源文件跟目录,我是不知道为什么会有这个配置,这个配置指定了web模块关联的源文件的位置,一个是java代码一个是resources目录
target:
这个文件非常的鸡肋,看的我强迫症犯了,如果有大佬麻烦给我解释下为什么要有这个目录,这个目录是项目build的时候自动生成的,而且不能取消,因为Tomcat需要的文件都在out目录里,你build又不会跟新out下的文件,我要这个功能有什么用呢?我实在想不通为什么需要这个目录,千万不要把这个目录指定到out目录下,这样会导致打包无效
WEB:
不讲了
二、打包
一、打包按钮
最顶部的菜单栏有一个Build,下面有一个Build Artifacts,里面有build和rebuild等。。当你点击这个的时候,out目录下就会生成编译文件
三、Tomcat下server.xmlp配置
<Service name="Wis320299">
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Wis320299" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="I:\Projects\ManagementSystem320299" unpackWARs="false" autoDeploy="true">
<Context path="" docBase="\out" debug="0" reloadable="true" ></Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
我不喜欢在一个端口下配置多个web程序,除非必要,我只解释2个关键配置,其他的解释不了,有工作经验的才知道有什么用,讲了也不清楚
一、Host配置
name属性必须和engine的defaulthost一样,别管为什么
appBase:我这么打比方把,我有一个管理系统,突然有一天甲方要求另一个开发公司共用我们的前端,他们在我们的系统里加入他们的web程序,那么我们最理想的配置就是将他们的文件放在我们的I:\Projects\ManagementSystem320299,为什么说最理想呢,因为appbase是一个跟目录,意思是appbase下所有的Context标签的docbase你可以在这个appBase直接找到,但是appbase也可以直接指定web程序的完整路径,最理想就是为了方便管理,可是为什么不能直接再开一个端口呢,因为我们要公用一个程序池,你可以理解为登录用户,你不可能让用户再登录一次吧
unpackWars:指定是否解压war文件,如果你压缩的时候选的是war文件
二、Context配置
context标签可以用来配置多个,就是为了应对我上面讲的这种情况(这是我猜的,我也刚搞java,什么都不懂,我之前是搞.net,也遇到了上面说的情况)
path:浏览器url访问前缀,必须为空
docBase:这个属性才是用来配置一个web应用程序的真正位置,你可以指定绝对路径,也可以根据docbase指定相对路径,我的idea图里明确表示out目录下就是编译文件,所以我直接指定out就可以了
reloadable:当你的class下的文件有更改的时候,tomcat服务就不需要重新启动就能重新加载了
四、各种奇怪的问题
1.不支持的发现版本,请自己百度,每当你的pom。xml有更改的时候必定会出现这个问题,反正我是找不到解决的办法,只能每次都重新指定一下
2.代码找得到maven包,build就不行,请用cmd转到项目的跟目录下执行mvn idea:idea,我不知道什么意思,但是确实有用
3.web.xml文件下的sping什么的配置文件的路径,一定要写成classpath*:格式的,classpath就是java目录和resource目录,如果你直接用classpath:,Tomcat启动时可能会报出找不到文件的错误
4.如果tomcat启动时报出找不到项目用到的maven下的jar包的问题,请将WEB-INF/lib下所有的jar包复制到Tomcat的安装目录的lib下,我不知道为什么他不是从项目的lib下找而是直接在自己的lib下找,但是确实成功了,程序也测试了没问题