我是靠谱客的博主 单身咖啡豆,最近开发中收集的这篇文章主要介绍一个简单的java web程序(servlet实现接口),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

帮同学写接口的时候,又重新回顾了一下servlet,发现自己基础实在是差到可以~、在此记录一下。

在servlet写线程是很不好的、但是推荐算法耗费的时间实在是多。只能开个线程让它自己跑、有什么好方法提供的请不吝赐教~

线程类:MusicRecThread.java

package com.musicRec.Code;

import com.musicRec.Utils.MusicRec;

import java.util.Map;

/**
 * Created by Administrator on 2017/6/11.
 */
public class MusicRecThread implements Runnable{

    private String userId;

    public MusicRecThread(String userId){
        this.userId = userId;
        System.out.println("start thread...");
    }

    public void run(){

        if(MusicRec.downLoadFiles(userId)){
            //执行推荐算法
            Map<String,Object> result = MusicRec.excuteMusicRec(userId);
            if(result.get("success").equals(false)){
                result.put("msg","推荐算法执行出错");
            }
        };

    }
}
servlet:

package com.musicRec.Servlet;

import com.alibaba.fastjson.JSON;
import com.musicRec.Code.MusicRecThread;

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;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2017/6/10.
 */
//@WebServlet("/getRecResult")
public class ExecuteRec extends HttpServlet {

    @Override
    public void init() throws ServletException {
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Map<String,Object> result = new HashMap<>();

        // 获取用户的name
        String userId = request.getParameter("userId");
        String jsonString = "";
// 设置输出
        response.setContentType("text/html;charset=GBK");
        PrintWriter printWriter = response.getWriter();
        // 对name进行转码
        if (userId != null) {
            userId = new String(userId.getBytes("ISO-8859-1"), "GBK");
            System.out.println("userId=" + userId);
            Thread t = new Thread(new MusicRecThread(userId));
            t.start();
            System.out.println("thread starting...");
            result.put("success",true);
        } else {
            result.put("success",false);
            result.put("msg","没有传入userId");
        }
        jsonString = JSON.toJSONString(result);
        printWriter.println(jsonString);
        printWriter.close();
    }

    @Override
    public void destroy() {
        super.destroy();
    }

}
推荐类:主要是连接服务器执行linux指令的一些操作。

package com.musicRec.Utils;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.musicRec.Entity.RecordInfo;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * Created by Administrator on 2017/6/10.
 */
public class MusicRec {

    private static String url = "";
    private static String charset = "utf-8";
    private static HttpClientUtil httpClientUtil = new HttpClientUtil();;
    //ftp服务器
    private static String FTPHOSTNAME = "";
    private static String FTPNAME = "";
    private static String FTPPASSWORD = "";
    private static String REMOTEPATH = "";
    private static String LOCALPATH = "/home/ubuntu/Desktop/music_rec/user_sim/audio";
    //算法服务器
    private static String HOSTNAME = "";
    private static String NAME = "";
    private static String PASSWORD = "";
    //TODO:生成推荐信息文件
    private static String TARGETFILEPATH = "/home/ubuntu/Desktop/music_rec/user_sim/result/xyy_result_m10d2.json";

    /**
     * 根据post回来的信息下载文件到算法服务器上
     * @param userId
     * @return
     */
    public static boolean downLoadFiles(String userId){

        String httpOrgCreateTest = url + "hmzmysql/cors/getRecordInfo";
        Map<String,String> createMap = new HashMap<>();
        createMap.put("userId",userId);
        String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);
        System.out.println("result:" + httpOrgCreateTestRtn);

        JSONObject jsonObj = JSON.parseObject(httpOrgCreateTestRtn);

        JSONArray recordInfoArray = jsonObj.getJSONArray("recordInfo");

        List<RecordInfo> recordInfo = JSON.parseArray(recordInfoArray.toJSONString(), RecordInfo.class);

