如何将Solrj集成到基于Tomcat 9的动态Web项目中?
在Tomcat 9动态Web项目中用Solrj连接Solr 7的实现方案
Hey there! 先给你吃颗定心丸:用Solrj在Tomcat 9的动态Web项目里调用Solr 7完全可行,你之前添加Solrj项目没成功大概率是依赖配置或者项目整合的步骤出了问题,下面我一步步给你讲清楚正确的实现方式:
一、先搞定Solrj的依赖引入
这是最容易踩坑的环节,分两种场景处理:
1. 用Maven管理项目(推荐)
如果你的Web项目是Maven构建的,直接在pom.xml里添加和Solr 7版本匹配的Solrj依赖(比如Solr 7.7.3对应Solrj 7.7.3):
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>7.7.3</version> </dependency>
Maven会自动帮你下载所有关联依赖包,不用手动折腾。
2. 手动引入jar包
如果是普通动态Web项目,需要从Solr安装包的server/solrj-lib目录下,把所有jar包复制到Web项目的WEB-INF/lib文件夹里——Solrj依赖很多基础包,少一个都可能导致项目启动失败或者调用出错。
二、Web项目中Solrj的核心代码实现
我给你写一个简单的工具类+Servlet示例,用来测试Solr连接和查询:
1. Solr操作工具类
import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; public class SolrUtil { // 替换成你自己的Solr核心地址,格式:http://Solr服务器IP:端口/solr/你的核心名 private static final String SOLR_URL = "http://localhost:8983/solr/my_test_core"; public static void queryAllDocs() throws Exception { // 用try-with-resources自动关闭客户端,避免资源泄漏 try (SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build()) { // 构建查询条件 SolrQuery query = new SolrQuery(); query.setQuery("*:*"); // 查询所有文档 query.setStart(0); query.setRows(10); // 只取前10条 // 执行查询 QueryResponse response = solrClient.query(query); SolrDocumentList results = response.getResults(); // 打印结果(实际项目里可以返回给前端或者做其他处理) System.out.println("查询到文档总数:" + results.getNumFound()); for (int i = 0; i < results.size(); i++) { System.out.println("文档" + (i+1) + ":" + results.get(i)); } } } }
2. 测试用Servlet
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/solrTest") public class SolrTestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { SolrUtil.queryAllDocs(); response.getWriter().write("Solr查询成功!可以去控制台看结果~"); } catch (Exception e) { e.printStackTrace(); response.getWriter().write("Solr查询失败:" + e.getMessage()); } } }
三、针对你“添加Solrj项目未成功”的排查方向
- 依赖冲突:Tomcat本身自带一些jar包(比如
commons-logging),如果和Solrj的依赖版本冲突,会出现ClassNotFoundException或者NoSuchMethodError。解决方法:检查WEB-INF/lib里的jar包,删掉和Tomcat/lib重复的包,或者调整Solrj版本。 - Solr服务问题:先确认Solr 7服务正常启动,代码里的
SOLR_URL有没有写错(比如核心名、端口号)。 - 部署遗漏:手动复制jar包后,要确保所有Solrj相关jar都在
WEB-INF/lib下,并且重启Tomcat重新部署项目——有时候Tomcat不会自动检测到新添加的jar包。 - 权限验证:如果你的Solr设置了账号密码,需要在客户端里添加认证信息:
HttpSolrClient.Builder builder = new HttpSolrClient.Builder(SOLR_URL); builder.withBasicAuth("你的用户名", "你的密码"); SolrClient solrClient = builder.build();
四、可行性说明
Solrj是Apache官方为Solr量身打造的Java客户端,专门用于Java程序和Solr服务交互;而Tomcat作为标准的Java Web容器,完全支持运行包含Solrj代码的Web项目。只要依赖配置正确、代码逻辑没问题,查询、新增、修改、删除Solr文档这些操作都能顺利实现。
内容的提问来源于stack exchange,提问作者manal
相关产品推荐
相关产品推荐

