この記事では、参照のために学生情報管理システムのJavawebの実装を共有しています。特定のコンテンツは次のとおりです
初期版
初期バージョンの追加ページはありません。フロントエンドについてあまり学んでいないので、インターフェイスは醜いです。メインテクノロジー: JSP、Javabean、サーブレット、JDBCメインページは次のとおりです。
ログインページ
ホームページ
生徒を追加します
すべての学生を見る
学生の問い合わせ
プロジェクトディレクトリ
データベース
2つのテーブル、ユーザーテーブルと学生テーブル。 dbutilsツールを使用するには、データベーステーブルの属性命名とget()およびset()メソッドのjavabeanメソッドの一致に注意してください。たとえば、T_USERテーブルのUnameは次のとおりです。PrivateStringUname、getuname()、setuname()in javabeanです。
テーブルt_user(uid char(32)プライマリキー、uname varchar(40)not null、uppassword varchar(40)null)を作成します。
テーブルT_Student(SID CHAR(32)プライマリキー、Sname Varchar(40)null、性別varchar(6)null、誕生日char(10)、Tellphone varchar(15)null、email varchar(40)、description varchar(500));
少しの知識ポイント
ログイン
ログインするとき、ユーザー名またはパスワード入力ボックスが空であるかどうかは、ログインページのJSコードで審査されます。どちらも空でない場合は、ユーザー名情報を介してデータベースを照会します。ユーザーが見つかった場合、ログインは正常にログインします。そうしないと、ユーザー名かパスワードエラーかを判断する必要があります。このトランザクションはサービスレイヤーで処理され、DAOレイヤーはユーザーを使用してユーザーを見つけることのみを担当します。
userserviceコード:
public class userservice {private userdao userdao = new userDao();パブリックユーザークエリ(ユーザーフォーム)スロー例外{user user = userdao.query(form); //ユーザーが見つかっていませんif(user == null){throw new Exception( "ユーザー名は存在しません"); } //ユーザーが見つかりましたが、パスワードは(!form.getUpassWord()。equals(user.getUpassword())))の場合に一致しませんでした。 } return user; }}フィルターフィルター
ログインしていないユーザーが他のページに直接アクセスできるようにするのを防ぐためには、フィルターが必要です。すべてのページをユーザーフォルダーに個別に配置します。ユーザーが正常にログインしたら、セッションの「SessionUser」プロパティにユーザーの情報を保存します。フィルターは、このプロパティが空であるかどうかを判断します。空の場合、それはユーザーのログインが失敗し、それをリリースしないことを意味します。ログインページに直接移動します。空でない場合は、リリースします。フィルターのメインコード:
public void dofilter(servletrequest request、servletresponse応答、フィルターチェーンチェーン)は、ioexception、servletexception {// 1。セッションを取得// 2。セッションにユーザーがいるかどうかを判断します。もしそうなら、リリース// 3。それ以外の場合は、ログインページhttpservletrequest req =(httpservletrequest)リクエストに移動します。 user user =(user)req.getsession()。getattribute( "sessionuser"); if(user!= null){Chain.dofilter(request、response); } else {httpservletResponse resp =(httpservletResponse)応答; resp.sendredirect(req.getContextPath() + "/index.jsp"); }}マルチコンビネーションの組み合わせクエリ
高度な検索ページには、学生名、性別、携帯電話番号、メールアドレスの4つの選択肢があります。 4つの条件を配置し、任意に組み合わせることができます。 QTプロジェクトを書く前に、この問題に遭遇しました。当時、SQLステートメントをスプライシングしましたが、「1 = 1」を使用することは非常に面倒だとは思っていませんでした。次のコードはクラシックであり、ファジークエリを使用して検索をより人道的にします。
パブリックリスト<Student> Query(Student S){try {StringBuilder sql = new StringBuilder( "Select * from t_student Where 1 = 1"); List <Object> params = new ArrayList <Object>(); if(s.getsname()!= null &&!s.getsname()。trim()。isempty()){sql.append( "and sname like?"); params.add( "%" + s.getsname() + "%"); } if(s.getGender()!= null &&!s.getGender()。trim()。isempty()){sql.append( "and gender =?"); params.add(s.getgender()); } if(s.getTellPhone()!= null &&!s.getTellPhone()。trim()。isempty()){sql.append( "and tellphone like?"); params.add( "%" + s.gettellphone() + "%"); } if(s.getemail()!= null &&!s.getemail()。trim()。isempty()){sql.append( "and email vike?"); params.add( "%" + s.getemail() + "%"); } return qr.query(sql.tostring()、new beanlisthandler <sustent>(desudent.class)、params.toarray()); } catch(Exception e){新しいruntimeException(e); }}進化版:ページネーション
クエリページを表示して、より美しくします。ページは次のとおりです。ページn/合計Mホームページ前のページ1 2 3 4 5 6 7 8 9 10次のページの最後のページ。
ページネーション効果は次のとおりです。
ページネーションに必要なデータ:
現在のページ:pagecode
合計ページ:合計ページ
合計レコードカウント:TotalRecord
ページごとのレコード数:Pagesize
現在のページデータ:BeanList
PageBean
これらのページングデータは常にレイヤー間で前後に渡す必要があるためです!これらのページデータをJavabeanにカプセル化します。これは、PageBeanなどのページビーンと呼ばれます。マルチコンディショナルクエリを使用して2ページをクリックする場合、2ページのハイパーリンクにはクエリ条件がなく、クエリ条件が失われるため、ページ上のすべてのリンクのクエリ条件を維持する必要があります。 PageBeanのURLに文字列として条件を保存したい!
コードは次のとおりです。
public class pagebean <t> {private integer pagecode; // current page number private integer pagesize; //ページごとのデータサイズprivate integer totalRecord; // Total Records private list <t> beanlist; //現在のページのレコードは一般的なものとして定義されます。将来的にプライベート文字列URLを直接使用するため; // URL後の条件は複数の条件で結合されますRetull Record%Pagesize == 0? TP:TP+1; } ... // GET、属性のセットメソッド...}各レイヤーのページングの処理
JSPページ:表示データと「ページn/合計mページ前のページ1 2 3 4 5 6 7 8 9 10次のページの最後のページ」;ページコードをサーブレットに渡します
サーブレット:PageBeanオブジェクトを作成し、PageBeanのすべての属性に値を割り当ててから、PageCodeとPaysizeをDAOレイヤーに渡します。 DAOによって返されたPageBeanオブジェクトを受け入れ、リクエストフィールドに保存し、ページに戻ります
サービス:仲介者として機能し、取引を処理する必要はありません
DAO:PageCodeを取得してページサイズを取得し、PageBeanオブジェクトを作成し、データベースをクエリしてTotalRecordとBeanListを取得し、PageBeanを返します。
JSPページの処理ページ番号のコード:
<center> page $ {pb.pagecode} page/total $ {pb.totalpage} page <a href = "$ {pb.url}&pc = 1" rel = "real =" external nofollow ">ホームページ</a> <c:if test =" $ {pb.pagecode> 1} }&pc = $ {pb.pagecode-1} "rel =" external nofollow ">前のページ</a> </c:if> <! - ページ番号テーブルの計算が終了します - > <c:> <c:code> <c:chook =" $ {pb.totalpage <} "> <c:" set "1 value = "$ {pb.totalpage}"> </c:set> </c:when> <c:rets> <% - 計算式 - %> <c:set var = "begin" value = "$ {pb.pagecode-5}"> </c:set> <c:set var = "end" $ "pb.pb.pagecode> <ヘッダーオーバーフロー - %> <c:test = "$ {begin <1}"> <c:set var = "begin" value = "1"> "> </c:set> <c:set var =" end "value =" 10 "> </c:set> </c:if> <% - テールオーバーフロー - %> < value = "$ {pb.totalpage-9}"> </c:set> <c:set var = "end" value = "$ {pb.totalpage}"> </c:set> </c:if> </c:それ以外の場合は> </c:ループページ番号を選択する> < } "> <c:chood> <c:test =" $ {i eq pb.pagecode} "> [$ {i}] </c:when> <c:それ以外の場合は> <a href =" $ {pb.url}&pc = $ {i} "> [$ {i}] test = "$ {pb.pagecode <pb.totalpage}"> <a href = "$ {pb.url}&pc = $ {pb.pagecode+1}">次のページ</a> </c:if> <a href = "$ {pb.url}&PC = $ $ $ {pb.totalpage}"ページ</a> </center>ページネーションを追加した後のマルチコンディションの組み合わせクエリコード
public PageBean <Student> Query(Student S、Int PC、Int PS){try {pageBean <Student> pb = new PageBean <Student>(); pb.setPageCode(PC); pb.setPagesize(ps); /**合計レコードをクエリ*/ stringBuilder numsql = new StringBuilder( "t_studentからselect count(*)); stringbuilder wheresql = new StringBuilder( "WHERE 1 = 1"); List <Object> params = new ArrayList <Object>(); if(s.getsname()!= null &&!s.getsname()。trim()。isempty()){wheresql.append( "and sname like?"); params.add( "%" + s.getsname() + "%"); } if(s.getGender()!= null &&!s.getGender()。trim()。isempty()){wheresql.append( "and gender =?"); params.add(s.getgender()); } if(s.getTellPhone()!= null &&!s.getTellPhone()。trim()。isempty()){wheresql.append( "and tellphone like?"); params.add( "%" + s.gettellphone() + "%"); } if(s.getemail()!= null &&!s.getemail()。trim()。isempty()){wheresql.append( "and email wike?"); params.add( "%" + s.getemail() + "%"); } number number =(number)qr.query(numsql.append(wheresql).toString()、new scalarhandler()、params.toarray()); int totalRecord = number.intvalue(); pb.settotalRecord(TotalRecord); / * * beanlist result setを取得 */ stringbuilder sql = new StringBuilder( "select * from t_student"); stringbuilder limitsql = new StringBuilder( "lime?、?"); params.add((pc-1)*ps); params.add(ps); List <Student> Students = Qr.Query(sql.Append(wheresql).append(limitsql).toString()、new beanlisthandler <susted.class)、params.toarray()); PB.SetBeanList(学生); PBを返します。 } catch(Exception e){新しいruntimeException(e); }}より多くの学習資料については、特別なトピック「管理システム開発」に注意してください。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。