        for (RecordInfo r:recordInfo){
            System.out.println(r.getIsFlag());
            System.out.println(r.getUrl());
//            System.out.println();
//            System.out.println();
        }

//        Boolean flag = FtpClientUtils.downFile(FTPHOSTNAME,21,FTPNAME,FTPPASSWORD,REMOTEPATH,fileName,LOCALPATH);
//        return flag;
        return true;
    }


    /**
     * 执行推荐算法
     * @param userId
     * @return
     */
    public static Map<String,Object> excuteMusicRec(String userId){
        Map<String,Object> map = new HashMap<>();
        try {
        Connection conn = new Connection(HOSTNAME);
        conn.connect();//连接
        Boolean flg = conn.authenticateWithPassword(NAME, PASSWORD);//认证
        if (flg) {
            System.out.println("=====第一个步骤=====");
            Session session = conn.openSession();//打开一个会话
            //TODO:多条命令
            session.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim;echo "123" | sudo  -S ./caculate_tim_sim.sh similar");//执行命令
            String result = RemoteExecuteCommand.processStdout(session.getStdout(), charset);
            //如果为得到标准输出为空,说明脚本执行出错了
            if ("".equals(result)) {
                System.out.println("脚本出错");
                result = RemoteExecuteCommand.processStdout(session.getStderr(), charset);
            }
            System.out.println(result);
            session.close();

//            System.out.println("=====第二个步骤=====");
//            Session session2 = conn.openSession();//打开一个会话
//            //TODO:多条命令
//            session2.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim/result;cat xyy_result_m10d.json");//执行命令
//            String result2 = RemoteExecuteCommand.processStdout(session2.getStdout(), charset);
//            //如果为得到标准输出为空,说明脚本执行出错了
//            if ("".equals(result2)) {
//                System.out.println("脚本出错");
//                result2 = RemoteExecuteCommand.processStdout(session2.getStderr(), charset);
//            }
//            System.out.println(result2);
//            map.put("jsonData",result2);
//            session2.close();

            System.out.println("=====第三个步骤=====");
            Session session3 = conn.openSession();//打开一个会话
            //TODO:多条命令
            session3.execCommand("cd /home/ubuntu/Desktop/music_rec/effective_range_of_singing_voice;python batch.py");//执行命令
//                session2.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim/result;ls");//执行命令
            String result3 = RemoteExecuteCommand.processStdout(session3.getStdout(), charset);
            //如果为得到标准输出为空,说明脚本执行出错了
            if ("".equals(result3)) {
                System.out.println("脚本出错");
                result3 = RemoteExecuteCommand.processStdout(session3.getStderr(), charset);
            }
            System.out.println(result3);
            session3.close();

            System.out.println("=====第四个步骤(生成推荐结果)=====");
            Session session4 = conn.openSession();//打开一个会话
            //TODO:多条命令
            session4.execCommand("cd /home/ubuntu/Desktop/music_rec/recommendation;python recomendation.py");//执行命令
            String result4 = RemoteExecuteCommand.processStdout(session4.getStdout() , charset);
            //如果为得到标准输出为空,说明脚本执行出错了
            if ("".equals(result4)) {
                System.out.println("脚本出错");
                result4 = RemoteExecuteCommand.processStdout(session4.getStderr(), charset);
            }
            System.out.println(result4);
//            map.put("recResult", result4);
            session4.close();

            conn.close();
            map.put("success",true);
        }else {
            System.err.println("连接失败!");
            map.put("success",false);
        }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return map;
    }


    /**
     * 得到推荐结果
     * @param userId
     * @return
     */
    public static Map<String,Object> getMusicRecResult(String userId){
        Map<String,Object> resultMap = new HashMap<>();
        try {
            Connection conn = new Connection(HOSTNAME);
            conn.connect();//连接
            Boolean flg = conn.authenticateWithPassword(NAME, PASSWORD);//认证
            if (flg) {

                System.out.println("=====1.得到Json=====");
                Session session = conn.openSession();//打开一个会话
                //TODO:多条命令
                session.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim/result;cat xyy_result_m10d.json");//执行命令
                String result = RemoteExecuteCommand.processStdout(session.getStdout(), charset);
                //如果为得到标准输出为空,说明脚本执行出错了
                if ("".equals(result)) {
                    System.out.println("脚本出错");
                    result = RemoteExecuteCommand.processStdout(session.getStderr(), charset);
                }
                System.out.println(result);
                resultMap.put("jsonData",result.replace("n",""));
                session.close();

                System.out.println("=====2.得到推荐结果=====");
                Session session2 = conn.openSession();//打开一个会话
                //TODO:多条命令
                session2.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim/result;cat sorted_result.txt");//执行命令
                String result2 = RemoteExecuteCommand.processStdout(session2.getStdout(), charset);
                //如果为得到标准输出为空,说明脚本执行出错了
                if ("".equals(result2)) {
                    System.out.println("脚本出错");
                    result2 = RemoteExecuteCommand.processStdout(session2.getStderr(), charset);
                }
                System.out.println(result2);
                resultMap.put("recResult", result2.replace("t","_").replace("n",","));
                session2.close();

                conn.close();
                resultMap.put("success",true);
            }else {
                System.err.println("连接失败!");
                resultMap.put("success",false);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        return resultMap;
    }




    public static void main(String[] args) {

    }


}




最后

以上就是单身咖啡豆为你收集整理的一个简单的java web程序(servlet实现接口)的全部内容,希望文章能够帮你解决一个简单的java web程序(servlet实现接口)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部