欢迎查看Java开发之上帝之眼系列教程,若是您正在为Java后端庞大的体系所困扰,若是您正在为各类繁出不穷的技术和各类框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程但愿您能站在上帝的角度去观察(了解)Java体系。使Java的各类后端技术在你心中模块化;让你在工做中能将Java各个技术了然于心;可以即插即用。本章咱们来一块儿了解Java的MVC框架之SpringMVC。html
Java语言如今应用比较多的MVC框架有SpringMVC,Struts2两种。本章咱们就来说解SpringMVC,对于本篇SpringMVC本篇不会介绍其详细知识点及具体应用,Spring系列详细使用和高级应用相关知识都在第四章:Spring专栏进行讲解,本篇将会介绍SpringMVC的基础相关概念,这些基础概念是很重要的,它就如同盖房子的基石。本章示例源码下载前端
什么是MVC?java
前端控制器DispatcherServlet
|
接受请求,响应结果,至关于转发器,中央处理器,减小了与其余组件之间的耦合度
|
处理器映射器HandlerMapping
|
根据规则查找须要执行的Handler
|
处理器适配器HandlerAdapter
|
根据Handler类型,寻找相应处理器执行Handler
|
处理器 Handler
|
能够实际处理请求的方法,如被@RequestMapping标注的方法
|
视图解析器 ViewResolver
|
进行视图解析,根据逻辑视图名解析成真正的视图(view)
|
视图View
|
View是一个接口,实现类支持不一样的view类型(jsp,framemark,pdf…)
|
文件上传解析器MultipartResolver
|
用于处理上传请求
|
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!--加载数据字典--> <context:property-placeholder location="classpath:resource.properties"/> <!--配置默认的Servlet做为静态资源的Handler--> <mvc:default-servlet-handler/> <!-- 注解驱动:做用:替咱们自动配置最新版的注解的处理器映射器和处理器适配器--> <mvc:annotation-driven/> <!-- 配置@Controller注解扫描 --> <context:component-scan base-package="com.jimisun.controller"></context:component-scan> <!--配置InternalResourceViewResolver视图解析器解析返回数据--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="cache" value="false"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> <property name="contentType" value="text/html;charset=UTF-8"/> </bean> <!--配置自定义exceptionResolver异常解析器处理异常--> <bean id="exceptionResolver" class="com.jimisun.exception.MyExceptionResolver"/> <!--配置文件上传--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="104857600"/> <property name="maxInMemorySize" value="4096"/> <property name="defaultEncoding" value="UTF-8"></property> </bean> <!--配置拦截器--> <mvc:interceptors> <mvc:interceptor> <!--拦截路径规则--> <mvc:mapping path="/user/**"/> <!--排除路径--> <mvc:exclude-mapping path="/user/login.html"></mvc:exclude-mapping> <mvc:exclude-mapping path="/user/register.html"></mvc:exclude-mapping> <bean id="viewLoginInterceptor" class="com.jimisun.interceptor.ViewLoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> </beans>
/** * @Author:jimisun * @Description: * @Date:Created in 19:42 2018-09-28 * @Modified By: */ public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
/** * @Author:jimisun * @Description: * @Date:Created in 07:58 2018-09-25 * @Modified By: */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:SpringMvc.xml", }) public class TestControllerTest { @Autowired private TestService testService; @Test public void sayhello() { String test = testService.sayHelloService("test"); System.out.println(test); } }
对于Controller接收到的参数,几乎在全部状况下咱们都须要验证,SpringMVC开发中经常使用的验证方法有两种,Spring框架定义Validator校验和JSP-303 Bean Validation校验。git
@RequestMapping("sayhello") public void sayhello(@Validated User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { System.out.println(bindingResult.getFieldError().getDefaultMessage()); } else { String s = testService.sayHelloService(user.getUsername()); System.out.println(s); }
JSP-303 Bean Validation校验 Bean Validation校验源码下载github
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.4.Final</version> </dependency>
相关配置web
<mvc:annotation-driven validator="validator"/> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <property name="validationMessageSource" ref="messageSource"/> </bean> <!-- 校验错误信息配置文件 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 资源文件名 --> <property name="basename" value="classpath:validationMessages"/> <!-- 对资源文件内容缓存时间,单位秒 --> <property name="fileEncodings" value="GBK"/> <property name="defaultEncoding" value="GBK"/> <property name="cacheSeconds" value="120"/> </bean>