前言:
今天將簡單的模擬 MVC模式 對Servlet控制器運行
若有不好或不對的地方,歡迎各位大神進行指導!
1.MVC模式(圖)
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫
2.建包
3.建實體類
3.1可以先立一個二維表做參考作用
考慮各個字段名字、類型
3.2實體類
代碼:
package entity; public class House { //編號 private String id; //房子名字 private String name; //地址 private String address; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
4.建業務邏輯類
4.1命名業務邏輯接口
代碼:
package service; import java.util.List; import entity.House; public interface HouseService { public List<House> getAllHouses(); }
4.2實現類
代碼:
package service; import java.util.ArrayList; import java.util.List; import entity.House; public class HouseServiceImpl implements HouseService { @Override public List<House> getAllHouses() { List<House> houseList = new ArrayList<House>(); //1 光頭強的家 森林188號 //2 熊大的家 森林樹洞一期3樓 House h1 = new House(); House h2 = new House(); h1.setId("1"); h1.setName("光頭強的家"); h1.setAddress("森林188號"); h2.setId("2"); h2.setName("熊大的家"); h2.setAddress("森林樹洞一期3樓"); houseList.add(h1); houseList.add(h2); return houseList; } }
5.創建一個(Servlet)控制器
在action包中新建Servlet: HouseAction_showAllHouses。
調用service獲取數據集List
代碼:
package action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import entity.House; import service.HouseService; import service.HouseServiceImpl; import java.util.List; @WebServlet("/HouseAction_showAllHouses") public class HouseAction_showAllHouses extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HouseService houseService = new HouseServiceImpl(); List<House> houseList = houseService.getAllHouses();
//用於設置標記,在jsp頁面可以獲取(List)request.getAttribute(); request.setAttribute("houseList_label", houseList); //請求並不會中斷,而且繼續在服務端接力運行 //並不是發出一個新的請求 //所以對於客戶端的地址欄,是不會發生變化 request.getRequestDispatcher("show.jsp").forward(request,response); //通知客戶端:你發出一個新的請求:show.jsp //response.sendRedirect("show.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
request.getRequestDispatcher().forward(request.response);
這個語句意思是將客戶端的請求轉向(forward)到getRequestDispatcher()方法中參數定義的頁面或者鏈接。
說通俗點就是,當一個客戶端的請求到這個頁面后,不做處理或者不處理完,將請求轉給另一個頁面處理,然后再響應給客戶端。
6.建jsp頁面
建立一個show.jsp,取得request對象中的List。
核心代碼:request.getAttribute("houseList_label");
代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <%@ page import="entity.House" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //獲得Servlet標記的“houseList_label” List<House> houseList = (List)request.getAttribute("houseList_label"); %> 行<br> <table width="70%" border="0" cellspacing="1" cellpadding="1" align="center" bgcolor="#000099"> <tr bgcolor="#FFFFFF"> <td>編號</td> <td>名字</td> <td>地址</td> </tr> <% for(House house:houseList){ %> <tr bgcolor="#FFFFFF"> <td><%=house.getId()%></td> <td><%=house.getName()%></td> <td><%=house.getAddress()%></td> </tr> <% } %> </table> </body> </html>
7.在瀏覽器(客戶端)中查看
地址: