いや、ニーズはないと思いますよ、思いますけど、一応・・・
昨日、
Struts2でJSONで返したい(RESTっぽくしたい)その2 struts.xmlを使う
http://blog.goo.ne.jp/xmldtp/e/b2ce6e54c1ca160ad1727dd876705e1b
を書いたけど、JSONライブラリを使わないで、
・response.getWriter()で、PrintWriterをとってきて、
・printで、JSONの内容をテキストで書き出す
こともできる。
これではニーズないと思うけど、テキストファイルをダウンロードしたい
場合も理屈は同じなので、そういうニーズはあるかもしれないということで、
その方法も書いておく。
■お題
昨日と同じ。つまり、
![]()
を、今回は、テキストとして出す。
■変更点
昨日との違いは、
・struts2-json-pluginは、いりません
・struts.xmlの書き方
・Actionの書き方
なので、今回は、struts.xmlとActionの内容を載せておきます。
(あとのweb.xmlの配置などは、ふつうのStruts2と同じなので省略)
■struts.xml
Struts2をやってみる (3) - のtypeに関して
http://kinjouj.github.io/2013/09/struts2-3-result-type.html
の「plainText」を参考にしました。結局、こうなる。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="hello" namespace="/" extends="struts-default"> <action name="hello" class="struts2.gui.HelloAction"> <result name="success" type="plainText"> <param name="charSet">utf-8</param> </result> </action> </package> </struts>
上記の例は、「struts2.gui.HelloAction」というクラスにexecute()があって
execute()で、getWriter()して、テキスト書き出しするというもの
(リターンがsuccessのときに)
■Actionの書き方
基本的には上記サイト「Struts2をやってみる (3) - のtypeに関して」の
「plainText」のstruts.xmlの下にあるソースを参考にしました。結局、こうなる。
package struts2.gui;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;
//==============================================//
//JSONのサンプル
//==============================================//
public class HelloAction extends ActionSupport implements ServletResponseAware{
private HttpServletResponse response;
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public String execute()
{
response.setContentType("text/plain; charset=utf-8");
try {
PrintWriter out = response.getWriter();
out.print("{\"japanese\":\"ようこそ世界\",\"english\":\"Hello World\"}");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
closeしないと、出力されないこともあるので注意
こんなかんじかな・・・
昨日、
Struts2でJSONで返したい(RESTっぽくしたい)その2 struts.xmlを使う
http://blog.goo.ne.jp/xmldtp/e/b2ce6e54c1ca160ad1727dd876705e1b
を書いたけど、JSONライブラリを使わないで、
・response.getWriter()で、PrintWriterをとってきて、
・printで、JSONの内容をテキストで書き出す
こともできる。
これではニーズないと思うけど、テキストファイルをダウンロードしたい
場合も理屈は同じなので、そういうニーズはあるかもしれないということで、
その方法も書いておく。
■お題
昨日と同じ。つまり、

を、今回は、テキストとして出す。
■変更点
昨日との違いは、
・struts2-json-pluginは、いりません
・struts.xmlの書き方
・Actionの書き方
なので、今回は、struts.xmlとActionの内容を載せておきます。
(あとのweb.xmlの配置などは、ふつうのStruts2と同じなので省略)
■struts.xml
Struts2をやってみる (3) - のtypeに関して
http://kinjouj.github.io/2013/09/struts2-3-result-type.html
の「plainText」を参考にしました。結局、こうなる。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="hello" namespace="/" extends="struts-default"> <action name="hello" class="struts2.gui.HelloAction"> <result name="success" type="plainText"> <param name="charSet">utf-8</param> </result> </action> </package> </struts>
上記の例は、「struts2.gui.HelloAction」というクラスにexecute()があって
execute()で、getWriter()して、テキスト書き出しするというもの
(リターンがsuccessのときに)
■Actionの書き方
基本的には上記サイト「Struts2をやってみる (3) - のtypeに関して」の
「plainText」のstruts.xmlの下にあるソースを参考にしました。結局、こうなる。
package struts2.gui;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;
//==============================================//
//JSONのサンプル
//==============================================//
public class HelloAction extends ActionSupport implements ServletResponseAware{
private HttpServletResponse response;
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
public String execute()
{
response.setContentType("text/plain; charset=utf-8");
try {
PrintWriter out = response.getWriter();
out.print("{\"japanese\":\"ようこそ世界\",\"english\":\"Hello World\"}");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
closeしないと、出力されないこともあるので注意
こんなかんじかな・・・