javaサーブレットからついったーにポストするだけのコード
会社の研修でjavaサーブレットの勉強をしてます。
今日の課題は「サーブレットからついったーへメッセージをポストする」でした。
ついったーへの接続はTwitter4Jライブラリを使用。
ソースコードはこちら
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import twitter4j.Twitter; import twitter4j.TwitterException; public class PostTweet extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/html; charset=UTF-8"); req.setCharacterEncoding("UTF-8"); String message = req.getParameter("message"); if(message != null){ message = new String(message.getBytes("8859_1"), "UTF-8"); } PrintWriter out = res.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional/EN"); out.println("http://www.w3.org/TR/html4/strict.dtd\">"); out.println("<html>"); out.println("<head>"); out.println("<meta http-equiv=\"Content-Type\""); out.println("content=\"text/html;charset=UTF-8\">"); out.println("<title>ついーと結果</title>"); out.println("</head>"); out.println("<body>"); try{ tweet(message); out.println("<p>ついーと成功</p>"); }catch(TwitterException e){ out.println("<p>ついーと失敗</p>"); } out.println("</p>"); out.println("</body>"); out.println("</html>"); out.close(); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/html; charset=UTF-8"); req.setCharacterEncoding("UTF-8"); String message = req.getParameter("message"); // if(message != null){ // message = new String(message.getBytes("8859_1"), "UTF-8"); // } PrintWriter out = res.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional/EN"); out.println("http://www.w3.org/TR/html4/strict.dtd\">"); out.println("<html>"); out.println("<head>"); out.println("<meta http-equiv=\"Content-Type\""); out.println("content=\"text/html;charset=UTF-8\">"); out.println("<title>ついーと結果</title>"); out.println("</head>"); out.println("<body>"); // out.println(message); try{ tweet(message); out.println("<p>ついーと成功</p>"); }catch(Exception e){ out.println("<p>ついーと失敗</p>"); } out.println("</p>"); out.println("</body>"); out.println("</html>"); out.close(); } private void tweet(String message) throws TwitterException{ /*********************** * ログイン ***********************/ Twitter twitter = new Twitter("ユーザ名", "パスワード"); // twitter.updateStatus("Tweeting!"); /*********************** * ついーと ***********************/ twitter.updateStatus(message); } }
冗長的なのは仕様です。
なぜかdoGetからのツイートは
String(message.getBytes("8859_1"), "UTF-8");
として明示的にエンコードしてあげないといけないのに、
doPostからのツイートは何もエンコードしなくておkらしい。
あと、getOutputStreamを使うと文字化けの原因になるよ!*1
ついでに、当たり前ですがTwitter4Jはapache-tomcat-6.0.18\libに入れなくちゃ動きません。
これをしておらず30分くらい進みませんでした。
仕事(と言ってもまだ研修ですが)は楽しいです。
色々ありすぎるけど頑張りたいと思います。