(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"; } }