国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

2021-03-23 13:06草千里 Java教程

這篇文章主要為大家詳細(xì)介紹了javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了javaweb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),供大家參考,具體內(nèi)容如下

初始版

初始版是沒有加分頁的。因?yàn)闆]怎么學(xué)過前端,界面很丑陋。主要技術(shù):jsp,javabean,servlet,jdbc主要頁面如下:

登錄頁面

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

主頁

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

添加學(xué)生

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

查看所有學(xué)生

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

查詢學(xué)生

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

工程目錄

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

數(shù)據(jù)庫

兩個(gè)表,user表和student表。為了使用dbutils工具,一定要注意數(shù)據(jù)庫表的屬性的命名和javabean的get(),set() 方法的匹配。比如t_user表里的uname,在javabean中是:private string uname,getuname(),setuname()。

?
1
2
3
4
5
create table t_user(
 uid  char(32) primary key,
 uname  varchar(40) not null,
 upassword  varchar(40) not null
);
?
1
2
3
4
5
6
7
8
9
create table t_student(
 sid  char(32) primary key,
 sname  varchar(40) not null,
 gender  varchar(6) not null,
 birthday char(10),
 tellphone varchar(15) not null,
 email  varchar(40), 
 description varchar(500)
);

小知識(shí)點(diǎn)

登錄

登錄時(shí),用戶名或密碼輸入框是否為空由登錄頁面的js代碼判斷,二者都不為空時(shí),通過用戶名信息查詢數(shù)據(jù)庫,如果找到用戶則成功登錄,否則要判斷是用戶名錯(cuò)誤還是密碼錯(cuò)誤。這個(gè)事務(wù)在service層處理,dao層只負(fù)責(zé)通過用戶名查找用戶。

userservice代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class userservice {
 private userdao userdao = new userdao();
 
 public user query(user form) throws exception{
  user user = userdao.query(form);
 
  //沒找到用戶
  if(user == null){
   throw new exception("用戶名不存在");
  }
 
  //找到用戶了,但密碼不匹配
  if(!form.getupassword().equals(user.getupassword())){
   throw new exception("密碼錯(cuò)誤");
  }
 
  return user;
 }
}

filter過濾器

為了防止沒有登錄的用戶也能直接訪問其他頁面,需要寫一個(gè)過濾器。將登錄頁面之外的所有頁面單獨(dú)放在一個(gè)users文件夾下,當(dāng)用戶登錄成功時(shí),將該用戶的信息保存到session的“sessionuser”屬性中,過濾器判斷這個(gè)屬性是否為空,如果是空說明用戶登錄不成功,不放行,直接轉(zhuǎn)到登錄頁面,非空則放行。過濾器的主要代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void dofilter(servletrequest request, servletresponse response, filterchain chain)
   throws ioexception, servletexception {
  //1.得到session
  //2.判斷session中是否有用戶,如果有,放行
  //3.否則轉(zhuǎn)到登錄頁面
  httpservletrequest req = (httpservletrequest)request;
  user user = (user)req.getsession().getattribute("sessionuser");
  if(user != null){
   chain.dofilter(request, response);
  }else{
   httpservletresponse resp = (httpservletresponse)response;
   resp.sendredirect(req.getcontextpath() + "/index.jsp");
  
 }

多條件組合查詢

在高級(jí)搜索頁面,有四個(gè)選項(xiàng)可以選擇:學(xué)生姓名,性別,手機(jī)號(hào),郵箱。四個(gè)條件可以任意排列組合。之前寫qt項(xiàng)目時(shí)也遇到過這個(gè)問題,當(dāng)時(shí)用的就是拼接sql語句,但是沒想到用“where 1=1”,很費(fèi)事。下面的代碼很經(jīng)典,并且用到了模糊查詢,使搜索更人性化。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public list<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 like ?");
   params.add("%" + s.getemail() + "%");
  }
 
  return qr.query(sql.tostring(),
    new beanlisthandler<student>(student.class),
    params.toarray());
 }catch (exception e) {
  throw new runtimeexception(e);
 }
}

進(jìn)化版:分頁

將查詢出來的分頁顯示,更加美觀。分頁形如:第n頁/共m頁 首頁 上一頁 1 2 3 4 5 6 7 8 9 10 下一頁 尾頁。

分頁效果如下:

javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

分頁需要的數(shù)據(jù):

當(dāng)前頁:pagecode
總頁數(shù):totalpage
總記錄數(shù):totalrecord
每頁記錄數(shù):pagesize
當(dāng)前頁數(shù)據(jù):beanlist

pagebean

