日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

java EE开发之Servlet第八课:MVC模式 (基本理解)

發(fā)布時間:2024/1/1 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java EE开发之Servlet第八课:MVC模式 (基本理解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

##1,為什么需要MVC模式?
為什么需要MVC模式,以前簡單的JSP頁面處理不好嗎?MVC有什么好處呢?
答:MVC就是常說的:

  • 模型(Model):POJO(Plain Old Java Object普通類)
  • 視圖(View):Jsp
  • 控制Controller):Servlet Filter

它把業(yè)務處理和Jsp頁面分開了。而以前的Jsp頁面是把所有的代碼都寫在Jsp 頁面中,那樣不利于維護,MVC模式的目的就是實現Web系統(tǒng)的職能分工。
####MVC模式的好處:
#####1.各施其職,互不干涉
   在MVC模式中,三個層各施其職,所以如果一旦哪一層的需求發(fā)生 了變化,就只需要更改相應的層中的代碼而不會影響到其它層中的
代碼。
#####2.有利于開發(fā)中的分工
在MVC模式中,由于按層把系統(tǒng)分開,那么就能更好的實現開發(fā)中
的分工。網頁設計人員可以進行開發(fā)視圖層中的JSP,對業(yè)務熟悉的開
發(fā)人員可開發(fā)業(yè)務層,而其它開發(fā)人員可開發(fā)控制層。
#####3.有利于組件的重用
分層后更有利于組件的重用。如控制層可獨立成一個能用的組件, 視圖層也可做成通用的操作界面。

##2.MVC的基本原理是怎樣的呢?
每個層之間的關系又是怎樣的,它們是怎樣執(zhí)行的?
答:基本原理是:

每一步代表的意思是:
#####1,jsp頁面,通過請求到配置文件中然后到Struts2Filter
#####2,a,在Struts2Filter中 通過頁面的請求Action=“XXX.action”

//獲得要請求的路徑 打印uri的結果是 :/MVCTest1/reg.action String uri=request.getRequestURI(); //獲得請求的文件名:打印requstname 的結果是:reg.action String reqeustname=uri.substring(uri.indexOf("/",1)+1); //通過要請求的文件名到屬性文件中去找相對應的類的名稱 String classname= ps.getProperty(reqeustname);

#####3,返回一個相對應的類的名稱

//去CLASS類中找類名為 classname的類 Class c=Class.forName(classname); //找到后再調Class類的構造方法 Object obj=c.newInstance(); //因為obj是實現了Action接口的,所以 Action action=(Action)obj;

#####4,找到類后再去調類中的方法,

//然后再調Action中的execute方法 返回一個String字符串 String result = action.execute(request, response); action.execute(request, response);//主要是用來調用Dao層的方法的

#####**5,因為類都實現了Action的接口,所以再第三步中可以中接口來作為類型 **

//接口是一個業(yè)務員要工作的一組規(guī)范 //參數是:請求對象 和響應對象 //返回是:String 最終頁面跳轉的路徑 public String execute(HttpServletRequest request,HttpServletResponse response)throws Exception;

#####6,因為方法的返回類型是 String對象,這個字符串代表的就是最終跳轉的和頁面,但是有一個問題,就是跳轉的方式有重定向和轉發(fā)這里,我們不做判斷,默認就用轉發(fā)

//重定向:通過request.getContextPath()得到上下文路response.sendRedirect(request.getContextPath()+"/"+path);//轉發(fā) request.getRequestDispatcher("/"+path).forward(request, response);

##3.具體實現
(1)開發(fā)一個Struts2Filter(公司),要求能夠接收所有的.action請求。(即配置web.xml文件達到要求)

public class Struts2Filter implements Filter{public void destroy() {}........public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {}}

(2)開發(fā)一個業(yè)務員的接口Action接口,要求定義一個行為,即execute方法,傳入請求與響應對象,返回一個結果頁面的jsp文件名。

public class MaleAction implements Action {public String execute(HttpServletRequest request,HttpServletResponse response) {String uname = request.getParameter("uname");request.setAttribute("uname", uname);System.out.println(uname+"你好,劉教授為你看病...");return "maleOk.jsp";} }

(3)在WEB-INF目錄上加一個屬性文件,文件名:actionConfig.properties,此文件是一個注冊了請求的URI與業(yè)務員類的對應關系。

#資源文件 #男科 = 專家劉教授 #內科 = 主任孫教授male.do = com.kz.action.MaleAction #female.do = com.accp.action.FemaleAction query.do = com.kz.action.QueryAction del.do = com.kz.action.DelAction

(4)在Struts2Filter類的init方法中將屬性文件actionConfig.properties文件內容加載到一個屬性對象中。

public void init(FilterConfig filterConfig) throws ServletException {//讀取本地資源配置文件InputStream is =filterConfig.getServletContext().getResourceAsStream("/WEB-INF/config.properties");//把配置文件讀入到內存中ps = new Properties();try {ps.load(is);//關閉is.close();} catch (IOException e) {e.printStackTrace();}}

(5)在Struts2Filter的服務方法首先對所有的請求參數進行編碼。

//System.out.println("訪問到了ActionServlet"); HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response=(HttpServletResponse)res; request.setCharacterEncoding("utf-8");

(6)在Struts2Filter的服務方法中根據請求的URI得到對應的業(yè)務員對象。

//1.獲取客戶端收送的請求類型(具體的請求信息:male.action // female.action ....) // /mvc/male.action String uri = request.getRequestURI(); //巧用文件對象,獲取具體的male.action File file = new File(uri); String type = file.getName(); System.out.println(type);//2.根據請求類型,找到對應的負責處理請求的類 //發(fā)出的是一個看男科的請求,就需要找到對應的男科醫(yī)生 String className = ps.getProperty(type); if(className!=null){//根據具體的類名,獲取其Class類型的對象Class c = Class.forName(className);//根據 c對象,創(chuàng)建其具體的ActionAction action = (Action)c.newInstance(); }

(7)在Struts2Filter的服務方法中得到業(yè)務員對象后,調用業(yè)務員execute方法,開始工作,并接收業(yè)務員返回的結果頁面的jsp文件名,在Struts2Filter的服務方法中接收到業(yè)務員返回的結果頁面jsp名字后后,將頁面轉發(fā)或者是重定向到結果頁面去。

//調用action的執(zhí)行方法(看病的行為,會有一個結果返回) try{String url = action.execute(request,response);//根據結果,執(zhí)行頁面的跳轉(默認是轉發(fā))request.getRequestDispatcher(url).forward( request, response);//放行---在最后放行if(url==null){chain.doFilter(request, response);}else{return ;}

遺留問題:不能確定設置重定向或者轉發(fā)?


超全面的測試IT技術課程,0元立即加入學習!有需要的朋友戳:

騰訊課堂測試技術學習地址

總結

以上是生活随笔為你收集整理的java EE开发之Servlet第八课:MVC模式 (基本理解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。