(1)導包:四個spring 核心包(core、beans、context、expression)、一個aop包、兩個 web 包和一個logging 包;html
(2)配置 web xml 就是配置一個 dispatcherServlet,設置開機自啓,指定springmvc配置文件位置(init-param);java
(3)配置springmvc文件,就是一個包掃描和一個視圖解析器(先後綴),還有註解驅動的配置!!!git
(4)寫一個類用@controller 標記,其中的方法用@requestMapping來實現和url 的映射關係;web
(5)出現 classnotfound,idea 環境下打開 projectstructure --problems--fix 便可;ajax
(6)配置文件參考以下:正則表達式
<!--web xml config--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </init-param> <!--<load-on-startup>1</load-on-startup>--> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!--springmvc config--> <!-- 包掃描 --> <context:component-scan base-package="com.stan.hello"/> <!-- 靜態資源處理 --> <mvc:default-servlet-handler /> <!-- springmvc 註解驅動 --> <mvc:annotation-driven /> <!-- 配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
(1)@RequestParam註解spring
(2)請求參數映射到 pojoexpress
(3)方法參數還支持 servlet 的原生 API,支持的類型包括:json
(1)@ModelAttribute註解:cookie
(2)pojo 入參過程
(3)使用 @sessionAttributes 註解拋出異常的解決方法
<form:form action="/mvc/rest/user" method="post" commandName="user"> 編號:<form:input path="id"/><br> 姓名:<form:input path="name"/><br> 餘額:<form:input path="balance"/><br> <input type="submit" value="提交"> </form:form>
<!-- 若是request中取不到 user ,則會報異常,須要在以前手動加一個 user 進去 -->
<mvc:default-servlet-handler></mvc:default-servlet-handler> <mvc:annotation-driven></mvc:annotation-driven>
(1)基本流程
(2)數據轉換:springmvc 內置了不少類型轉換器,通常狀況下不須要咱們本身寫;
(3)自定義類型轉換器
(5)@InitBinder 註解
@RequestMapping("object") @ResponseBody public String object(User user,Admin admin) { return user.toString()+" "+admin.toString(); } @InitBinder("user") public void initUser(WebDataBinder binder) { binder.setFieldDefaultPrefix("user."); } @InitBinder("admin") public void initAdmin(WebDataBinder binder) { binder.setFieldDefaultPrefix("admin."); }
(1)使用前提
<mvc:annotation-driven conversion-service="conversionService3"/> <bean id="conversionService3" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.stan.data.MyConverter"></bean> </set> </property> </bean>
(2)日期格式化和數值格式化示例(參考:https://www.cnblogs.com/dj-blog/p/7534907.html)
@DateTimeFormat(pattern="yyyy-MM-dd") private Date birth; @NumberFormat(pattern="#,###,###.#") private Float salary;
(1)校驗框架
(2)能夠實現的校驗
Constraint | 詳細信息 |
---|---|
@Null |
被註釋的元素必須爲 null |
@NotNull |
被註釋的元素必須不爲 null |
@AssertTrue |
被註釋的元素必須爲 true |
@AssertFalse |
被註釋的元素必須爲 false |
@Min(value) |
被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
@Max(value) |
被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
@DecimalMin(value) |
被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
@DecimalMax(value) |
被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
@Size(max, min) |
被註釋的元素的大小必須在指定的範圍內 |
@Digits (integer, fraction) |
被註釋的元素必須是一個數字,其值必須在可接受的範圍內 |
@Past |
被註釋的元素必須是一個過去的日期 |
@Future |
被註釋的元素必須是一個未來的日期 |
@Pattern(value) |
被註釋的元素必須符合指定的正則表達式 |
Hibernate Validator 獨有的註解 | |
@Email |
被註釋的元素必須是電子郵箱地址 |
@Length |
被註釋的字符串的大小必須在指定的範圍內 |
@NotEmpty |
被註釋的字符串的必須非空 |
@Range |
被註釋的元素必須在合適的範圍內 |
(3)校驗的流程
//bean裏面的字段的寫法
@NotEmpty private String lastName;
//controller方法入參的寫法 @Valid Employee employee,BindingResult bindingResult
@RequestMapping("/json") @ResponseBody public List<User> toJson(){ User[] users = {new User(1,"k1",100),new User(2,"k2",100)}; return new ArrayList<>(Arrays.asList(users)); }
<!-- 國際化配置 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:messages"></property> </bean> <mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang"></property> </bean> </mvc:interceptors>
language.cn=中文
language.en=英文
welcome=歡迎光臨
language.cn=Chinese language.en=English welcome=welcome to my house enjoy yourself
<h2>國際化測試</h2> language: <a href="/mvc/rest/locale?lang=zh_CN"><spring:message code="language.cn"></spring:message></a> <a href="/mvc/rest/locale?lang=en_US"><spring:message code="language.en"></spring:message></a> <h2><spring:message code="welcome"></spring:message></h2> locale:${pageContext.response.locale}
<!--文件上傳配置--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="1024000"></property> </bean>
@RequestMapping("/upload") public String upload(@RequestParam("file") MultipartFile file){ if(file != null){ try { file.transferTo(new File("d:\\test\\"+file.getOriginalFilename())); } catch (IOException e) { e.printStackTrace(); } } return "success"; }
<h1>文件上傳測試</h1> <form action="/mvc/data/upload" enctype="multipart/form-data" method="post"> 選擇文件:<input type="file" name="file"> <input type="submit" value="開始上傳"> </form> </body>
<mvc:interceptors> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang"></property> </bean> <!--攔截全部請求--> <bean id="myIntercepter" class="com.stan.intercepter.MyIntercepter"></bean> <!--攔截指定請求 這個映射路徑默認是在當前的項目下--> <mvc:interceptor> <mvc:mapping path="/inter"/> <bean id="myIntercepter2" class="com.stan.intercepter.MyIntercepter2"></bean> </mvc:interceptor> </mvc:interceptors>
@RequestMapping("/test") public void test(){ throw new MyException("haha"); } @ExceptionHandler({MyException.class}) public String error(){ return "error"; }
@Component public class ExceptionTest implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { ModelAndView mv = new ModelAndView(); mv.setViewName("error2"); return mv; } }
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler({MyException.class}) public String error(){ return "error"; } }