springmvc-Model和ModelAndView的区别 springmvc-Model和ModelAndView的区...
springMVC Model ModelMap \u548c ModelAndView\u7684\u533a\u522b\u7b80\u5355\u6765\u8bf4\uff1a
ModelMap \uff1a\u5b9e\u73b0\u4e86Map\u63a5\u53e3\uff0c\u5305\u542bMap\u65b9\u6cd5\u3002\u89c6\u56fe\u5c42\u901a\u8fc7request\u627e\u5230ModelMap\u4e2d\u7684\u6570\u636e\u3002
ModelAndView\uff1a\u662f\u5305\u542bModelMap \u548c\u89c6\u56fe\u5bf9\u8c61\u7684\u5bb9\u5668\u3002\u6b63\u5982\u540d\u5b57\u6697\u793a\u7684\u4e00\u6837\u65e2\u5305\u542b\u6a21\u578b\u4e5f\u5305\u542b\u89c6\u56fe\uff0c\u800cModelMap\u53ea\u662f\u5305\u542b\u6a21\u578b\u7684\u4fe1\u606f\u3002
ModelAndView\u7684\u4f8b\u5b50\uff0c\u53f0\u540e
public class CarListController implements Controller { public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { CarManager carManager = new CarManager(); ModelAndView modelAndView = new ModelAndView("carList"); modelAndView.addObject("carList", carManager.getCarList()); return modelAndView; } }ModelAndView\u7684\u4f8b\u5b50\uff0c\u524d\u53f0view
Car List ${car.brand.name} ${car.model}: ${car.price}
ModelMap\u7684\u4f8b\u5b50\uff1a
public String testMethod(String someparam,ModelMap model) { //\u7701\u7565\u65b9\u6cd5\u5904\u7406\u903b\u8f91\u82e5\u5e72 //\u5c06\u6570\u636e\u653e\u7f6e\u5230ModelMap\u5bf9\u8c61model\u4e2d,\u7b2c\u4e8c\u4e2a\u53c2\u6570\u53ef\u4ee5\u662f\u4efb\u4f55java\u7c7b\u578b model.addAttribute("key",someparam); ...... //\u8fd4\u56de\u8df3\u8f6c\u5730\u5740 return "test/test"; }\u6216\u8005\u76f4\u63a5\u4f7f\u7528\u63a5\u53e3\uff1a
public String toProvinceView(Model model, HttpSession session) { model.addAttribute("colModel", colModel); model.addAttribute("colNames", colNames); model.addAttribute("buttonName", buttonName); return "statistic/StatisticChart"; }
\u95ee\u9898\u5f88\u7b80\u5355\uff0c\u53ea\u8981\u7528\u8fc7\u5c31\u5f88\u5f88\u660e\u767d\u4e86\uff0c\u6ca1\u7528\u8fc7\u7684\u8bdd\uff0c\u53ea\u80fd\u7b80\u8ff0\u4e00\u4e0b\u3002
1\u3001ssh\u4e2d\u7684spring\u5145\u5f53\u7684\u662fMVC\u4e2d\u7684Model\u7684\u804c\u80fd\uff0c\u4ed6\u4e5f\u53ef\u4ee5\u96c6\u6210hibernate\u7b49\uff0c\u4f46\u5b83\u4e0d\u63d0\u4f9bhibernate\u7684\u529f\u80fd\uff0c\u4ec5\u4e3a\u96c6\u6210\u3002
2\u3001Spring MVC\u662fMVC\u67b6\u6784\u7684\u6574\u4f53\u5b9e\u73b0\uff0c\u5305\u62ec\u4e86MVC\u4e09\u9879\u6846\u67b6\uff0c\u6709\u4e86\u5b83\u4f60\u5c31\u4e0d\u9700\u8981\u518d\u53bb\u96c6\u6210struts\u548chibernate\u4e86\uff0c\u90fd\u662f\u7531\u5b83\u81ea\u5df1\u63d0\u4f9b\u3002
\u4e0d\u77e5\u6e05\u695a\u5426\u3002
用过springMvc的小伙伴都知道,一般而言我们返回页面视图的时候会有两种可能,就是本文题目中的两个类。其实本文就是想要对比一下这两个类在spring的视图解析中的作用以及区别。
区别
就我个人而言,我自己觉得这两者之间是没有什么区别的?实际上,这两者之间有着很大的区别,具体就表现在Model只是用来传输数据的,并不会进行业务的寻址。但是,ModelAndView却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似jsp的文件。当然,两者还有一个最大的区别,那就是Model是每一次请求都必须会带着的,但是ModelAndView是需要我们自己去新建的。
代码示例
首先是Model传递数据。
@Controller
public class FreemarkerController {
@SuppressWarnings("unchecked")
@RequestMapping(method = RequestMethod.POST, value = "/freemarker")
public String getFtl(Model model) {
// 构造填充数据的Map
Map map = new HashMap();
List<TestVo> testVos = new ArrayList<>();
TestVo testVo = new TestVo();
testVo.setName("fulei");
TestVo testVo1 = new TestVo();
testVo1.setName("wangmeng");
testVos.add(testVo);
testVos.add(testVo1);
map.put("user", "love");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
map.put("testVos", testVos);
model.addAllAttributes(map);
return "test";
}
}
其次就是ModelAndView。
@RequestMapping(method = RequestMethod.POST, value = "/freemarker")
public ModelAndView getFtlByModelAndView() {
ModelAndView modelAndView = new ModelAndView();
// 构造填充数据的Map
Map map = new HashMap();
List<TestVo> testVos = new ArrayList<>();
TestVo testVo = new TestVo();
testVo.setName("fulei");
TestVo testVo1 = new TestVo();
testVo1.setName("wangmeng");
testVos.add(testVo);
testVos.add(testVo1);
map.put("user", "love");
map.put("url", "http://www.baidu.com/");
map.put("name", "百度");
map.put("testVos", testVos);
modelAndView.addAllObjects(map);
return modelAndView;
}
从上面我们可以看得出来这两个之间还是有一定的区别的,当然具体的区别也就如我上面所描述的那样了。
总结
这篇博文主要是讨论下这个看似不会有坑的地方的一些小问题,算是对今天做的东西的一个总结吧。有时间的话,再详细得谈谈在这边遇到的问题。
绛旓細7銆佸鐞嗗櫒閫傞厤鍣ㄥ悜鍓嶇鎺у埗鍣ㄨ繑鍥濵odelAndView 锛圡odelAndView 鏄SpringMvc鐨勫簳灞傚璞 鍖呮嫭model鍜寁iew锛8銆佸墠绔帶鍒跺櫒璇锋眰瑙嗗浘瑙f瀽鍣ㄥ幓瑙f瀽瑙嗗浘 鏍规嵁閫昏緫瑙嗗浘鍚嶈В鏋愭垚鐪熸鐨勮鍥撅紙jsp锛9銆佽鍥捐В鏋愬櫒鍚戝墠绔帶鍒跺櫒杩斿洖view 10銆佸墠绔帶鍒跺櫒杩涜瑙嗗浘娓叉煋 瑙嗗浘娓叉煋灏嗘ā鍨嬫暟鎹紙妯″瀷鏁版嵁鍦∕odelAndView瀵硅薄涓級濉厖鍒...
绛旓細2.Map 鍙 Model: 鍏ュ弬涓簅rg.springframework.ui.Model銆乷rg.springframework.ui.ModelMap 鎴 java.uti.Map 鏃,澶勭悊鏂规硶杩斿洖鏃,Map涓殑鏁版嵁浼氳嚜鍔ㄦ坊鍔犲埌妯″瀷涓Spring MVC 鍦ㄥ唴閮ㄤ娇鐢ㄤ簡涓涓猳rg.springframework.ui.Model 鎺ュ彛瀛樺偍妯″瀷鏁版嵁 鍚庡彴锛歊equestMapping("/testMap")public String testMap(Map<...
绛旓細Spring MVC灞炰簬SpringFrameWork鐨勫悗缁骇鍝侊紝宸茬粡铻嶅悎鍦⊿pring Web Flow閲岄潰銆係pring 妗嗘灦鎻愪緵浜嗘瀯寤 Web 搴旂敤绋嬪簭鐨勫叏鍔熻兘 MVC 妯″潡銆SpringMVC鏄竴绉峸eb灞傜殑mvc妗嗘灦锛岀敤浜庢浛浠ervlet锛堝鐞嗗搷搴旇姹傦紝鑾峰彇琛ㄥ崟鍙傛暟锛岃〃鍗曢獙璇佺瓑锛夈侻VC鍗Model-View-Controller锛屽皢搴旂敤鎸夌収Model锛堟ā鍨嬶級銆乂iew锛堣鍥撅級銆丆ontroller...
绛旓細浣犲彲浠ヨ繖鏍风敤锛屼簨瀹炰笂model鏁版嵁锛屾渶缁spring涔熸槸鍐欏埌HttpServletRequest灞炴т腑锛屽彧鏄敤model鏇寸鍚mvc璁捐,鍑忓皯鍚勫眰闂磋﹀悎銆
绛旓細濡傛灉浣犺偗鎺ュ彈MVC锛屽苟涓旀湁鑳藉姏搴斾粯瀹冩墍甯︽潵鐨勯澶栫殑宸ヤ綔鍜屽鏉傛э紝MVC灏嗕細浣夸綘鐨勮蒋浠跺湪鍋ュ.鎬э紝浠g爜閲嶇敤鍜岀粨鏋勬柟闈笂涓涓柊鐨勫彴闃躲侸ava寮鍙慦eb Application鏈夊嚑绉嶇鍚圡VC璁捐妯″紡鐨勫紑鍙戞柟寮忋1:Jsp+Servlet+JavaBean(EJB)2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)3:TDK(Turbine锛孷elocity...)4:...
绛旓細MVC鍏ㄥ悕鏄Model View Controller锛屾槸妯″瀷(model)锛嶈鍥(view)锛嶆帶鍒跺櫒(controller)鐨勭缉鍐欙紝涓绉嶈蒋浠惰璁℃ā寮忥紝鐢ㄤ笟鍔¢昏緫銆佹暟鎹佺晫闈㈡樉绀哄垎绂荤殑鏂规硶缁勭粐浠g爜锛屽皢涓氬姟閫昏緫鑱氶泦鍒颁竴涓儴浠堕噷闈紝鍦ㄦ敼杩涘拰涓у寲瀹氬埗鐣岄潰鍙婄敤鎴蜂氦浜掔殑鍚屾椂锛屼笉闇瑕侀噸鏂扮紪鍐欎笟鍔¢昏緫銆傝Spring MVC鏄竴涓狹VC妗嗘灦銆係pring MVC鏄熀浜...
绛旓細鍦Spring MVC涓紝鎺ュ彈璇锋眰骞跺鐞嗙粨鏋滅殑缁勪欢鏄疌ontroller銆侰ontroller鏄礋璐e鐞嗙敤鎴疯姹傚苟杩斿洖鍝嶅簲鐨勭粍浠讹紝瀹冧笌瑙嗗浘锛圴iew锛夊拰妯″瀷锛Model锛変竴璧锋瀯鎴愪簡MVC锛圡odel-View-Controller锛夎璁℃ā寮忋傚湪Spring MVC涓紝Controller閫氬父缁ф壙鑷猄pring MVC涓殑Controller鎺ュ彛锛屾垨鑰呭疄鐜颁竴涓狢ontroller鎺ュ彛銆侰ontroller鎺ュ彛涓畾涔変簡...
绛旓細ModelAndView鐨刟ddObject浼氬悜鍏Model涓姞鍏ュ睘鎬с侻odelAttribute鏄SpringMVC鐨勪竴涓敞瑙o紝鍏蜂綋浣滅敤濡備笅锛氣憼缁戝畾璇锋眰鍙傛暟鍒板懡浠ゅ璞★細鏀惧湪鍔熻兘澶勭悊鏂规硶鐨勫叆鍙備笂鏃讹紝鐢ㄤ簬灏嗗涓姹傚弬鏁扮粦瀹氬埌涓涓懡浠ゅ璞★紝浠庤岀畝鍖栫粦瀹氭祦绋嬶紝鑰屼笖鑷姩鏆撮湶涓烘ā鍨嬫暟鎹敤浜庤鍥鹃〉闈㈠睍绀烘椂浣跨敤锛涒憽鏆撮湶琛ㄥ崟寮曠敤瀵硅薄涓烘ā鍨嬫暟鎹細鏀惧湪澶勭悊鍣ㄧ殑...
绛旓細spring鏄鏋讹紝mvc鏄竴绉嶈璁℃ā寮忋傦紝M浠h〃model锛沄浠h〃View锛汣浠h〃controller浠庡瓧闈㈡剰鎬濅綘涔熷彲浠ョ湅鍑烘潵M鏄寚妯″瀷涓鑸寚DAO鍜宻ervice 锛泇iew浠h〃鏄剧ず涓鑸寚椤甸潰eg锛歫sp锛宧tml ftl绛塩鍊煎緱鏄帶鍒跺櫒锛屾瘮濡俿truts鍜springMVC 涓殑action涓巆ontroller 鑰宻pringMVC涓ユ牸鎰忎箟涓婃寚鐨勬槸鍓嶇鎺у埗鍣紝灏辨槸姣忔瀹㈡埛绔笌鏈嶅姟...
绛旓細springmvc甯哥敤娉ㄨВ鏍囩璇﹁В 1銆丂Controller 鍦SpringMVC 涓紝鎺у埗鍣–ontroller 璐熻矗澶勭悊鐢盌ispatcherServlet 鍒嗗彂鐨勮姹傦紝瀹冩妸鐢ㄦ埛璇锋眰鐨勬暟鎹粡杩囦笟鍔″鐞嗗眰澶勭悊涔嬪悗灏佽鎴愪竴涓Model 锛岀劧鍚庡啀鎶婅Model 杩斿洖缁欏搴旂殑View 杩涜灞曠ず銆傚湪SpringMVC 涓彁渚涗簡涓涓潪甯哥畝渚跨殑瀹氫箟Controller 鐨勬柟娉曪紝浣犳棤闇缁ф壙鐗瑰畾鐨勭被...