JavaWeb17-HTML篇筆記(一)
Listener :
- 監聽器就是一個JavaBean用來監聽其他Bean變化.
- 事件源:被監聽的對象.
- 監聽器:監聽的對象.
- 事件源與監聽器的綁定:
- 事件:事件源改變.通過事件對象獲得事件源對象.
- Servlet的監聽器:
- 事件源:三個域對象.ServletContext,HttpSession,ServletRequest
- 三類:
- 一類:監聽三個域對象的創建和銷毀的監聽器.
- 二類:監聽三個域對象的屬性變更監聽器.
- 三類:監聽HttpSession中的JavaBean的狀態的改變的監聽器.
Filter :
- 過濾器就是對從客服端發送到服務器的請求進行過濾的.
- FilterConfig:過濾器配置.
- 獲得初始化參數
- 獲得ServletContext
- 獲得過濾器的名稱
- FilterChain:過濾器鏈.
- 生命周期:服務器啟動的時候進行創建,服務器關閉的時候銷毀.
- 過濾器的配置:
- <url-pattern>的配置
- <servlet-name>的配置
- <dispatcher>的配置:
- REQUEST
- FORWARD
- INCLUDE
- ERROR
- 自動登錄:
- 網站亂碼的解決:
1.2 案例一:使用自定義註解完成@Test註解功能類似的效果:1.2.1 需求
使用Junit是單元測試的工具.在一個類中使用 @Test 對程序中的方法進行測試.
1.2.2 分析:1.2.2.1 技術分析:
? 【註解】
程序中有 註釋 和註解 - 註釋:給開發人員.
- 註解:給計算機看的.
註解使用:學習框架支持註解開發.
? 【JDK提供的註解】
@Override :描述方法的重寫.
@SuppressWarnings :壓制警告.
@Deprecated :標記過時.
? 自定義註解:定義一個類:class
定義一個借口:interface
定義一個枚舉:enum
定義一個註解:@interface
定義一個借口:interface
定義一個枚舉:enum
定義一個註解:@interface
@interface MyAnno1{
}
帶有屬性的註解:
@interface MyAnno2{
int a() default 1;
String b();
// 註解屬性的類型:基本數據類型,字符串類型String,Class,註解類型,枚舉類型,以及以上類型的一維數組.
// Date d();
Class clazz();
MyAnno3 m3(); // 註解
Color c(); // 枚舉
String[] arrs();
}
@MyAnno4("aaa") // 如果屬性名稱為value 那麽使用的時候 value可以省略(只出現這一個value的屬性情況下).
public class AnnotationDemo3 {
}
@interface MyAnno4{
String value();
int a() default 1;
}
1.2.2.2 步驟分析:
定義一個測試類
public class AnnotationDemo3 {@MyTest
br/>@MyTest
System.out.println("demo1執行了...");
}
@MyTest
public void demo2(){
System.out.println("demo2執行了...");
}
public void demo3(){
System.out.println("demo3執行了...");
}
}定義核心運行類:
在核心運行類中有一個主函數:
獲得測試類中的所有的方法.
獲得每個方法,查看方法上是否有@MyTest註解.
br/>定義核心運行類:
在核心運行類中有一個主函數:
獲得測試類中的所有的方法.
獲得每個方法,查看方法上是否有@MyTest註解.
1.2.3 代碼實現:
通過元註解定義註解存在的階段.
-
元註解也是一個註解:修飾註解的 註解.
自定義一個註解:
核心運行類:
public class CoreRunner {
public static void main(String[] args) {
// 反射:獲得類的字節碼對象.Class
Class clazz = AnnotationDemo3.class;
// 獲得測試類中的所有的方法:
Method[] methods = clazz.getMethods();
// 遍歷數組:
for (Method method : methods) {
// System.out.println(method.getName());
// 判斷方法上是否有@MyTest註解:
boolean flag = method.isAnnotationPresent(MyTest.class);
// System.out.println(method.getName()+" "+flag);
if(flag){
// 讓這個方法執行:
try {
method.invoke(clazz.newInstance(), null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
1.2.4 總結:
使用註解完成JDBC工具類的編寫:(了解)
public class JDBCUtils {
private static String driverClass;
private static String url;
private static String username;
private static String password;@JDBCInfo public static Connection getConnection() throws Exception{ // 反射: Class clazz = JDBCUtils.class; Method method = clazz.getMethod("getConnection", null); // 獲得方法上的註解: JDBCInfo jdbcInfo = method.getAnnotation(JDBCInfo.class); driverClass = jdbcInfo.driverClass(); url = jdbcInfo.url(); username = jdbcInfo.username(); password = jdbcInfo.password(); Class.forName(driverClass); Connection conn = DriverManager.getConnection(url, username, password); return conn; }
}
JavaWeb17-HTML篇筆記(一)