SpringMvc入门

来源:互联网 发布:粤贵银手机行情软件 编辑:程序博客网 时间:2024/06/11 03:36

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>
  1. 接着配置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; 
0 0