1 servlet 和 filter 的異同 1.1 相同點 filter完全可以代替servlet使用,但是filter中的某些功能servlet不能實現,而servlet的所有功能filter都能實現 1.2 不同點 1.2.1 概念上 servlet 是運行在伺服器端的程式,動態生成web頁面 ...
1 servlet 和 filter 的異同
1.1 相同點
filter完全可以代替servlet使用,但是filter中的某些功能servlet不能實現,而servlet的所有功能filter都能實現
1.2 不同點
1.2.1 概念上
servlet 是運行在伺服器端的程式,動態生成web頁面
filter 是一段可以復用的代碼,不能生成請求和響應,但是可以對相應和請求做相應的處理
1.2.2 生命周期上
servlet 是在web伺服器啟動或web伺服器接收到第一次請求時利用構造器實例化servlet,然後調用init方法進行初始化,之後的每次請求會調用doGet或者doPost方法進行處理;當關閉伺服器的時候,調用destroy方法銷毀實例
filter 是在web伺服器啟動時利用構造器實例化filter,然後調用init方法進行初始化,之後的每次請求調用doFilter方法進行處理,關閉伺服器的時候,調用destroy方法銷毀實例
1.2.3 類型不同
servlet是類、filter是介面
1.3 servlet 、filter的編程實現
1 package cn.xiangxu; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 /** 12 * Servlet implementation class DemoServlet 13 */ 14 public class DemoServlet extends HttpServlet { 15 private static final long serialVersionUID = 1L; 16 17 /** 18 * @see HttpServlet#HttpServlet() 19 */ 20 public DemoServlet() { 21 super(); 22 System.out.println("01 利用構造器實例化"); 23 } 24 25 @Override 26 public void init() throws ServletException { 27 super.init(); 28 System.out.println("02 利用init方法初始化"); 29 } 30 31 /** 32 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 33 */ 34 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 System.out.println("03 調用處理方法"); 36 37 response.setContentType("text/html;charset:utf-8"); // 設置消息頭部分信息 38 response.setCharacterEncoding("utf-8"); 39 40 PrintWriter out = response.getWriter(); 41 out.println("hello servlet"); 42 out.close(); 43 } 44 45 @Override 46 public void destroy() { 47 super.destroy(); 48 System.out.println("04 利用destroy方法銷毀"); 49 } 50 51 /** 52 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 53 */ 54 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 55 // TODO Auto-generated method stub 56 doGet(request, response); 57 } 58 59 }DemoServlet
1 package cn.xiangxu; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.Filter; 7 import javax.servlet.FilterChain; 8 import javax.servlet.FilterConfig; 9 import javax.servlet.ServletException; 10 import javax.servlet.ServletRequest; 11 import javax.servlet.ServletResponse; 12 import javax.servlet.http.HttpServletResponse; 13 14 /** 15 * Servlet Filter implementation class DemoFilter 16 */ 17 public class DemoFilter implements Filter { 18 19 /** 20 * Default constructor. 21 */ 22 public DemoFilter() { 23 System.out.println("01 利用構造器實例化"); 24 } 25 26 /** 27 * @see Filter#init(FilterConfig) 28 */ 29 public void init(FilterConfig fConfig) throws ServletException { 30 System.out.println("02 利用init方法初始化"); 31 } 32 33 /** 34 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 35 */ 36 public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException { 37 System.out.println("03 調用處理方法"); 38 39 HttpServletResponse response = (HttpServletResponse)resp; 40 41 response.setContentType("text/html;charset:utf-8"); 42 response.setCharacterEncoding("utf-8"); 43 44 PrintWriter out = response.getWriter(); 45 out.println("hello filter"); 46 out.close(); 47 } 48 49 /** 50 * @see Filter#destroy() 51 */ 52 public void destroy() { 53 System.out.println("04 利用destroy方法銷毀"); 54 } 55 56 }DemoFilter
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 3 <display-name>servletVsFilter</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <servlet> 13 <servlet-name>servlet</servlet-name> 14 <servlet-class>cn.xiangxu.DemoServlet</servlet-class> 15 </servlet> 16 <servlet-mapping> 17 <servlet-name>servlet</servlet-name> 18 <url-pattern>/servlet.do</url-pattern> 19 </servlet-mapping> 20 21 <filter> 22 <filter-name>filter</filter-name> 23 <filter-class>cn.xiangxu.DemoFilter</filter-class> 24 </filter> 25 <filter-mapping> 26 <filter-name>filter</filter-name> 27 <url-pattern>/filter.do</url-pattern> 28 </filter-mapping> 29 </web-app>web.xml
項目結構圖
servlet效果圖
filter效果圖
2 為什麼對記憶體中的字元進行編碼
字元在伺服器記憶體中是16位的char,網路傳輸的單位是8為的byte,我們必須對數據進行拆分才能夠進行傳輸,拆分的過程我們叫做編碼
3 描述一下GBK和UTF-8的特點
utf-8是國際化的最優編碼方案,包括了所有的字元,中文占3位元組
gbk是本土化的最優編碼方案,包含的字元較少,中文占2位元組
4 struts2 和 spring 整合
4.1 為什麼要進行整合
使用spring框架管理組件,實現註入,簡化代碼
4.2 怎麼整合
導包(struts2 - spring - plugin)
配置文件(web.xml spring-struts.xml)
struts.xml配置文件
5 利用 struts + spring 實現 hello world 案例
5.1 導包
struts2核心包、struts和spring的整合插件包
5.2 配置web.xml
5.2.1 配置spring監聽
所需類的位置
5.2.2 配置Spring配置文件的位置
配置文件所處位置
5.2.3 配置主控制器和過濾條件
所需類的位置