FrontPage

2010/01/20からのアクセス回数 5424

mavenプロジェクトの作成

mavenを使って、サーブレット用のプロジェクトを作成します。

$ mvn archetype:create -DgroupId=sample.recommendWeb -DartifactId=recommendWeb \
    -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1

生成されたディレクトリ構成は、以下のようになっています。

+ recommendWeb/
|- pom.xml
|-+ src/
  |-+ main/
    |-+ resources/
    |-+ webapp/
      |-+ WEB-INF/
        |- web.xml
        |- index.jsp

レコメンドアプリケーションと同様にpom.xmlに追加します。

dependeciesに追加

    <dependency>
      <groupId>org.apache.mahout</groupId>
      <artifactId>mahout-core</artifactId>
      <version>0.2</version>
    </dependency>	
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jcl</artifactId>
      <version>1.5.8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
	  <scope>provided</scope>
    </dependency>

buildに追加

    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>    
	  <plugin>
	    <groupId>org.mortbay.jetty</groupId>
	    <artifactId>maven-jetty-plugin</artifactId>
	    <version>6.1.7</version>
	  </plugin>
    </plugins>

javaプログラムのディレクトリを作成します。

$ mkdir src/main/java

以下のコマンドでEclipseのプロジェクトにします。

mvn eclipse:eclipse -DdownloadSources=true

javaファイルの追加

recommendWebプロジェクトをEclipseにインポートします。

サーブレット本体は、次のようになります。 内容はほとんどtaste-webと同じです。ただ自分で作成する必要がある場合に備えて、 作成手順を確認するために作成しました。

public class RecommenderServlet extends HttpServlet {
	  private static final int NUM_TOP_PREFERENCES = 3;
	  private static final int DEFAULT_HOW_MANY = 3;

	  private Recommender recommender;
	 // 初期化(推薦オブジェクトの生成)
	  public void init(ServletConfig config) throws ServletException {
		    super.init(config);
		    try {
		    	String csvPath= getServletContext().getRealPath("WEB-INF");
		    	csvPath += File.separator + "critics.csv";
				// モデル構築用のデータをファイルから読み込む
				DataModel model = new FileDataModel(new File(csvPath));
				// ユーザ類似性と類似ユーザ抽出のメソッドを決定
				UserSimilarity similarity = new EuclideanDistanceSimilarity(model);
				UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,
						similarity, model);
				// ユーザベースの推薦を作成
				recommender = new GenericUserBasedRecommender(model,
						neighborhood, similarity);		    	
		    }
		    catch (Exception e) {
		    	throw new ServletException(e);
		    }
	  }
	// GET要求の処理(指定されたユーザの推薦を取り出し、返す)
	  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException {
		String userIDString = req.getParameter("userID");
		if (userIDString == null) {
			throw new ServletException("userID was not specified");
		}
		long userID = Long.parseLong(userIDString);
		String howManyString = req.getParameter("howMany");
		int howMany = howManyString == null ? DEFAULT_HOW_MANY : Integer.parseInt(howManyString);
		try {
			List<RecommendedItem> items = recommender.recommend(userID, howMany);
			writePlainText(resp, userID, items);
		} catch (Exception te) {
			throw new ServletException(te);
		}
	}
	// 指定されたユーザのスコアーとアイテムIDを出力する
	private void writePlainText(HttpServletResponse response, long userID,
			Iterable<RecommendedItem> items) throws IOException, Exception {
		response.setContentType("text/plain");
		response.setCharacterEncoding("UTF-8");
		response.setHeader("Cache-Control", "no-cache");
		PrintWriter writer = response.getWriter();
		for (RecommendedItem recommendedItem : items) {
			writer.print(recommendedItem.getValue());
			writer.print('\t');
			writer.println(recommendedItem.getItemID());
		}
	}
}

web.xmlの設定

最後にweb.xmlを設定すれば完成です。

web.xmlは、mavenのひな形に以下の項目を追加します。

  <servlet>
    <servlet-name>web-recommender</servlet-name>
    <display-name>Web Recommender</display-name>
    <description>Web recommender servlet</description>
    <servlet-class>sample.recommendWeb.RecommenderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>web-recommender</servlet-name>
    <url-pattern>/RecommenderServlet</url-pattern>
  </servlet-mapping>

動作確認

サーブレットの動作を確認するために、jettyを使用します。

以下のコマンドをjettyを起動します。終了はCtrl-Cです。

$ mvn jetty:run

ブラウザーから以下のURLを参照します。

http://localhost:8080/recommendWeb/RecommenderServlet?userID=7

run.png

ファイル

今回、変更・追加したファイルを以下に示します。

cretics.csvは、レコメンドアプリケーションで使ったものをweb.xmlと同じディレクトリに入れてください。

コメント

選択肢 投票
おもしろかった 8  
そうでもない 0  
わかりずらい 1  

皆様のご意見、ご希望をお待ちしております。


(Input image string)


添付ファイル: fileweb.xml 513件 [詳細] fileRecommenderServlet.java 571件 [詳細] filepom.xml 546件 [詳細] filerun.png 517件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-07-12 (日) 18:47:37 (656d)
SmartDoc