イベント管理システムを作成しています。
フィルターファイルで、DBに登録しているテーブルのtype_idごとにページの飛ばし先を変更したいです。
1=一般ユーザーページ
2=管理ユーザーページ
sql
1-- users テーブル作成 2CREATE TABLE users ( 3 id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 4 login_id VARCHAR(50) NOT NULL unique, 5 login_pass VARCHAR(255) NOT NULL, 6 name VARCHAR(50) NOT NULL, 7 type_id INT NOT NULL, 8 group_id INT NOT NULL, 9 created DATETIME NOT NULL 10);
sql
1 2-- users テーブルサンプル追加 1 3INSERT INTO mydb.users(login_id, login_pass, name, type_id, group_id, created) 4VALUES('tarou','taroupass','山田太郎',1,1,'2019-05-02 11:12:00'); 5 6-- users テーブルサンプル追加 2 7INSERT INTO mydb.users(login_id, login_pass, name, type_id, group_id, created) 8VALUES('takasi','takasipass','田中隆',2,2,'2019-02-18 05:08:00'); 9 10-- users テーブルサンプル追加 3 11INSERT INTO mydb.users(login_id, login_pass, name, type_id, group_id, created) 12VALUES('yuuki','yuukipass','小鳥遊ゆうき',1,3,'2019-01-20 04:30:00');```
java
1 2package filter; 3 4import java.io.IOException; 5 6import javax.servlet.Filter; 7import javax.servlet.FilterChain; 8import javax.servlet.FilterConfig; 9import javax.servlet.ServletException; 10import javax.servlet.ServletRequest; 11import javax.servlet.ServletResponse; 12import javax.servlet.annotation.WebFilter; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15import javax.servlet.http.HttpSession; 16 17/** 18 * Servlet Filter implementation class AuthFilter 19 */ 20@WebFilter("/AuthFilter") 21public class AuthFilter implements Filter { 22 23 /** 24 * Default constructor. 25 */ 26 public AuthFilter() { 27 // TODO Auto-generated constructor stub 28 } 29 30 /** 31 * @see Filter#destroy() 32 */ 33 public void destroy() { 34 // TODO Auto-generated method stub 35 } 36 37 /** 38 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 39 */ 40 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 41 throws IOException, ServletException { 42 // TODO Auto-generated method stub 43 // place your code here 44 45 HttpServletRequest req = (HttpServletRequest) request; 46 HttpServletResponse res = (HttpServletResponse) response; 47 HttpSession session = req.getSession(); 48 String uri = req.getRequestURI(); 49 if (!uri.endsWith("/login")) { 50 if (session.getAttribute("loginId") == null) { 51 res.sendRedirect("login"); 52 return; 53 } 54 } 55 56 // pass the request along the filter chain 57 chain.doFilter(request, response); 58 } 59 60 /** 61 * @see Filter#init(FilterConfig) 62 */ 63 public void init(FilterConfig fConfig) throws ServletException { 64 // TODO Auto-generated method stub 65 } 66 67} 68
どのようなコードを書いたらわからないので、教えていただけますと幸いです。
ほかに必要な情報がありましたら教えてください。
>追記
現在、データベースのテーブル作成しました。
type_idカラムの値を条件にフィルターファイルでページの振り分けするところで止まっています。
4.絞込検索のときにプリペアドステートメントを利用する:prepareStatementの使用
⇒手順4でつまづいてます。
PreparedStatement st = con.PreparedStatement(sql);の一行がエラーになります。
java
1 2package test04; 3 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.sql.Statement; 9 10/** 11* localhost上のデータベースと接続し、取得したデータをコンソール出力する。 12*/ 13public class UseJdbc { 14 15 public static void main(String args[]) throws Exception { 16 17 /*接続先サーバー名を"localhost"で与えることを示している*/ 18 String servername = "localhost"; 19 20 /*接続するデータベース名をsenngokuとしている*/ 21 String databasename = "mydb"; 22 23 /*データベースの接続に用いるユーザ名をrootユーザとしている*/ 24 String user = "root"; 25 26 /*データベースの接続に用いるユーザのパスワードを指定している*/ 27 String password = "pass"; 28 29 /*取り扱う文字コードをUTF-8文字としている*/ 30 String serverencoding = "UTF-8"; 31 32 /*データベースをあらわすURLを設定している*/ 33 String url = "jdbc:mysql://localhost/" + databasename; 34 35 /*MySQLの場合、URLの形式は次のようになります。 36 jdbc:mysql://(サーバ名)/(データベース名)*/ 37 38 /*↑データベースをあらわすURL(データベースURL)は、データベースに接続する場合に 39 必要となる情報をセットした文字列である。 40 この文字列の構造は、"jdbc"、サブプロトコル、サブネームの3つの部分から構成される。*/ 41 42 /*接続を表すConnectionオブジェクトを初期化*/ 43 Connection con = null; 44 45 try { 46 47 /*クラスローダによりJDBCドライバを読み込んでいることを示している。 48 引数は、データベースにアクセスするためのJDBCドライバのクラス名である。*/ 49 Class.forName("com.mysql.jdbc.Driver").newInstance(); 50 51 /*DriverManagerクラスのgetConnectionメソッドを使ってデータベースに接続する。*/ 52 con = DriverManager.getConnection(url, user, password); 53 54 System.out.println("Connected...."); 55 56 /*データベースの接続後に、sql文をデータベースに直接渡すのではなく、 57 sqlコンテナの役割を果たすオブジェクトに渡すためのStatementオブジェクトを作成する。*/ 58 // Statement st = con.createStatement(sql); 59 PreparedStatement st = con.PreparedStatement(); 60 61 /*SQL文を作成する*/ 62 String sqlStr = "SELECT * FROM mydb.users where name = ?,?;"; 63 st.setString(1, "山田太郎"); 64 65 /*SQL文を実行した結果セットをResultSetオブジェクトに格納している*/ 66 ResultSet result = st.executeQuery(sqlStr); 67 68 /*クエリ結果を1レコードずつ出力していく*/ 69 while (result.next()) { 70 /*getString()メソッドは、引数に指定されたフィールド名(列)の値をStringとして取得する*/ 71 // String str1 = result.getString("id"); 72 String str2 = result.getString("login_id"); 73 String str3 = result.getString("login_pass"); 74 // String str4 = result.getString("name"); 75 // String str5 = result.getString("type_id"); 76 // String str6 = result.getString("grouo_id"); 77 // String str7 = result.getString("created"); 78 // System.out.println(str1 + ", " + str2 + ", " + str3 + "," + str4); 79 System.out.println(str2 + ", " + str3); 80 } 81 82 /*ResultSetオブジェクトを閉じる*/ 83 result.close(); 84 85 /*Statementオブジェクトを閉じる*/ 86 st.close(); 87 88 /*Connectionオブジェクトを閉じる*/ 89 con.close(); 90 } catch (SQLException e) { 91 92 /*エラーメッセージ出力*/ 93 System.out.println("Connection Failed. : " + e.toString()); 94 95 /*例外を投げちゃうぞ*/ 96 throw new Exception(); 97 98 } catch (ClassNotFoundException e) { 99 100 /*エラーメッセージ出力*/ 101 System.out.println("ドライバを読み込めませんでした " + e); 102 } finally { 103 try { 104 if (con != null) { 105 con.close(); 106 } 107 } catch (Exception e) { 108 109 /*エラーメッセージ出力*/ 110 System.out.println("Exception2! :" + e.toString()); 111 112 /*例外を投げちゃうぞ*/ 113 throw new Exception(); 114 } 115 } 116 } 117} 118コード