前言
本文主要是讲解在Controller中的开发,主要的知识点有如下:
- 编码过滤器
- 使用注解开发
- 注解
@RequestMapping
详解 - 业务方法接收参数
- 字符串转日期
- 重定向和转发
- 返回JSON
SpringMVC过滤编码器
在SpringMVC的控制器中,如果没有对编码进行任何的操作,那么获取到的中文数据是乱码!
即使我们在handle()方法中,使用request对象设置编码也不行!原因也非常简单,我们SpringMVC接收参数是通过控制器中的无参构造方法,再经过handle()方法的object对象来得到具体的参数类型的。
Struts2是使用拦截器来自动帮我们完成中文乱码的问题的。那么SpringMVC作为一个更加强大的框架,肯定也有对应的方法来帮我们完成中文乱码问题!
值得注意的是:该过滤编码器只能解决POST的乱码问题!
我们只需要在web.xml配置文件中设置过滤编码器就行了!
<!-- 编码过滤器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
注解开发SpringMVC
我们在快速入门的例子中使用的是XML配置的方式来使用SpringMVC的,SpringMVC也能够支持注解。【个人非常喜欢注解的方式】
我们在使用Action的时候,要么继承着AbstractCommandController类,要么显示使用注解Controller接口。当我们使用了注解以后就不用显示地继承或实现任何类了!
开发流程
使用@Controller这个注解,就表明这是一个SpringMVC的控制器!
@Controller public class HelloAction { }
当然了,现在Spring是不知道有这么一个注解的,因此我们需要在配置文件中配置扫描注解
值得注意的是:在配置扫描路径的时候,后面不要加.*
不然扫描不了,我不知道学Struts2还是其他的地方时候,习惯加了.*,于是就搞了很久!
<!--扫描注解,后面不要加.*--> <context:component-scan base-package="zhongfucheng"/>
在控制器中写业务方法
@Controller public class HelloAction { /** * * @RequestMapping 表示只要是/hello.action的请求,就交由该方法处理。当然了.action可以去掉 * @param model 它和ModelAndView类似,它这个Model就是把数据封装到request对象中,我们就可以获取出来 * @return 返回跳转的页面【真实路径,就不用配置视图解析器了】 * @throws Exception */ @RequestMapping(value="/hello.action") public String hello(Model model) throws Exception{ System.out.println("HelloAction::hello()"); model.addAttribute("message","你好"); return "/index.jsp"; } }
跳转到index页面,首页得到对应的值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> 这是我的首页 <br> ${message} </body> </html>
当然了,基于注解和基于XML来开发SpringMVC,都是通过映射器、适配器和视图解析器的。 只是映射器、适配器略有不同。但是都是可以省略的!
<!-- 基于注解的映射器(可选) --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <!-- 基于注解的适配器(可选) --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> <!-- 视图解析器(可选) --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
更新:上边的适配器和映射器只是Spring3.1版本之前使用的、3.1版本之后现在一般用以下的两个
映射器: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 适配器: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
当然了,这上面两个配置也可以使用<mvc:annotation-driven>
>替代注解处理器和适配器的配置。