我們需要做一個jsp頁面,動態顯示信息表的內容。
一.需求分析
1、 做一個實體類:StudentInfo (包含4個字段)
2、 如圖模擬生成3條數據,本質上就是new StudentInfo 3個實例,每個實例代表一行記錄(后面這3條記錄放到數據庫,本例暫時不處理)
3、 處理這3條數據的過程,不用考慮界面(采用java代碼與jsp UI頁面分離)編寫一個類和方法,處理數據問題,返回值為List<StudentInfo>
把3條數據(StudentInfo)也就是3個StudentInfo的實例,把它們添加到List中換句話說,就是這個List就是代表這個數據集合。
注意:
a、 此類為業務類(處理業務邏輯的類),要養成習慣:先寫接口
b、 調用者使用此類時,應該不不關心誰是實現類,只關心接口以及其API
4、 把整個List,丟給jsp用於顯示數據,呈現出一個表格的狀態。
二.具體操作流程
1、先寫實體類
a.建包(entity)
b.建立1個實體類:StudnetInfo.java
c.對實體例,添加私有的屬性,屬性應該跟二維表的字段一一對應
id,name,classes,place
具體代碼如下:
1 package entity; 2 3 public class StudentInfo { 4 private String id; 5 private String name; 6 private String classes; 7 private String place; 8 9 public String getId() { 10 return id; 11 } 12 public void setId(String id) { 13 this.id = id; 14 } 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 public String getClasses() { 22 return classes; 23 } 24 public void setClasses(String classes) { 25 this.classes = classes; 26 } 27 public String getPlace() { 28 return place; 29 } 30 public void setPlace(String place) { 31 this.place = place; 32 } 33 34 }
2.建立一個業務邏輯的接口以及實現類
a.先建包service
b.建立接口StudentService.java與實現類StudentServiceImpl.java
接口StudentService.java中的代碼
1 package service; 2 3 import java.util.List; 4 5 import entity.StudentInfo; 6 7 public interface StudentService { 8 9 //有多少個業務邏輯,就設計多少個方法 10 public List<StudentInfo> getAllStudents(); 11 12 }
實現類StudentServiceImpl.java中的代碼
1 package service; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import entity.StudentInfo; 7 8 public class StudentServiceImpl implements StudentService { 9 10 @Override 11 public List<StudentInfo> getAllStudents() { 12 //存放所有學生信息的數據集合 13 List<StudentInfo> stuList = new ArrayList<StudentInfo>(); 14 15 //模擬從數據庫取出3條學生信息 16 StudentInfo si1 = new StudentInfo(); 17 StudentInfo si2 = new StudentInfo(); 18 StudentInfo si3 = new StudentInfo(); 19 si1.setId("1"); 20 si1.setName("張三"); 21 si2.setName("李四"); 22 si3.setName("王五"); 23 24 //把3個學生存放到List集合中去 25 stuList.add(si1); 26 stuList.add(si2); 27 stuList.add(si3); 28 29 return stuList; 30 } 31 32 33 34 }
3.創建一個jsp頁面,調用service獲取數據集List
a.新建jsp頁面
show.jsp具體代碼如下
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="service.StudentService,service.StudentServiceImpl,entity.StudentInfo,java.util.List"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <table width="70%" border="0" cellspacing="1" cellpadding="1" align="center" bgcolor="#000099"> 12 <tr bgcolor="#FFFFFF"> 13 14 <td>編號</td> 15 <td>名字</td> 16 <td>班級</td> 17 <td>籍貫</td> 18 </tr> 19 <% 20 StudentService stuService = new StudentServiceImpl(); 21 List<StudentInfo> stuList = stuService.getAllStudents(); 22 for(StudentInfo student:stuList){ 23 %> 24 <tr bgcolor="#FFFFFF"> 25 <td><%=student.getId()%></td> 26 <td><%=student.getName()%></td> 27 <td><%=student.getClasses()%></td> 28 <td><%=student.getPlace()%></td> 29 </tr> 30 <% 31 } 32 %> 33 </table> 34 </body> 35 </html>
三.過程圖解
四.運行結果
五.運用MVC框架優化項目結構層次
5.1什么是MVC
MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設計創建 Web 應用程序的模式:
-
Model(模型)表示應用程序核心(比如數據庫記錄列表)。
-
View(視圖)顯示數據(數據庫記錄)。
-
Controller(控制器)處理輸入(寫入數據庫記錄)。
通常模型對象負責在數據庫中存取數據。
通常視圖是依據模型數據創建的。
通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
5.2從全局分析我們之前的代碼,如圖
我們缺少2點:。
此模式有問題:
1、 show.jsp需要呼叫javabean
2.沒有去訪問數據庫
3.沒有Controller(控制器)
StudentService stuService = new StudentServiceImpl();
List<StudentInfo> stuList = stuService.getAllStudents();
我們期待是把這2行代碼去掉,讓jsp頁面更簡潔
5.3在全局中加入控制器
初步應用了MVC模式
5.4 在代碼中實現,過程如下
servlet的使用:
1、 建立action包
2、 建立Servlet
3.
4.
5.
6.
7.
5.4另外的一種寫法
5.4.1 Servlet內容
創建一個(Servlet)控制器,調用service獲取數據集List,【把結果輸送到jsp,並跳轉過去】在action包中新建Servlet: HouseAction_showAllHouses
5.4.2
建立一個show.jsp,取得request對象中的List
核心代碼:request.getAttribute("houseList_label");
剩下參考war包中的代碼,跟之前的例子也是一樣的.
show.jsp代碼
1 <body> 2 <% 3 List<House> houseList = (List)request.getAttribute("houseList_label"); 4 %> 5 接力Servlet,讓我JSP繼續運行<br> 6 7 <table width="70%" border="0" cellspacing="1" cellpadding="1" align="center" bgcolor="#000099"> 8 <tr bgcolor="#FFFFFF"> 9 10 <td>編號</td> 11 <td>名字</td> 12 <td>地址</td> 13 </tr> 14 <% 15 for(House house:houseList){ 16 %> 17 <tr bgcolor="#FFFFFF"> 18 <td><%=house.getId()%></td> 19 <td><%=house.getName()%></td> 20 <td><%=house.getAddress()%></td> 21 </tr> 22 <% 23 } 24 %> 25 </table> 26 </body>