SpringMVC环境构建
org.springframework
spring-context
5.0.2.RELEASE
org.springframework
spring-web
5.0.2.RELEASE
org.springframework
spring-webmvc
5.0.2.RELEASE
javax.servlet
servlet-api
2.5
provided
javax.servlet.jsp
jsp-api
2.0
provided
junit
junit
4.12
如果使用maven自带的tomcat,加入
ROOT
org.apache.maven.plugins
maven-compiler-plugin
1.7
utf-8
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
80
/mvc
图中的前端控制器在webapp中声明,视图解析器在springMvc.xml文件中声明
web.xml
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/
Springmvc.xml
@RequestMapping
通过其path属性即value属性设置匹配路径,用过params属性和method属性限制请求参数和限制请求方式
params = {"accountName"},表示请求参数必须有 accountName
params = {"moeny!100"},表示请求参数中 money 不能是 100。
请求乱码问题:
post
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
get(get乱码针对tomcat8以下的把呢不能)
tomacat 对 GET 和 POST 请求处理方式是不同的,GET 请求的编码问题,要改 tomcat 的 server.xm配置文件,如下: 改为: 如果遇到 ajax 请求仍然乱码,请把:useBodyEncodingForURI="true"改为 URIEncoding="UTF-8"
自定义Converter(类型转换问题,以Date格式化为例)
实现继承Converter接口的实现类
public class StringToDateConverter implements Converter{
...
}
在Spring的配置文件中配置类型转换器,声明之后记得在
标签中声明
第三步:在 annotation-driven 标签中引用配置的类型转换服务
可将ServletAPI对象作为方法参数,直接进行使用
SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。支持原始 ServletAPI 对象有:
HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale
InputStream
OutputStream
Reader
Writer
我们可以把上述对象,直接写在控制的方法参数中使用
常用注解
@RequestParam 属性:name等同于value required属性表示该参数是否必须,默认为true,表示请求参数没有该参数时抛出异常,为false,请求参数没有该参数时,赋值为null
@RequestBody() 属性: required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值为 false,get 请求得到是 nul
@PathVariable() 属性:value:用于指定 url 中占位符名称。required:是否必须提供占位
@RequestHeader() 属性:value:提供消息头名称required:是否必须有此请求头
@CookieValue() 属性:value:指定 cookie 的名称。required:是否必须有此 cook
@ModelAttribute() 属性:value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key,分别对象方法返回值为引用类型和void
@SessionAttributes() 只能作用在类上,结合Model使用,属性:value:用于指定存入的属性名称type:用于指定存入的数据,
@SessionAttributes(value ={"username","password"},types={Integer.class})