整合 solr7.5.0到tomcat7中,出現兩錯誤403 – Forbidden和java.lang.NoSuchMethodError
環境說明
solr-7.5.0
apache-tomcat-7.0.91.zip
jdk1.8.0_171
1.安裝solr
1.1 建立solrHome資料夾,路徑可以隨意,例:E:\Java\lucene_shor\solr\solrhome
1.2 把solr-7.5.0\server\solr下所有的檔案copy到solrhome中,如下
2.把solr應用部署到tomcat
2.1 在Tomcat資料夾的webapps下,建立一個專案目錄solr,如圖
2.2 拷貝solr-7.5.0下面的server\solr-webapp\webapp裡的所有檔案到新建的apache-tomcat-8.5.34\webapps\solr目錄下:
2.3 solr專案新增依賴包
2.3.1 將\solr-7.5.0\server\lib\ext下所有的jar包複製到tomcat的webapps下的solr專案的WEB-INF\lib目錄中
2.3.2 將solr-7.5.0\server\lib下的metrics-相關的jar包,複製到webapps下的solr專案中WEB-INF\lib目錄下
2.3.2 將solr-7.5.0\dist 下的dataimporthandler 包,複製到webapps下的solr專案中WEB-INF\lib目錄下
2.4 配置日誌檔案
將solr-7.5.0\server\resources 下的log4j2.xml ,複製到webapps\solr\WEB-INF\classes下(WEB-INF下 沒有classes則手動建立)
3.配置apache-tomcat-8.5.34\webapps\solr\WEB-INF\web.xml檔案
3.1 在web.xml中, 配置指定solrhome的位置
開啟apache-tomcat-8.5.34\webapps\solr\WEB-INF\web.xml檔案
新增以下節點:
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>E:/Java/lucene_shor/solr/solrhome</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> |
4.測試,啟動tomcat
瀏覽器輸入 http://localhost/solr/index.html
4.1 若出現403 – Forbidden的錯誤,修改solr專案中的web.xml,將security-constraint節點程式碼註釋掉
4.2 若出現錯誤:java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z
則將tomcat7換成tomcat8,或者將solr7換到solr5.4以下
錯誤原因:是由於servlet-api3.1以下版本沒有javax.servlet.ServletInputStream.isFinished()方法,
下圖是apache-tomcat-8.5.34裡servlet-api裡的ServletInputStream的isFinished方法截圖,isFinihsed是servlet3.1後才有的方法
故solr7需使用tomcat8以上版本,否則就會報java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z錯誤
更換成tomcat8成功截圖