【问题标题】:Running a .java file from a .jsp file [duplicate]从.jsp文件运行.java文件[重复]
【发布时间】:2015-12-06 05:34:38
【问题描述】:

我正在尝试在我的 jsp 文件中运行我的 Mahout_Recommender.java 文件。

这是我的 .jsp 文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>Recommendation Results</h1>
    </body>
    </html>

这是我的 Mahout_Recommender.java 文件: 包mahout;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;

    import org.apache.log4j.BasicConfigurator;
    import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
    import      org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
    import       org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
    import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
    import org.apache.mahout.cf.taste.model.DataModel;
    import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
    import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
    import org.apache.mahout.cf.taste.similarity.UserSimilarity;

    /**
    * User-Based Recommender for Movies
    * 
    *
    */
    public class Movie_Recommender {
        //public static String [][] rows = new String[3884][6];
       public static void main (String [] args){
            int userID = 1; //I put this as a placeholder
            BasicConfigurator.configure();
            try{
               File movies = new File("movies.csv");
               String [][] rows = new String[3884][6];
               rows = fileRead(movies); //read in movie titles
               DataModel model = new FileDataModel(new File("ratings.csv")); 
               UserSimilarity similarity = new PearsonCorrelationSimilarity(model); 
               UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); 
               UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
               ArrayList recommendations = null;
               recommendations = (ArrayList) recommender.recommend(userID, 3);                
               Object[] recs = recommendations.toArray();
               String movieTitles = " ";
               int movieID = 0;
               for(int i = 0; i < 3; i++){
                  String s = recs[i].toString();
                  movieID = Integer.parseInt(s.substring(21, s.indexOf(",")));
                  movieTitles += "\n "+rows[movieID][1];
               }
                 System.out.println(recs[1]);
                 System.out.println("Your User-Based Recommendations are: ");
                 System.out.println(movieTitles);
            } catch(Exception e) {
                 System.out.println(e);
           }
}

@SuppressWarnings("resource")
             public static String[][] fileRead (File data) throws          FileNotFoundException{
             Scanner reader = new Scanner(data);
             String s = "";
             String [][] rows = new String[3884][6];
             int i = 0;
             while (i<3500){
                  s = reader.nextLine();

                  rows[i] = s.split(",");

               i++;
           }

          return rows;
         }

        }

如何在 .jsp 文件中调用 .java 文件的主要方法?

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    你可以从另一个点调用main方法。

    你只需要调用 Movie_Recommender.main(null);在你的 servlet 中(null 因为你不使用 args)。

    然后在你的jsp中:

    <% Movie_Recommender.main(null); %>
    

    【讨论】:

      【解决方案2】:

      同样可以直接从.jsp调用,

      Movie_Recommender.main(new String[]{}); 
      OR     
      Movie_Recommender.main(null);
      

      老实说,创建​​ main(...) 完全是个坏主意, 你想达到什么目的?即使你这样做,通过调用 main() 作为任何其他任意方法,或通过调用 Runtime 或其他方式, 您将实现的是在服务器上运行的程序。什么客户 会这样做的。

      JSP/Servlet/Java Web 编程是基于请求/响应的东西。

      如果您想使用该程序进行计算并计划 使用输出作为响应。那为什么不包括那个特定的 一块作为业务组件或其他东西,并以通常的方式调用它。 可能在一个单独的线程中,如果它的过程很长,让用户 与应用程序交互并在完成后通知用户。

      【讨论】:

        【解决方案3】:

        我不确定您为什么真的想直接在 JSP 中执行该类的 main 方法。但我认为你可以通过 System 类来实现它,如下所示:

        int result = System.exec("/path/to/ClassName.java");
        

        只是一个示例,如何执行该类并为结果变量使用正确的数据类型。

        如果您还需要将参数传递给类,您可以使用下面的帖子,它提供了一个很好的答案HERE! 希望它会有所帮助!

        【讨论】:

          猜你喜欢
          • 2021-03-29
          • 1970-01-01
          • 1970-01-01
          • 2016-01-23
          • 2016-05-02
          • 2014-09-13
          • 2014-06-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多