一、SpringMVC需要的jar包
commons-logging-1.2.jar
spring-aop-4.2.RELEASE.jar
spring-beans-4.2.RELEASE.jar
spring-context-4.2.RELEASE.jar
spring-core-4.2.RELEASE.jar
spring-expression-4.2.RELEASE.jar
spring-web-4.2.RELEASE.jar
spring-webmvc-4.2.RELEASE.jar
二、在web.xml中添加SpringMVC的配置文件
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理之后再返回相应的视图(View)和模型(model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。
DispatcherServlet是继承自HttpServlet的,HttpServlet是在web.xml文件中声明的。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-
name>]-servlet.xml,如spring-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-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>
三、在src下添加springmvc-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: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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 设置使用注解的类所在的包 -->
<context:component-scan base-package="org.yxt.controller"/>
<!-- don't handle the static resource -->
<mvc:default-servlet-handler />
<!-- if you use annotation you must configure following setting -->
<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>
</beans>
四、配置解析
1.DispatcherServlet
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置springMVC的第一步。
2.InternalResourceViewResolver
视图名称解析器
五、SpringMVC常用注解
@Controller 负责注册一个bean到spring上下文中
@RequestMapping 注解为控制器指定可以处理哪些URL请求
@RequestBody 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上,再把HttpMessageConverter返回的对象数据绑定到controller中方法的参数上
@ResponseBody 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
@ModelAttribute
在方法定义上使用 @ModelAttribute 注解:SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法
在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参将方法入参对象添加到模型中
@RequestParam 再处理方法入参处使用@RequestParam可以吧请求参数传递给请求方法
@PathVariable 绑定URL占位符到入参
@ExceptionHandler 注解到方法上,出现异常时会执行该方法
@ControllerAdvice 使一个Controller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常
五、使用InitBinder来处理Date类型的参数
@RequestMapping("/date")
public String date(Date date){
System.out.println(date);
return "hello";
}
@InitBinder
public void initBinder(servletRequestDataBinder binder){
binder.registerCustomEditor(Date.class,new CustomDateEditor(new
SimpleDateFormate("yyyy-MM-dd"),true));
}
六、文件上传
1》导入两个jar包
commons-fileupload-1.31.jar
commons-io-2.1.jar
2》在SpringMVC配置文件中加入
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="102400">
</bean>
3》代码
@RequestMapping(value="/upload",method=RequestMethod.POST)
public String upload(HttpServletRequest request) throws Exception{
MultipartHttpServletRequest mreq = (MultipartHttpServletRequest)request;
MultipartFile file = mreq.getFile("file");
String fileName = file.getOriginalFilename();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
fileOutpurStream fos = new FileOutpurStream(request.getSession().getServletContext().getRealPath("/")+"upload"+format.format(new Date())+fileName.substring(fileName.lastIndexOf('.')));
fos.write(file.getBytes());
fos.flush();
fos.close();
return "image";
}
七、返回json格式的字符串
1》导入的jar包
jackson-annotations-2.2.1.jar
jackson-core-2.2.1.jar
jackson-databind-2.2.1.jar
八、异常的处理
1》处理局部异常(Controller内)
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception",ex);
System.out.printIn("in testExceptionHandler");
return mv;
}
@RequestMapping("/error")
public String error(){
int i=5/0;
return "hello";
}
2》处理全局异常(所有Controller)
@ControllerAdvice
public class testControllerAdvice{
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception",ex);
return mv;
}
}
3》另一种处理全局异常的方法
在SpringMVC配置文件中配置
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>
九、表单验证
1.导入Hibernate-validate需要的jar包
classmate-1.0.0.jar
jboss-logging-3.1.3.GA.jar
validation-api-1.10.Final.jar
hibernate-validator-5.1.3.Final.jar
hibernate-validator-annotation-proce
2.编写实体类user并加上验证注解
@NotEmpty
3.在controller中添加验证
@Valid User
十、springMVC流程
十一、SpringMVC运行原理
1.客户端请求提交到DispatcherServlet
2.由DispatcherServlet控制查询一个或多个HandlerMapping,找到处理请求的Controller
3.DispatcherServlet将请求提交到Controller
4.Controller调用业务逻辑处理后,返回ModelAndView
5.DispatcherServlet查询一个或多个ViewResoler试图解析器,找到ModelAndView指定的视图
6.视图负责将结果显示到客户端