jersey服务调用python脚本并动态传参

目的:贯彻落实前后端分离的思想,即meiko那边做前端,我这里提供服务。

功能:meiko发出一个url请求,放入参数,获取需要的数据。

流程:

这里写图片描述

步骤:

1、创建maven web项目
见:
http://blog.csdn.net/lk7688535/article/details/77258459
http://blog.csdn.net/lk7688535/article/details/77480148

2、pom.xml引入jar包

  <dependencies>
    <dependency>  
            <groupId>org.glassfish.jersey.containers</groupId>  
            <artifactId>jersey-container-servlet</artifactId>  
            <version>2.17</version>  
        </dependency>  
        <dependency>  
            <groupId>org.glassfish.jersey.core</groupId>  
            <artifactId>jersey-client</artifactId>  
            <version>2.17</version>  
        </dependency>  
        <dependency>  
            <groupId>org.glassfish.jersey.media</groupId>  
            <artifactId>jersey-media-json-jackson</artifactId>  
            <version>2.17</version>  
        </dependency>  
  </dependencies>

3、jersey服务类:

package com.lee.wor2vec;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
@Path("/hello")
    public class GetRelateWords {
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String sayHello() {
            return "Hello World!" ;
        }

        @GET
        @Path("/{param}")  
        @Produces("text/plain;charset=UTF-8")
        public String getWords(@PathParam("param") String words) {
         BufferedReader br = null; 
        StringBuilder sb = new StringBuilder();
         try {  
                Process p = Runtime.getRuntime().exec("python e:/pythonscript/xun.py "+words);  
                br = new BufferedReader(new InputStreamReader(p.getInputStream(),"GBK"));  
                String line = null;  

                BufferedReader read = new BufferedReader(br);
                while ((line = read.readLine()) != null) { 

                    sb.append(line + "\n");  
                }  
                System.out.println(sb.toString());
                System.out.println("end");
            } catch (Exception e) {  
                e.printStackTrace();  
            }
        return sb.toString();   
        }
    }

4、servlet注册

   <servlet>    
    <servlet-name>Way REST Service</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.lee.wor2vec</param-value>  
       </init-param>  
   <load-on-startup>1</load-on-startup>  
 </servlet>  

 <servlet-mapping>  
   <servlet-name>Way REST Service</servlet-name>  
   <url-pattern>/*</url-pattern>  
 </servlet-mapping>  

5、python脚本

#encoding=utf-8
from gensim.models import word2vec
import sys
sentences=word2vec.Text8Corpus(u'e:/pythonscript/分词后的贴吧测试语料.txt')
model=word2vec.Word2Vec(sentences, size=10)
for i in model.most_similar([sys.argv[1]],topn=20):
    print (i[0],i[1])

sys.argv[0]为脚本文件路径,sys.argv[1]为第一个命令行参数,以此类
推。。

6、把maven web项目部署到tomcat,然后try:

http://10.0.8.81:8080/LeeServer/hello/明凯
获取和明凯相关的词,明凯是参数。

搞定

jersey相关请移步:

http://blog.csdn.net/lk7688535/article/details/51840610

猜你喜欢

转载自blog.csdn.net/lk7688535/article/details/77947965