Tomcatが C:\Users\nitta\Documents\tomcat8\ にインストールされていて、 entry というwebapps 内のサーブレットでMariaDBデータベースにアクセスする場合は 以下の場所に mariadb-java-client-version.jar を配置する。
tomcatのパス: C:\Users\nitta\Documents\tomcat8 webapps 'entry' のパス: C:\Users\nitta\Documents\tomcat8\webapps\entry connector/J のパス: C:\Users\nitta\Documents\tomcat8\webapps\entry\WEB-INF\lib\mariadb-java-client-2.7.0.jar
システムの詳細設定 → システムのプロパティ → 環境変数 → 「システム環境変数」に対して「新規」または「編集」 → 「CLASSPATH」変数に ';' でつないで(フォルダまたはjarファイルへの)パスを指定する。複数の値を設定する場合は ; でつないで表現する。先頭に . (カレントディレクトリを表す)を必ず含めておくこと。
変数名: CLASSPATH 変数値: .;C:\Users\nitta\Documents\java\lib\mariadb-java-client-2.7.0.jar;C:\xampp\tomcat\lib\servlet-api.jar
データベースを利用した掲示板サーブレットを作成する。 基本的な動作は以下の通り。
もしもform文で入力したパラメータがあれば、データベースに 送って記憶する。
緑色の文字の部分 は自分の環境に合わせて書き換えること。
[ファイルの置き場所] ${CATALINA_HOME}/entry/webdb/WEB-INF/src/TinyBBS.java
${CATALINA_HOME}/webapps/entry/WEB-INF/src/TinyBBS.java |
import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.sql.*; @WebServlet(name="TinyBBS",urlPatterns={"/TinyBBS"}) public class TinyBBS extends HttpServlet { String host="localhost"; String db = "nittaDB"; String user = "nitta"; String pass = "PasswordOfNitta"; String tbl = "article"; String url=null; Connection con=null; Statement st=null; String selectSql = "insert into "+tbl +" (cdate,title,uname,contents) values(now(),?,?,?)"; PreparedStatement pst=null; String insertSql = "insert into "+tbl +" (cdate,title,uname,contents) values(now(),?,?,?)"; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); PrintWriter out= response.getWriter(); StringBuffer sb = new StringBuffer(); sb.append("<html><body><h2>TinyBBS</h2>"); try { Class.forName("org.mariadb.jdbc.Driver"); url = "jdbc:mysql://"+host+"/"+db +"?useUnicode=true&characterEncoding=utf8"; con = DriverManager.getConnection(url,user,pass); st = con.createStatement(); pst = con.prepareStatement(insertSql); } catch (Exception e) { e.printStackTrace(); try{ Thread.sleep(60000); } catch(InterruptedException ee) {} System.exit(1); } String titleParam = request.getParameter("title"); String unameParam = request.getParameter("uname"); String contentsParam = request.getParameter("contents"); if (titleParam!=null && unameParam!=null && contentsParam!=null) { try { pst.setString(1,titleParam); pst.setString(2,unameParam); pst.setString(3,contentsParam); pst.executeUpdate(); sb.append("<p>posted</p>\n"); } catch (Exception e) { e.printStackTrace(); } } try { ResultSet rs = st.executeQuery("select * from "+tbl); while (rs.next()) { int id = rs.getInt("id"); java.util.Date cd = rs.getDate("cdate"); String ti = rs.getString("title"); String un = rs.getString("uname"); String co = rs.getString("contents"); sb.append("<p>"+id+":"+cd+":"+ti+"["+un+"]<br />\n"); sb.append(co+"</p>\n"); } } catch (Exception e) { e.printStackTrace(); } try { if (pst != null) { pst.close(); pst = null; } if (con != null) { con.close(); con = null; } } catch (Exception e) {} sb.append("<form action=\"" + request.getRequestURI() +"\">"); sb.append("title: <input type=\"text\" name=\"title\">\n"); sb.append("name: <input type=\"text\" name=\"uname\"><br />\n"); sb.append("contents:<br />\n"); sb.append("<textarea name=\"contents\" cols=\"70\" rows=\"7\">\n"); sb.append("</textarea><br />\n"); sb.append("<input type=\"submit\" value=\"Send\">\n"); sb.append("<input type=\"reset\" value=\"Reet\">\n"); sb.append("</form>\n"); out.print(sb.toString()); } } |
TinyBBS.javaのコンパイル |
> cd %CATALINA_HOME% |
[注意] 新しいサーブレットをアノーテーションで追加した場合は、tomcatを再起動する必要がある。 また、このサーブレットを動作させるときは MariaDBデータベースを動作させておくこと (MariaDBが動作していないとTomcatがエラーで異常終了してしまう)。
[ブラウザでアクセスするURL] http://localhost:8080/entry/TinyBBS