寫在前面
之前一直用Myeclipse寫javaweb程序,但畢竟為了適應時代潮流(誤),并且IDEA從很多方面都很人性化,就把之前eclipse的項目放到IDEA里面跑了跑,發現了以前很多在Myeclipse傻瓜式的操作在IDEA中都要配置一下,雖然有點麻煩但確實讓我更好了解了javaweb項目的構造,下面主要羅列一些我遇到并解決的一些IDEA中的問題并給出一些我的理解。歡迎dalao補充或指出錯誤。
IDEA與Myeclipse寫javaweb的差別?
在放問題之前,我先簡單談一下idea與myeclipse區別,之前Myeclipse寫的時候很無腦,就知道個寫完后配個tomcat跑起來就行了,然后就主要關注于程序邏輯和設計了,一到IDEA傻眼了,不僅要配置artifacts還要手動配一下src什么的。所以對于初到IDEA的,建議著重注意一下這個project structure,他是配置過程中重點的東西:
好了廢話不多說,開始談問題。
紅色的j .....?
最簡單的例子,直接把myeclipse項目扔到idea,一看全沒錯,很開心(顯然不可能),運行一下index也跑出來了,可是一看javaweb文件其實全都打不開:
這是因為IDEA中你需要手動配置一下編譯路徑,把你的src源碼設置成Sources文件,然后編譯器才會開始編譯你的javaweb代碼,具體操作如下:
project structure -> Moduels ->點擊項目 ->選擇src文件夾 -> 點擊上方Mark as中的Sources
值得一提的是,這個路徑將會是你web.xml的根路徑,比如下方:
Ok后你會發現報了一大堆的導包錯,接下來就該你忙活了,在project structure 的libraries里導入之前Myeclipse在WEB_INF/lib下的外部包即可。(提示:可以直接導入文件夾,里面的jar包就都導入了)
Cannot resolve servlet.....?
在artifacts里要從Module中導出一個explode,然后把它扔到tomcat運行,具體詳見網上IDEA配置tomcat教程。但有的時候我們會在web.xml發現如下報錯:
Cannot resolve Servlet
Servlet should have a mapping-name
這種情況多時web.xml配置出錯,你需要在project設置里配置一下:
把它改成你的WEB_INF里的xml即可。
特別注意:.idea文件下面也有個web.xml,如果你覺得你配置好了卻還是這種錯,請注意你是不是把這個xml當成你Fact的xml了,請換成WEB_INF的xml。
Output directory is not specified ... ?
開始編譯javaweb文件了,臥槽,輸出路徑沒確定?IDEA不像Myeclipse會把輸出(編譯后的.class文件)扔到WEB_INF的classes文件夾,把可運行的web文件扔到tomcat下的WEBAPP文件夾中;IDEA需要在Project structure的project欄位設置一下輸出路徑:(圖略)
一般把輸出扔到項目目錄下的out文件夾中,可以看出artifacts就是當初myeclipse扔到tomcat/WEBAPP的網頁運行文件,而production里面是myeclipse扔到自己WEB_INF的classes里的文件。
可是有時候我設置完輸出路徑了啊,怎么還是未確定?這很有可能是你在project structure的artifacts有問題,建議你刪除當前的artifact,然后按正確重新導入,正常artifact的圖是這樣的:
總結
整個配置問題都是圍繞project structure展開的,總之有問題先從這里入手就OK了:p.(莫名其妙花了一個小時),謝謝。