# JavaBean、MVC、Filter和Listener ## JavaBean JavaBean 是一種JAVA語言寫成的可重用組件。 實體類(pojo)。 JavaBean有特殊的寫法: - 必須要有一個無參構造 - 屬性必須私有 - 必須要對應的set/get方法 本質就是一個java類 ...
JavaBean、MVC、Filter和Listener
JavaBean
JavaBean 是一種JAVA語言寫成的可重用組件。
實體類(pojo)。
JavaBean有特殊的寫法:
- 必須要有一個無參構造
- 屬性必須私有
- 必須要對應的set/get方法
本質就是一個java類
一般用來和資料庫欄位做映射
ORM:對象關係映射
- 表--->類
- 欄位--->屬性
- 行記錄--->對象
package pojo;
public class People {
private int id;
private String name;
private int age;
private String address;
public People() {
}
public People(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
MVC三層架構
MVC:Model模型,View視圖,Controller控制器
MVC是一種架構模式,是一種軟體設計規範,是將業務邏輯、數據、顯示分離的方法來組織代碼。
- Model(模型):數據模型,提供要展示的數據,因此包含數據和行為,可以認為是領域模型或JavaBean組件(包含數據和行為),不過現在一般都分離開來:Value Object(數據Dao) 和 服務層(行為Service)。也就是該模型提供了模型數據查詢和模型數據的狀態更新等功能,包括數據和業務。
- View(視圖):負責進行模型的展示,一般就是我們見到的用戶界面,客戶想看到的東西。
- Controller(控制器):接收用戶請求,委托給模型進行處理(狀態改變),處理完畢後把返回的模型數據返回給視圖,由視圖負責展示。
MVC有多種。
最典型的MVC 就是 J S P + s e r v l e t + j a v a b e a n 的模式
早期架構:
用戶直接訪問控制層,控制層直接訪問資料庫
弊端:過於臃腫,不利於維護
經典的MVC三層架構:
Filter
Filter也稱之為過濾器,它是Servlet技術中最實用的技術,Web開發人員通過Filter技術,對web伺服器管理的所有web資源:例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的許可權訪問控制、過濾敏感辭彙、壓縮響應信息等一些高級功能。
用來過濾網站的數據。
Filter開發步驟:
- 導包。除了上面的依賴,如果需要連接mysql還要導入mysql依賴
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
-
編寫過濾器
註意:實現的Filter一定是servlet包的Filter public class MyFilter implements Filter{ // 初始化:伺服器啟動 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("已經初始化"); } // 動作 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 解決亂碼問題 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); System.out.println("過濾器執行前....."); chain.doFilter(request,response);//將參數傳給下一個過濾器,chain過濾器鏈 System.out.println("過濾器執行後....."); } // 銷毀:伺服器關閉 @Override public void destroy() { System.out.println("已經銷毀"); } }
-
在web.xml中配置過濾器
<filter> <filter-name>MyFilter</filter-name> <filter-class>Filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <!-- 只要是url :/hello的任何請求都會經過過濾器--> <url-pattern>/hello/*</url-pattern> </filter-mapping>
通過這樣的例子,因為filter 所以/hello路徑下的沒有亂碼,其他的中文依舊亂碼
Listener
-
實現一個監聽器的介面:有一堆監聽介面什麼滑鼠事件、鍵盤事件等等
public class MyFilter implements HttpSessionListener{ // session創建觸發 @Override public void sessionCreated(HttpSessionEvent se) { } // session銷毀觸發 @Override public void sessionDestroyed(HttpSessionEvent se) { } }
-
在web.xml中註冊:
<listener> <listener-class>servlet.MyFirstServlet</listener-class> </listener>