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分くらい進みませんでした。



仕事(と言ってもまだ研修ですが)は楽しいです。
色々ありすぎるけど頑張りたいと思います。