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