由于這些分頁數(shù)據(jù)總要在各層之間來回的傳遞!我們把這些分頁數(shù)據(jù)封裝到一個(gè)javabean中,它就叫分頁bean,例如:pagebean。當(dāng)使用多條件查詢后,再點(diǎn)擊第2 頁時(shí),第2頁上的超鏈接沒有查詢條件,會(huì)丟失查詢條件,所以我們需要在頁面上的所有鏈接都要保留查詢條件!我們要把條件以一個(gè)字符串的形式保存到pagebean的url中!
代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class pagebean <t>{
 private integer pagecode;//當(dāng)前頁碼
 private integer pagesize;//每頁數(shù)據(jù)大小
 private integer totalrecord;//總記錄
 private list<t> beanlist;//當(dāng)前頁的記錄,定義成泛型為了以后直接用
 private string url;//多條件組合查詢時(shí)url后的條件
 
 //返回總頁數(shù)
 public integer gettotalpage(){
  int tp = totalrecord/pagesize;
  return totalrecord%pagesize==0 ? tp : tp+1;
 }
 ...//屬性的get,set方法
 ...
}

分頁在各層中的處理

jsp頁面:顯示顯示數(shù)據(jù)和“第n頁/共m頁 首頁 上一頁 1 2 3 4 5 6 7 8 9 10 下一頁 尾頁”;給servlet傳遞pagecode
servlet:創(chuàng)建pagebean對(duì)象,給pagebean所有的屬性賦值,然后給dao層傳遞pagecode和pagesize;接受dao返回的pagebean對(duì)象,保存到request域,返回給頁面
service:充當(dāng)中間商的角色,沒有事務(wù)需要處理
dao:得到pagecode和pagesize,創(chuàng)建pagebean對(duì)象,查詢數(shù)據(jù)庫得到totalrecord和beanlist,返回pagebean。

jsp頁面處理頁碼的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<center>
第${pb.pagecode }頁/共${pb.totalpage }頁
<a href="${pb.url }&pc=1" rel="external nofollow" > 首頁</a>
<c:if test="${pb.pagecode > 1 }">
<a href="${pb.url }&pc=${pb.pagecode-1 }" rel="external nofollow" >上一頁</a>
</c:if>
<!-- 頁碼表 計(jì)算begin end-->
<c:choose>
 <c:when test="${pb.totalpage<=10 }">
  <c:set var="begin" value="1"></c:set>
  <c:set var="end" value="${pb.totalpage }"></c:set>
 </c:when>
 <c:otherwise>
  <%-- 計(jì)算公式 --%>
  <c:set var="begin" value="${pb.pagecode-5 }"></c:set>
  <c:set var="end" value="${pb.pagecode+4 }"></c:set>
  <%--- 頭溢出 --%>
  <c:if test="${begin<1 }">
   <c:set var="begin" value="1"></c:set>
   <c:set var="end" value="10"></c:set>
  </c:if>
  <%-- 尾溢出 --%>
  <c:if test="${end> pb.totalpage}">
   <c:set var="begin" value="${pb.totalpage-9 }"></c:set>
   <c:set var="end" value="${pb.totalpage }"></c:set>
  </c:if>
 </c:otherwise>
</c:choose>
<%-- 循環(huán)顯示頁碼列表 --%>
<c:foreach var="i" begin="${begin }" end="${end }">
 <c:choose>
  <c:when test="${i eq pb.pagecode }">
   [${i }]
  </c:when>
  <c:otherwise>
   <a href="${pb.url }&pc=${i }">[${i }]</a>
  </c:otherwise>
 </c:choose>
</c:foreach>
 
<c:if 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>

加完分頁之后的多條件組合查詢代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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("select count(*) from t_student");
  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 like ?");
   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結(jié)果集
   */
  stringbuilder sql = new stringbuilder("select * from t_student");
  stringbuilder limitsql = new stringbuilder(" limit ?,?");
  params.add((pc-1)*ps);
  params.add(ps);
  list<student> students = qr.query(sql.append(wheresql).append(limitsql).tostring(),
    new beanlisthandler<student>(student.class),params.toarray());
  pb.setbeanlist(students);
  return pb;
 }catch (exception e) {
  throw new runtimeexception(e);
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://blog.csdn.net/liqiancao/article/details/51129654

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久中文字幕网 | 超碰首页 | 成人精品一区二区三区中文字幕 | 黄色三级免费片 | 一区二区三区国产在线观看 | 亚洲视频在线视频 | 综合久久av | 久久精品国产清自在天天线 | 欧美日韩第一区 | 久久久久高清视频 | 久久久久一区二区三区 | 黄色免费高清网站 | 欧美 日韩 国产 一区 | 看av网站 | 中日韩免费视频 | 国产露脸国语对白在线 | 中文字幕一区二区三区在线视频 | 99国产精品 | 二区中文字幕 | www.亚洲| 亚洲三区在线观看 | 国产成人综合一区 | 五月婷婷激情 | 国产农村妇女精品久久 | 日韩欧美一区二区中文字幕 | 国产日韩一区二区三区 | 爱色av.com| 国产电影一区二区三区 | 欧美国产日韩一区二区三区 | a在线看| 亚洲高清黄色 | 亚洲成人一区二区三区四区 | 九九综合| 亚洲第一成人在线视频 | 国产精品一二三区 | 精品成人一区二区 | 日韩中文字幕在线观看 | 一级特黄bbbbb免费观看 | 久久久久久亚洲 | 欧美精品一区二区三区在线四季 | 色婷婷综合网 |