Java MVC三層架構在各框架中的特征
整理源生的jsp+servlet框架、struts1、struts2、springMVC這幾個框架,激動之中未免有些不足,在這些框架里面要想從整體的角度考慮,就必須把客戶端到服務器端所有的東西理清晰。
1.基于web開發中最原始的jsp+Servlet 圖形化理解jsp+servlet結構:
1.從結構上分析jsp+servlet圖解原理:
在基于mvc設計模式下的最原始的jsp+Servlet框架,在某種程度上是不能夠達到mvc最直觀的體現。當客戶端發送請求到服務器時,服務器會將從客戶端接收到的信息通過封裝技術進行解析,在交給web容器,web容器會通過一篇web.xml的配置文件去找與之相匹配的servlet,此時servlet會開啟一個線程,只要是符合web.xml中所配置的某一個servlet時,該servelt就會啟動,然后servlet在去調用service或者service的接口實現類,service(impl)在去調用dao(impl),dao通過從數據庫(Database)那獲取到數據,在封裝到model實體類中去。Servlet在完成這一系類的動作后,最終將為我們返回一個jsp頁面,最后該頁面在返回到客戶端展示給客戶。
2.從web.xml配置上:
<?xml version="1.0"?> <web-app> <servlet> <servlet-name>TextSerevlet</servlet-name> <servlet-class>com.lh.serivlet.UserSerivlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TextSerevlet</servlet-name> <url-pattern>/accessServlet</url-pattern> </servlet-mapping> </web-app>
注:需要用到的每一篇servlet都要寫入它的配置文件。Web.xml的配置量大,繁雜。從性能優異的角度考慮,它的運行性能是最快的,但是開發性能就很有難度。
3.控制器:
Jsp+servlet的控制器是:工程中的每一個xxxServlet就充當一個控制器,但是必須去extends HttpServlet,并重寫 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
4.作用域對象
ServletContext(上下文),也叫全局的作用域對象。
Session(會話)服務器的一次會話中或者服務器超時。
Request(請求)在一次請求的過程中。
Respones(響應)
5.數據綁定:沒有,只能通過數組去獲取頁面的數據。
6.類型轉換:將jsp頁面的數據轉換為String類型。也可以是基本數據類型。但是要進行強制轉換。
7.有效性驗證:可以在某一個需要用到Servlet的類中用java代碼進行驗證。也可以在jsp頁面書寫ajax代碼進行驗證或者是定義function()函數,在函數中用正則表達式加以判斷。
8.操作業務層對象調業務方法:在某一個XxxServlet中extends HttpServlet并重寫doPost()和doGet()方法,我們只需在doGet()或者doPost()中用request.getParameter()方法來得到頁面的數據。如果我們要操作到業務層我們只需在當前的這個類中實例化出業務層的類,即XxxService dao = new XxxServiceImpl();然后獲取實體Bean對象中的屬性。最后在我們需要用到數據訪問層的哪一個具體的業務實現方法就用實例化出的dao調用所需方法即可。
9.返回:可以返回對象,也可以返回具體要跳轉的哪個頁面。
10.在js頁面做顯示:EL表達式,JSP腳本表達式
11.標簽:HTML標簽,JSP自定義標記庫,JST L標準標記庫。
12.文件上傳:頁面需要怎樣獲取?<form action=”file” method=”post” enctype=”multipart/form-data”>
服務器怎么獲得?1.必須導入文件上傳的jar包。2.
13.過濾器:我們自己定義的一個類XxxFilter 必須implements Filter接口,并實現它的三個方法,destroy(),doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException ,init(FilterConfig arg0)。在doFilter()中調用chain.doFilter(request, response)方法,表示將請求交給下一個組件。
1.從結構上分析Struts1圖解原理:
客戶端發送請求到服務器,服務器將收到的信息傳給web容器,這時,web容器會通過到web.xml配置文件中去查找那篇符合命名規范的action屬性中的*.do,在交給ActionServlet(中央核心控制器),通過該配置,web容器將信息傳給具體的某一個XxxAction,該XxxAction會繼承Action,并重寫它的
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ........ }
方法,同時,我們可以在該XxxAction中去調用JavaBean中的實體對象。但是,需要注意的是,在ActionServlet到Action這一過程中,我們是通過Form組件技術來對jsp頁面的信息來進行了一次封裝,達到了前端頁面(jsp)和后臺的實體Bean對象之間的一次數據的綁定。最后再是到Struts-config.xml文件中進行進行配置,通過正確的配置找到所需的jsp.
2從web.xml配置上:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <!-- 主配置文件,param-name的值為config --> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-lx.xml,/WEB-INF/struts-zh.xml</param-value> </init-param> <!-- 子配置文件,param-name的值只能以config/開頭 <init-param> <param-name>config/m1</param-name> <param-value>/WEB-INF/struts-zh.xml</param-value> </init-param> --> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <filter> <filter-name>CharsetFilter</filter-name> <filter-class> com.lovo.struts.filter.CharsetFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>ignore</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharsetFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CharsetFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
注:從上面的配置中我們可以看出,servlet的配置是必不可少的。
3.控制器:ActionServlet是struts1的中央核心控制器,它在web.xml中配置成自動啟動的Servlet,在啟動時中央核心控制器會讀取配置文件(struts-config.xml)的配置信息,為struts中不同的模塊初始化相應的對象。
6.類型轉換:LoginForm loginF = (LoginForm)form;
7.有效性驗證:驗證框架,不能重寫Validate方法。也可以自定義驗證規則,但是必須做配置。
9.返回:Action將業務處理的不同結果返回一個目標響應對象給中央核心控制器,或者返回一個頁面mapping.findForward("success")
10.在js頁面做顯示:EL表達式,自定義標簽庫,直接在jsp頁面上寫java代碼。
11.標簽: