學習過的mvc框架:Struts2前端
springMVC就是相似於Struts2的mvc框架,屬於SpringFrameWork的後續產品。web
SpringMVC與Struts2區別spring |
|||
對比項目數據庫 |
SrpingMVCapache |
Struts2json |
優點瀏覽器 |
國內市場狀況spring-mvc |
有大量用戶,通常新項目啓動都會選用springmvctomcat |
有部分老用戶,老項目組,因爲習慣了,一直在使用。安全 |
國內狀況,springmvc的使用率已經超過Struts2 |
框架入口 |
基於servlet |
基於filter |
本質上沒太大優點之分,只是配置方式不同 |
框架設計思想 |
控制器基於方法級別的攔截,處理器設計爲單實例 |
控制器基於類級別的攔截, 處理器設計爲多實例 |
因爲設計自己緣由,形成了Struts2,一般來說只能設計爲多實例模式,相比於springmvc設計爲單實例模式,Struts2會消耗更多的服務器內存。 |
參數傳遞 |
參數經過方法入參傳遞 |
參數經過類的成員變量傳遞 |
Struts2經過成員變量傳遞參數,致使了參數線程不安全,有可能引起併發的問題。 |
與spring整合 |
與spring同一家公司,能夠與spring無縫整合 |
須要整合包 |
Springmvc能夠更輕鬆與spring整合 |
Jdk:jdk1.7
Eclipse:mars
Tomcat:apache-tomcat-7
spring:4.2.4
起的項目名字:01-springmvc
@Controller public class HelloController { @RequestMapping("hello") public ModelAndView hello(){ System.out.println("hello springmvc...."); //建立ModelAndView對象 ModelAndView mav = new ModelAndView(); //設置模型數據 mav.addObject("msg", "hello springmvc..."); //設置視圖名字 mav.setViewName("/WEB-INF/jsp/hello.jsp"); return mav; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 配置@Controller處理器,包掃描器 --> <context:component-scan base-package="com.itheima.springmvc.controller" /> </beans>
<!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加載springmvc核心配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <!-- 配置攔截路徑 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
複製第一個項目01-springmvc,粘貼在本項目目錄下更名:02-springmvc,刪掉web.xml核心控制器的配置,從新配置一次(多練習一次)。
public class Item { // 商品id private int id; // 商品名稱 private String name; // 商品價格 private double price; // 商品建立時間 private Date createtime; // 商品描述 private String detail; 建立帶參數的構造器 set/get。。。 }
@Controller public class ItemController { @RequestMapping("itemList") public ModelAndView itemList(){ ModelAndView mav = new ModelAndView(); List<Items> itemList = new ArrayList<Items>(); itemList.add(new Items(1, "冰箱", 1999.0, new Date(), "質量不錯")); itemList.add(new Items(2, "冰箱2", 1999.0, new Date(), "質量不錯2")); itemList.add(new Items(3, "冰箱3", 1999.0, new Date(), "質量不錯3")); itemList.add(new Items(4, "冰箱4", 1999.0, new Date(), "質量不錯4")); itemList.add(new Items(5, "冰箱5", 1999.0, new Date(), "質量不錯5")); //設置商品數據 mav.addObject("itemList", itemList); //設置視圖名字 mav.setViewName("/WEB-INF/jsp/itemList.jsp"); return mav; } }
從spring3.1版本開始,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成註解式處理器映射。
<!-- 配置處理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用RequestMappingHandlerAdapter完成註解式處理器適配。
<!-- 處理器適配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
映射器與適配器必需配套使用,若是映射器使用了推薦的RequestMappingHandlerMapping,適配器也必需使用推薦的RequestMappingHandlerAdapter。
<!-- 註解驅動配置,代替映射器與適配器的單獨配置,同時支持json響應(推薦使用) --> <mvc:annotation-driven />
<!-- 配置視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置視圖響應的前綴 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 配置視圖響應的後綴 -->
<property name="suffix" value=".jsp" />
</bean>
建立Web新工程:03-springmvc-mybatis
Dao層:
一、SqlMapConfig.xml,空文件便可。須要文件頭。
二、applicationContext-dao.xml。
a) 數據庫鏈接池
b) SqlSessionFactory對象,須要spring和mybatis整合包下的。
c) 配置mapper文件掃描器。
Service層:
一、applicationContext-service.xml包掃描器,掃描@service註解的類。
二、applicationContext-trans.xml配置事務。
Controller層:
Springmvc.xml
一、包掃描器,掃描@Controller註解的類。
二、配置註解驅動。
三、視圖解析器
Web.xml
基於完成需求:點擊修改商品時,打開商品編輯頁面,展現商品信息
/** * 演示springmvc默認參數的傳遞 * 跳轉修改商品信息頁面 * @return */ @RequestMapping("itemEdit") public ModelAndView itemEdit(HttpServletRequest request,HttpServletResponse response,HttpSession session){ ModelAndView mav = new ModelAndView(); //request獲取參數 String id = request.getParameter("id"); System.out.println("id爲:" + id); //其它對象輸出 System.out.println("response對象:" + response); System.out.println("session對象:" + session); //查詢商品信息 Item item = itemServices.getItemById(new Integer(id)); //設置商品數據返回頁面 mav.addObject("item", item); //設置視圖名稱 mav.setViewName("itemEdit"); return mav; }
/** * 演示簡單參數傳遞 * 跳轉修改商品信息頁面 * @RequestParam用法:入參名字與方法名參數名不一致時使用{ * value:傳入的參數名,required:是否必填,defaultValue:默認值 * } * */ @RequestMapping("itemEdit") public ModelAndView itemEdit(@RequestParam(value="id",required=true,defaultValue="1")Integer ids){ ModelAndView mav = new ModelAndView(); //查詢商品信息 Item item = itemServices.getItemById(ids); //設置商品數據返回頁面 mav.addObject("item", item); //設置視圖名稱 mav.setViewName("itemEdit"); return mav; }
/** * 演示返回String,經過Model/ModelMap返回數據模型 * 跳轉修改商品信息頁面 * @param id * @return */ @RequestMapping("itemEdit") public String itemEdit(@RequestParam("id")Integer ids,Model m,ModelMap model){ //查詢商品信息 Item item = itemServices.getItemById(ids); //經過Model把商品數據返回頁面 model.addAttribute("item", item); //返回String視圖名字 return "itemEdit"; }
要點:表單提交的name屬性必需與pojo的屬性名稱一致。
/** * 演示傳遞pojo參數 * 更新商品信息 * @return */ @RequestMapping("updateItem") public String updateItem(Item item,Model model){ //更新商品 itemServices.update(item); //返回商品模型 model.addAttribute("item", item); //返回擔任提示 model.addAttribute("msg", "修改商品成功"); //返回修改商品頁面 return "itemEdit"; }
要點:經過點(.)傳遞屬性。
/** * 演示包裝pojo傳遞 * @param vo * @return */ @RequestMapping("queryItem") public String queryItem(QueryVo vo){ //打印傳入參數 System.out.println(vo); //返回視圖 return "itemList"; }