1.快速入門
步驟:
1) 建立項目
2) 導(dǎo)入springioc,springweb相關(guān)jar包
3) 在/WEB-INF/下創(chuàng)建web.xml文件:
4) 創(chuàng)建控制器
什么是springMVC, 它和spring有什么關(guān)系?
SpringMVC屬于Spring的后續(xù)產(chǎn)品,用在基于MVC的表現(xiàn)層開發(fā),類似于structs2框架。
注意:servlet是一個單例
我們?nèi)绻?code>web.xml注冊了DispatcherServlet之后, 系統(tǒng)會自動找/WEB-INF/<servlet-name>-servlet.xml,注意目錄和名字。
<!-- 注冊springmvc核心控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
導(dǎo)包:

ModelAndView中,邏輯名稱和真實名稱
我們在Action中,
public class HelloAction implements Controller {
/**
* 處理請求/業(yè)務(wù)方法
* @param httpServletRequest
* @param httpServletResponse
* @return
* @throws Exception
*/
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
/**
* ModelAndView表示向視圖封裝的數(shù)據(jù)和路徑
*/
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "this my first springmvc application");
//modelAndView.setViewName("/jsp/success.jsp"); // 真實路徑
modelAndView.setViewName("success"); // 邏輯名稱
return modelAndView;
}
}
我們在DispatcherServlet-servlet.xml中:
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 這個Action -->
<!-- Action處理類:
class 代表處理類的全路徑
name 代表請求路徑
-->
<bean name="/hello.action" class="com.ypd.springmvc2.controller.HelloAction"></bean>
<!--
如果Action中熟悉而的是視圖邏輯名稱,那么視圖解析器就必須配置
如果是真實名稱,就可選配置
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路徑前綴 -->
<property name="prefix" value="/jsp/"></property>
<!-- 路徑后綴 -->
<property name="suffix" value=".jsp"></property>
<!-- 前綴+邏輯名+后綴=真實路徑 -->
</bean>
</beans>
就是說如果使用邏輯名稱:那么我們需要在DispatcherServlet-servlet.xml中配置視圖解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路徑前綴 -->
<property name="prefix" value="/jsp/"></property>
<!-- 路徑后綴 -->
<property name="suffix" value=".jsp"></property>
<!-- 前綴+邏輯名+后綴=真實路徑 -->
</bean>
JSP取得絕對根路徑
${pageContext.request.contextPath}
JSP取得絕對路徑
映射器 Mapping
什么樣的請求交給Action
可以將多個action的映射交給一個<bean>標(biāo)簽為id的Action來處理:

視圖解析器
InternalResourceViewResolver
一個Action中可以寫多個類似的業(yè)務(wù)控制方法:增刪改查
適配器 Adapter
SimpleControllerHanderAdapter 簡單控制器
ParameterizableViewController: 參數(shù)視圖控制器

AbstractCommandController:抽象的CommandController
原則
1) JavaBean中的屬性適合用包裝類型即Integer, Double
2) 普通方法中的參數(shù)類型適合用于基礎(chǔ)類型,即Int, double
SpringMVC 的@InitBinder標(biāo)簽
SpringMVC中,bean定義了Date, double 等類型,如果沒有任何處理的話,日期以及double都無法綁定。
解決的方法就是使用Spring MVC的@InitBinder標(biāo)簽。
一般的做法是:BaseController中增加方法initBinder。
并使用注解@InitBinder標(biāo)注,那么spring mvc在綁定表單之前,都會先注冊這些編輯器,當(dāng)然你如果不嫌麻煩,你也可以單獨的寫在你的每一個controller中。剩下的控制器都繼承該類。
spring自己提供了大量的實現(xiàn)類,諸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等許多,基本上夠用。
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
binder.registerCustomEditor(int.class, new CustomNumberEditor(int.class, true));
binder.registerCustomEditor(int.class, new IntegerEditor());
binder.registerCustomEditor(long.class, new CustomNumberEditor(long.class, true));
binder.registerCustomEditor(long.class, new LongEditor());
binder.registerCustomEditor(double.class, new DoubleEditor());
binder.registerCustomEditor(float.class, new FloatEditor());
}
常用的方法:
// 自定義的轉(zhuǎn)換器
@InitBinder
public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)
);
}
如果web.xml中配置了url-pattern:

在注解的時候,可以寫也可以不寫.action:

但是在請求的時候一定要寫:

自定義注解
