官网:https://www.jetbrains.com/help/idea/restful-webservices.html
1、在IntelliJ中创建新项目,选择Java Enterprise -> RESTful Web Service -> Download
2、创建完项目JerseyDemo后,对项目点击右键 -> Add Frameworks Support,分别勾选Web Application和Maven。其中,web appication为项目增加了web.xml,maven为构建工具。
完成之后项目的文件结构如下:
3、 在maven中加入jersey依赖
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.9</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.9</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.9</version> </dependency> </dependencies>
此时,整个pom.xml文档如下。另外使用maven默认的库下载源文件很慢,可以使用国内镜像,方法可见maven国内镜像(maven下载慢的解决方法)。
4. 创建源文件
在src/java目录下新建包,如com.test.jersey,在包下新建类HelloWorld.java,写上代码:
package com.test.jersey; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("/hello") public class HelloWorld { //GET注解设置接受请求类型为GET @GET //Produces表明发送出去的数据类型为text/plain // 与Produces对应的是@Consumes,表示接受的数据类型为text/plain @Produces("text/plain") public String getMessage() { return "Hello world!"; } }
5. 配置servlet
编辑web/WEB-INF/web.xml,加入代码:
<servlet> <servlet-name>restful_service_test</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.test.jersey</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>restful_service_test</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping>
6、 配置Tomcat
点击Run >Edit Configurations… > “+” > Tomcat Server > Local,加入Tomcat,选择Deployment tab, 点击 “+”, 选择唯一的Artifact,点击"OK"即可。
7、在输出中加入库文件
选择Project Structure,点击Artifacts,可以右侧Available Elements下面有很多库文件没有包含在输出中。依次双击各个文件即可。
8. 运行Tomcat
运行Tomcat,在浏览器中输入http://localhost:8080/api/hello,即可看到以下输出:
9、增加SolrService类,访问solr服务
package com.solr.service; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.Cluster; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.ClusteringResponse; import org.apache.solr.common.SolrDocumentList; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @Author:sks * @Description: * @Date:Created in 9:56 2018/2/26 * @Modified by: **/ public class SolrService { private SolrClient solr; // public SolrService(){ // String urlString = "http://localhost:8983/solr/test"; //// HttpSolrServer hs=new HttpSolrServer("http://localhost:8888/solr"); // // solr = new HttpSolrClient.Builder(urlString).build(); // } /** * @Author:sks * @Description:初始化solr客户端 * @Date: */ public void Init(){ String urlString = "http://localhost:8983/solr/test"; solr = new HttpSolrClient.Builder(urlString).build(); } // public static void main(String[] args) throws SolrServerException,IOException { // //// String urlString = "http://localhost:8983/solr/mycore"; // String urlString = "http://localhost:8983/solr/test"; // String path = "D:/work/Solr/ImportData"; // // Init(urlString); // getAutoClusterInfo(); // System.exit(0); // } /** * @Author:sks * @Description:获取文档总数 * @Date: */ private long getDocTotalCount() { long num = 0; try { SolrQuery params = new SolrQuery(); params.set("q", "*:*"); //params.setQuery("*:*"); QueryResponse rsp = solr.query(params); SolrDocumentList docs = rsp.getResults(); num = docs.getNumFound(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return num; } /** * @Author:sks * @Description:获取聚类数据 * @Date: */ public String getAutoClusterInfo() { //使用这个对象做查询 SolrQuery params = new SolrQuery(); //查询所有数据 params.set("qt", "/clustering"); params.setQuery("*:*"); params.setStart(0); params.setRows((int)getDocTotalCount()); // params.setRows(30); List<Cluster> list = null; try { QueryResponse queryResponse = solr.query(params); ClusteringResponse clr = queryResponse.getClusteringResponse(); list = clr.getClusters(); //拿到聚类数据集合,返回查询结果 } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String txt = ""; List<String> lst = new ArrayList<String>(); for(Cluster c :list){ //类别标签 List<String> lblist = c.getLabels(); for(String lb:lblist){ System.out.println(lb); } //聚类文档ID List<String> doclist = c.getDocs(); for(String doc:doclist){ lst.add(doc); System.out.println(" " + doc); } } return "abc"; } }
在增加getSolrData方法
@GET @Produces("text/plain") @Path("/getSolrData") //api/solrData/getSolrData public String getSolrData() { SolrService ss = new SolrService(); ss.Init(); String s = ss.getAutoClusterInfo(); return s; }
运行tomcat,在浏览器输入:http://localhost:8080/api/hello/getSolrData
原因找了半天是因为web.xml里面
改为 com.solr.service
重新运行tomcat 在浏览器输入:http://localhost:8080/api/hello/getSolrData 还是报错
原因是Artifacts新加入的jar包没有包含在输出中,依次双击各个文件即可加入到输出中。
终于成功了