Struts2框架04

来源:http://www.cnblogs.com/NeverCtrl-C/archive/2017/07/08/7138694.html
-Advertisement-
Play Games

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 配置主控制器和過濾條件

      

      所需類的位置

        

 

 

 

 

 

 

 

 

 

 

 

 

 

    

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上周 @萍姐 問我如何抓取天貓上麵店鋪的評分,看了下挺簡單的,於是花了點時間寫了個Python腳本,加上web.py做成一個web服務,使用起來還不錯,今天來看的時候發現當時為了方便直接用web.py開發有點簡陋,自己也好久沒用flask寫過東西了,打算用flask再寫一遍,順便複習下舊的知識,如果... ...
  • 近日,自己開始著手從事SDN研發,相關的知識有一大堆,諸如OpenFlow等,不得不說網路的基礎知識是必備的,但是對於新手來說要從茫茫大海一般的知識點中找準方向的確有點困難,因此自己從網上收集了一些具有方嚮導向性的書籍供大家一起參考 ...
  • 簡介: requests是python的一個http客戶端庫,跟urlib、urlib2類似,requests模塊是基於urlib模塊開發的,代碼實現更為簡潔。 模塊安裝: pip install requests ,使用requests模塊時直接import requests即可。 簡單使用req ...
  • 上海地區部分公司JAVA面試題 衫德(衫德卡)公司筆試題 【註意事項】要求字跡工整,做題時間25分鐘。 【試題1】如果你對Linux有使用經驗,請列出至少5個Liinux命令,越多越好。 【試題2】請描述隊列Queue和棧Stack的區別,並分別描述至少一個使用場景,以及說明在JDK中對應已實現的A ...
  • 這周是我入職的第一周,入職第一天看到嘉興大佬的項目代碼。視圖中有類方法,我感到很困惑。 聯想到之前北京融360的電話面試,問我有無寫過類方法……看來有必要瞭解下視圖的類方法,上網搜了很多,原來這就是所謂的“通用視圖”。 上班是大小周,這周剛好只上5天;所以早上睡得很晚。好像沒什麼時間詳細寫這方面的博 ...
  • package ssmy.page; /** * 分頁類 * @author Jesse * */public class PageBean { private int page;//第幾頁 private int pageSize;//每頁顯示的記錄數 private int start ;//起 ...
  • service層: @Override public void batchDeletes(List list) { creditDao.batchDeletes(list); } 控制層controller: @Override public void batchDeletes(List list) ...
  • 之前一直在做的一個GIS系統項目,採用了jsp+servlet框架,數據傳輸框架採用了apache的thrift框架,短時多傳的風格還不錯,但是較其他的java web項目顯得有點太臃腫了,現在給大家介紹一下最近剛剛研究的輕量級java web框架。 1.首先是創建maven項目 本人開發用的IDE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...