java_web學習(四) 二維表的制作(初步接觸MVC)


我們需要做一個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(控制器)處理輸入(寫入數據庫記錄)。
    MVC 模式同時提供了對 HTML、CSS 和 JavaScript 的完全控制。
    Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。
  通常模型對象負責在數據庫中存取數據。
    View(視圖)是應用程序中處理數據顯示的部分。
  通常視圖是依據模型數據創建的。
    Controller(控制器)是應用程序中處理用戶交互的部分。
  通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
    MVC 分層有助於管理復雜的應用程序,因為您可以在一個時間內專門關注一個方面。例如,您可以在不依賴業務邏輯的情況下專注於視圖設計。同時也讓應用程序的測試更加容易。
    MVC 分層同時也簡化了分組開發。不同的開發人員可同時開發視圖、控制器邏輯和業務邏輯。

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>

 

 

                     

                      

                            

                 

              

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM