ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Struts2でJSONで返したい(RESTっぽくしたい)

2015-09-23 23:23:23 | JavaとWeb
やっと、本題に来ました。
いままでStruts2を書いてきたのは、ほかでもない、表題の件を
やりたかったからです。

つまり、Struts2でRESTもできるんだけど
http://struts.apache.org/docs/rest-plugin.html

そこまでやんなくてよくて、AJAXで呼出し、JSONで受けたいというような場合、
どうするかというお話。




具体的な方法は、

http://kamegu.hateblo.jp/entry/struts2/json-result
などに書かれています。
今回は、そこにあるような、ゼロ・コンフィグレーションによる
書き方を行います。

なお、struts.xmlを書く(ゼロ・コンフィグレーションでない書き方)は、

Struts2でレスポンスをjsonにする方法
http://sugiim.hatenablog.com/entry/2013/02/21/190000
にあります。




■概要
セロコンフィグで書く場合

・JSON用プラグインstruts2-json-plugin-2.3.4.jarをダウンロードします。
・ソースのパッケージはXXX.○○○の形へ
・ダウンロードしたjarにパスを通して、
 Javaのソースでは
  import org.apache.struts2.convention.annotation.ParentPackage;
  import org.apache.struts2.convention.annotation.Result;
  import org.apache.struts2.convention.annotation.Results;
 する
・ソースに@Resultsアノテーションを書く
 @Results({
@Result(name="success", type="json", params={"root", "session"})
 })
 この場合、返るJSONは、session、つまり、セッションの内容
・@ParentPackage("json-default")を書き、返る値の型をJSONに指定する。

こんなかんじですかね・・・




■お題
hello.actionをnameを指定して呼ぶと

回数やメッセージをJSON形式で返します。




■準備

・JSON用プラグインstruts2-json-pluginをダウンロード&パスを通す

 以下のサイトにあるので、適切なバージョンをダウンロード

http://mvnrepository.com/artifact/org.apache.struts/struts2-json-plugin
今回はstruts2-json-plugin-2.3.4.jarをダウンロードしました。

 そして、web-inf/libの下に置き、eclipseで開発する場合、プロパティのjavaのビルドパスで、
 外部jar追加によって、追加しておきます。

 これをダウンロード&設定しないと、Tomcat実行時


9 18, 2015 5:25:17 午後 org.apache.catalina.core.StandardContext filterStart
重大: フィルタ struts2 の起動中の例外です
Unable to load configuration. - [unknown location]


というエラーが出て、サービスが立ち上がらない

・struts.xmlは、いらない(削除してよい)



■ソースstruts2.gui.HelloAction.java
ソースコードは以下の通り
package struts2.gui;

//	セッションで使う
import java.util.Map;

//(1)リクエストで使うものインポート
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.convention.annotation.Action;   //ゼロコンフィグレーション
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;   //ゼロコンフィグレーション
import org.apache.struts2.convention.annotation.Results;  //ゼロコンフィグレーション
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;

//	一般的に・・・
import com.opensymphony.xwork2.ActionSupport;

//==============================================//
//												//
//	Struts2										//
//	セッション、リクエストのサンプル			//
//												//
//==============================================//
@Results({
	@Result(name="success", type="json", params={"root", "session"})
})
@ParentPackage("json-default")
public class HelloAction extends ActionSupport implements SessionAware,ServletRequestAware{
	private String name;						//	sタグの変数
	private String msg;

	private Map<String,Object> session;			//	セッションの宣言
	private HttpServletRequest request;			//	(2)リクエストの宣言

	//	sタグで必要なアクセサ
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

	//	セッションで必要なアクセサ
	public void setSession(Map<String,Object> session) {
		this.session = session;
	}

	//	(3)リクエストで必要なアクセサ記述
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

	public HttpServletRequest getServletRequest() {
		return this.request;
	}


	@Action("hello")
    public String execute()
    {
  	    //======================================//
  	    //		値の取得						//
  	    //======================================//
    	// name取得
		setName(getServletRequest().getParameter("name"));

    	//	セッションでの取得
  	    int	kai;
  	    String kaistr = (String)session.get("kaisu");
  	    if ( kaistr	==	null)
  	    {
  	    	kai	=	0;
  	    }
  	    else
  	    {
  	    	kai = Integer.parseInt(kaistr);
  	    }

  	    //	(4)リクエストパラメタでの取得
  	    String start = getServletRequest().getParameter("start");
  	    if (start	!=	null)
  	    {
  	    	try
  	    	{
  	    		kai =  Integer.parseInt(start);
  	    	}
  	    	catch(Exception e)
  	    	{
  	    		//	数字でなかったら、なにもしない
  	    	}
  	    }


  	    //======================================//
  	    //		処理							//
  	    //======================================//
  	    kai++;		//	今回の分を足す
  	    String msg = "Hello World" + name + ":"+ kai+"回目";


  	    //======================================//
  	    //		出力								//
  	    //======================================//
  		//	セッション書き出し
  		session.put("kaisu", String.valueOf(kai));
  		session.put("msg", msg);

        this.addActionMessage("成功1");
        return SUCCESS;
    }
}





  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CAリワードがリリースした金融系アフィリ広告を扱うLinked MoneyというASP

2015-09-23 19:06:33 | ネットワーク
・・・ここまでで、よくわからなくなってきた・・・

ここの記事


サイバーエージェントの強引な競合行為でネット広告抗争が勃発!?
http://www.premiumcyzo.com/modules/member/2015/09/post_6181/

(以下太字は上記サイトより引用)

関連子会社がネイティブアドをノンクレジットで掲載

だけでも、もう???なのに・・・

 そんな中で、アドウェイズなどの大手インターネット広告会社と深刻な関係悪化に陥っているという。

「発端は、サイバーエージェントの子会社、CAリワードが昨年末にリリースした金融系のアフィリエイト広告を取り扱う『Linked Money』(リンクドマネー)というASP(アフィリエイト・サービス・プロバイダ)サービスの立ち上げです。これが、サイバーエージェントと取り引きのあるアドウェイズなど大手ASP業者に『競合事業だ』と見なされ、サイバーエージェントからのアフィリエイト広告の案件を拒否するなど、関係が悪化しているようです。またサイバーエージェントが、今年に入り「即日人気キャッシング.com」など、あからさまなアフィリエイト媒体を開設したこともあり(詳細後述)、同業者はサイバーエージェントの広告事業での路線拡大を非常に警戒している


・・・よ、よくわからん・・・

あとで、じっくり読もう。
頭、まわらん、横文字ばかりで・・・

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする