zoukankan      html  css  js  c++  java
  • IDEA java开发 Restful 风格的WebService

      官网: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>
    View Code

      此时,整个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!";
        }
    }
    View Code

      

      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";
        }
    }
    View Code

      在增加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包没有包含在输出中,依次双击各个文件即可加入到输出中。

      

      终于成功了

      

      

  • 相关阅读:
    设计模式-外观模式
    发生死锁怎么办
    设计模式-工厂模式
    设计模式-模板方法
    设计模式-命令模式(Command)
    设计模式-单例模式
    设计模式-装饰器模式
    CQRS之旅——旅程8(后记:经验教训)
    CQRS之旅——旅程7(增加弹性和优化性能)
    CQRS之旅——旅程6(我们系统的版本管理)
  • 原文地址:https://www.cnblogs.com/shaosks/p/8400282.html
Copyright © 2011-2022 走看看