1、简介
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。
SpringMvc是Spring web的一个模块,可以代替Struts,能完成Strust能完成的所有工作,并且能完成struts不能完成的工作,如处理请求的时候的中文乱码问题
2、使用步骤
导入jar包
1. 在web-Inf下的web.xml文件下配置
<!--配置核心的Servlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--表示的是直接将配置文件放置到了Src的根目录下-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
- 接着配置SpringMvc.xml文件
<!--加载注解的驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--扫描类-->
<context:component-scan base-package="要扫描的文件路径"></context:component-scan>
3添加Controller
1>使用注解的方式添加Controll
@Controller 设置Controll
@RequestMapping(value=”/value” method=RequestMethod.GET) 请求映射 ,value的值就是action 可以设置请求方式
2>使用继承Controller类的方式
配置action
<bean id="userAction" class=""></bean>
配置映射器
可以决定请求url对应的action
第一种系统默认的映射器
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
第二种需要配置properties
ac.action与id为userAction的action对应
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/ac.action">userAction</prop>
</props>
</property>
视图解析器
用于解析视图对应的真实路径
如此可以处理.action/.jsp的文件
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
配置SimpleControllerHandlerAdapter适配器
需要编写的Controller实现Controller(业务控制方法handleRequest)接口
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
配置HttpRequestHandlerAdapter适配器需要Controller实现HttpRequestHandler接口
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
Controller中多种的业务控制方法的编写
方法的编写很灵活,返回值可以是空,String,参数可以说ModelAndView HttpUrlRequest,HttpUrlResponse,String 等,必须加上注解@RequestMapping,其中value值是Struts中action的类名
日期类型转换
由于SpringMVC不能把String类型的数据转换成Date类型的数据,所以必须转换
在JSP页面中使用fmt标签
<input type="text" name="" value='<fmt:formatDate value="${hiredate}" type="date"/>'/>
在action中编写一个日期类型转换器
方式一:
编写一个类继承AbstractCommandController
重写里面的方法
AbstractCommandController的业务控制方法是handle
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(
new SimpleDateFormat("yyyy-MM-dd"),
true));
}
方式二使用注解
@InitBinder实现日期格式的初始化的方法注解,其他不变
SpringMVC可实现Struts2的数据回显的功能
同时也使用了Struts2的数据的自动封装
1、封装数据到对象中
2、使用Controll接收参数并使用这个对象接收
3、在表单中的name一定要与实体对象的属性对应
4、回显数据的时候要使用${属性名}的方式
部分代码如下
用户名:<input type="text" name="name" id="name" value="${admin.name}" /><br />
SpringMVC的数组参数的收集
实现与数据回显相反的功能
1、在JSP页面创建多个CheckBox用于提供数据到数组中
2、接收的参数的名必须与CheckBox的name保持一致,否则不能进行参数的收集,收集的参数是value的值
JSP中
<input type="checkbox" name="select" value="2" />
Controll中
@RequestMapping(value="/login.action")
public String login(int[] select){
for (int i = 0; i < select.length; i++) {
System.out.println("收集到的数据是:"+select[i]);
}
return "/index.jsp";
}
SpringMVC中的文件上传的功能
Spring提供的文件上传的类
org.springframework.web.multipart.commons.CommonsMultipartResolver
1、相关配置如下
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--配置的是上传文件的最大的大小 30M-->
<property name="maxUploadSize" value="31457280"></property>
<!--配置的上传文件的时候的最大的缓冲区的大小-->
<property name="maxInMemorySize" value="4096"></property>
<!--配置的是文件的默认的编码格式-->
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
2、表现层的编写
请求数据
<input type="file" name="file1" id="file1" value="" />
3、Controll的编写
@RequestParam(“file1”)CommonsMultipartFile file的意思是把上面的请求中name是file1的封装到后面的对象中
@RequestMapping("/fl.action")
public String getImg(@RequestParam("file1")CommonsMultipartFile file) throws IOException{
file.transferTo(new File("E:\\"));
return "";
}
对结果的转发和重定向
只是对上面的Controll的返回值改写为
重定向由于没有使用同一个Request所以要写参数
转发只能在同一个工程中进行,重定向任何地方都可以访问
return "forward:/list.action";
return "redirect:/list.action?userName="+userName+"&userPwd="+userPwd;