이 기사는 귀하의 참조를위한 학생 정보 관리 시스템의 Javaweb 구현을 공유합니다. 특정 내용은 다음과 같습니다
초기 판
초기 버전에는 추가 페이지가 없습니다. 프론트 엔드에 대해 많이 배우지 않았기 때문에 인터페이스는 추악합니다. 주요 기술 : JSP, Javabean, Servlet, JDBC 메인 페이지는 다음과 같습니다.
로그인 페이지
홈페이지
학생들을 추가하십시오
모든 학생들을보십시오
학생들의 질문
프로젝트 디렉토리
데이터 베이스
두 테이블, 사용자 테이블 및 학생 테이블. dbutils 도구를 사용하려면 데이터베이스 테이블의 이름 지정과 get () 및 javabean의 set () 메소드의 일치에주의를 기울여야합니다. 예를 들어, t_user 테이블의 Uname은 Javabean의 private String Uname, getUname (), setuname ()입니다.
테이블 T_USER (UID char (32) 1 차 키, unname varchar (40) null, uppassword varchar (40) NOT NULL)을 만듭니다.
테이블 생성 t_student (Sid Char (32) 1 차 키, Sname Varchar (40) NULL, Gender Varchar (6) NULL, 생일 숯 (10), Tellphone Varchar (15) NULL, 이메일 VARCHAR (40), 설명 VARCHAR (500));
약간의 지식 요점
로그인하십시오
로그인 할 때 사용자 이름 또는 비밀번호 입력 상자가 비어 있는지 여부는 로그인 페이지의 JS 코드로 판단됩니다. 비어 있지 않으면 사용자 이름 정보를 통해 데이터베이스를 쿼리하십시오. 사용자가 발견되면 로그인이 성공적으로 로그인됩니다. 그렇지 않으면 사용자 이름인지 비밀번호 오류인지 확인해야합니다. 이 트랜잭션은 서비스 계층에서 처리되며 DAO 계층은 사용자 이름을 통해 사용자를 찾는 데 책임이 있습니다.
uservice 코드 :
공개 클래스 사용자 서비스 {private userDao userDao = new userDao (); 공개 사용자 쿼리 (사용자 양식) 예외 {user user = userdao.query (form); // 사용자를 찾을 수 없습니다. } // 사용자가 발견되었지만 암호가 (! form.getUpassword (). Equals (user.getUpassword ())) {새 예외 ( "비밀번호 오류"); } 리턴 사용자; }}필터 필터
로그인되지 않은 사용자가 다른 페이지에 직접 액세스 할 수 없도록하기 위해 필터가 필요합니다. 로그인 페이지 외부의 모든 페이지를 사용자 폴더에 별도로 배치하십시오. 사용자가 성공적으로 로그인하면 세션의 "SessionUser"속성에 사용자의 정보를 저장하십시오. 필터는이 속성이 비어 있는지 여부를 결정합니다. 비어 있으면 사용자 로그인이 실패하여 해제되지 않음을 의미합니다. 로그인 페이지로 직접 이동하십시오. 비어 있지 않으면 해제하십시오. 필터의 기본 코드 :
Public Void Dofilter (Servletrequest 요청, ServletRepronse 응답, Filterchain 체인) IoException, ServleTeXception {// 1. 세션 받기 // 2. 세션에 사용자가 있는지 확인하십시오. 그렇다면 릴리스 // 3. 그렇지 않으면 로그인 페이지 httpservletrequest req = (httpservletrequest) 요청으로 이동하십시오. user user = (user) req.getSession (). getAttribute ( "sessionUser"); if (user! = null) {chain.dofilter (요청, 응답); } else {httpservletResponse resp = (httpservletResponse) 응답; resp.SendRedirect (req.getContextPath () + "/index.jsp"); }}다중 조합 조합 쿼리
고급 검색 페이지에는 학생 이름, 성별, 휴대폰 번호 및 이메일 주소를 선택할 수있는 네 가지 옵션이 있습니다. 네 가지 조건을 임의로 배열하고 결합 할 수 있습니다. QT 프로젝트를 작성하기 전에이 문제가 발생했습니다. 그 당시 SQL 문을 스 플라이 싱크를 사용했지만 "where 1 = 1"을 사용하는 것이 매우 번거 롭다고 기대하지 않았습니다. 다음 코드는 고전적이며 퍼지 쿼리를 사용하여 검색을 더욱 인간적으로 만듭니다.
공개 목록 <tudent> query (학생 S) {try {StringBuilder SQL = New StringBuilder ( "select * from t_student where 1 = 1"); List <Object> params = new ArrayList <Object> (); if (s.getSname ()! = null &&! params.add ( "%" + s.getsname () + "%"); } if (s.getGender ()! = null &&! params.add (s.getgender ()); } if (s.getTellphone ()! = null &&! params.add ( "%" + s.gettellphone () + "%"); } if (s.getEmail ()! = null &&! s.getEmail (). trim (). isempty ()) {sql.append ( "and email like?"); params.add ( "%" + s.getEmail () + "%"); } return qr.query (sql.toString (), New Beanlisthandler <tudent> (Student.class), params.toarray ()); } catch (예외 e) {throw new runtimeexception (e); }}진화판 : Pagination
쿼리 페이지를 표시하여 더 아름답게 만듭니다. 페이지는 다음과 같습니다. Page N/Total M 홈페이지 이전 페이지 1 2 3 4 5 6 7 8 9 10 다음 페이지 마지막 페이지.
페이지 매김 효과는 다음과 같습니다.
Pagination에 필요한 데이터 :
현재 페이지 : pagecode
총 페이지 : TotalPage
총 기록 수 : TotalRecord
페이지 당 레코드 수 : Pagesize
현재 페이지 데이터 : beanlist
PageBean
이 페지 데이터는 항상 계층 사이에서 앞뒤로 전달되어야합니다! 우리는 이러한 페인트 데이터를 PageBean과 같은 PAGED BEAN이라고하는 Javabean으로 캡슐화합니다. 멀티 컨디셔닝 쿼리를 사용하고 2 페이지를 클릭하면 2 페이지의 하이퍼 링크에는 쿼리 조건이 없으며 쿼리 조건이 손실되므로 페이지의 모든 링크에 쿼리 조건을 유지해야합니다! 우리는 조건을 PageBean의 URL에 문자열로 저장하고 싶습니다!
코드는 다음과 같습니다.
공개 클래스 PageBean <t> {개인 정수 pagecode; // 현재 페이지 번호 개인 정수 페이지를 개인 정수 페이지를 페이지 당 // 페이지 당 데이터 크기 개인 정수 TotalRecord; // Total Records 개인 목록 <T> beanlist; // 현재 페이지의 레코드는 일반적인 것으로 정의됩니다. 미래에 개인 문자열 URL을 직접 사용하려면; // 여러 조건에서 URL이 결합 된 후 조건 // 총 페이지 수를 반환합니다. TotalRecord%pagesize == 0? TP : TP+1; } ... // get, 속성의 설정 방법 ...}각 층에서 페이징 처리
JSP 페이지 : 디스플레이 디스플레이 데이터 및 "Page N/Total M Pages 이전 페이지 1 2 3 4 5 6 7 8 9 10 다음 페이지 마지막 페이지"; PageCode를 서블릿으로 전달합니다
서블릿 : PageBean 객체를 작성하고 PageBean의 모든 속성에 값을 할당 한 다음 PageCode 및 Pagesize를 DAO 레이어로 전달합니다. DAO가 반환 한 PageBean 객체를 수락하고 요청 필드에 저장 한 후 페이지로 돌아갑니다.
서비스 : 중개인 역할을하며 거래를 처리 할 필요가 없습니다.
DAO : PageCode 및 Pagesize를 얻고, PageBean 객체를 만들고, 데이터베이스를 쿼리하여 TotalRecord 및 Beanlist를 가져오고, PageBean을 반환하십시오.
JSP 페이지 처리 페이지 번호의 코드 :
<center> 페이지 $ {pb.pagecode} page/total $ {pb.totalpage} page <a href = "$ {pb.url} & pc = 1"rel = "external nofollow"> 홈 페이지 </a> <c : test = "$ {pb.pagecode> 1}"> <a href = "$ {pb.url } & pc = $ {pb.pagecode-1} "rel ="external nofollow "> 이전 페이지 </a> </c : if> <!-페이지 번호 테이블 계산 시작-> <c : 선택> <c : test ="$ {pb.totalpage <= 10} "> <c : set var ="value = ""> value = "$ {pb.totalpage}"> </c : set> </c : when> <c : eloth> <%-계산 공식-%> <c : set var = "value ="$ {pb.pagecode-5} "> </c : set> <c : set> <c : set> </c :--</c :-- 헤더 오버 플로우-%> <c : if test = "$ {시작 <1}"> <c : set var = "시작"value = "1"> </c : set> <c : set var = "end"value = "10"> </c : set> </c : if> <%-꼬리 오버 플로우-%> <c : {end> pb.totalpage} "> pb.totalpage} value = "$ {pb.totalpage-9}"> </c : set> <c : set var = "end"value = "$ {pb.totalpage}"> </c : set> </c : if> </c : elop> </c : chinge = "$ {foreach var =". } "> <c : 선택> <c : test ="$ {i eq pb.pagecode} "> [$ {i}] </c : when> <c : 그렇지 않으면> <a href ="$ {pb.url} & pc = $ {i} "> [$ {i}] </a> </c : </c : foreach> 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>Pagination을 추가 한 후 다중 조합 조합 쿼리 코드
public pagebean <tudent> query (학생 s, int pc, int ps) {try {pagebean <tudent> pb = new pagebean <elident> (); pb.setpagecode (PC); pb.setpagesize (ps); /** 총 레코드 쿼리*/ StringBuilder Numsql = new StringBuilder ( "t_student에서 count (*)를 선택하십시오"); StringBuilder wheresql = new StringBuilder ( "여기서 1 = 1"); List <Object> params = new ArrayList <Object> (); if (s.getsName ()! = null &&! params.add ( "%" + s.getsname () + "%"); } if (s.getGender ()! = null &&! s.getGender (). trim (). isempty ()) {wheresql.append ( "and gender =?"); params.add (s.getgender ()); } if (s.getTellphone ()! = null &&! params.add ( "%" + s.gettellphone () + "%"); } if (s.getEmail ()! = null &&! s.getEmail (). trim (). isempty ()) {wheresql.append ( "and email like?"); params.add ( "%" + s.getEmail () + "%"); . int totalrecord = number.intValue (); pb.setTotalRecord (TotalRecord); / * * beanlist 결과 세트를 가져옵니다 */ StringBuilder sql = new StringBuilder ( "select * from t_student"); StringBuilder limitsql = new StringBuilder ( "Limit?,?"); params.add ((PC-1)*PS); params.add (ps); List <tudent> 학생 = QR.Query (sql.append (wheresql) .append (limitsql) .toString (), New Beanlisthandler <student> (Student.class), params.toarray ()); pb.setbeanlist (학생); 반환 PB; } catch (예외 e) {throw new runtimeexception (e); }}더 많은 학습 자료는 특별한 주제 "관리 시스템 개발"에주의를 기울이십시오.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.