1. 程式人生 > >整合 solr7.5.0到tomcat7中,出現兩錯誤403 – Forbidden和java.lang.NoSuchMethodError

整合 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成功截圖