接上篇文章......
目录
1.SpringMVC开发步骤
- 导入SpringMVC相关坐标
- 配置SpringMVC核心控制器DispatcherServvlet
- 创建Controller类和视图页面
- 使用注解配置Controller类中业务方法的映射地址
- 配置SpringMVC核心文件spring-mvc.xml
- 客户端发起请求测试
上述步骤完成的业务需求是:客户端发起请求,执行逻辑并进行视图跳转。
2.SpringMVC的执行流程
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
- DispatcherServlet调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配器调用具体的处理器(Controller,也叫后端控制器)
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体view
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中),DispatcherServlet响应用户
3.SpringMVC注解解析
@RequestMapping
作用:用于建立请求URL和处理请求方法之间的对应关系
位置:
- 类上,请求URL的第一级访问目录,此处不写的话,就相当于应用的根目录
- 方法上,请求URL的第二级访问目录,与类上的使用@RequestMapping标注的一级目录一起组成访问虚拟路径
属性:
- value:用于指定请求的URL。它和path属性的作用是一样的
- method:用于指定请求的方式
- params:用于指定限制请求参数的条件。它支持简单的表达式,要求请求参数的key和value必须和配置的一模一样
- 例如:params={"accountName"},表示请求的参数必须有accountName
4.SpringMVC的XML配置解析
4.1视图解析器
SpringMVC有默认组件配置,默认组件都是DispatcherServlet.properties配置文件中配置的,该配置文件地址org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
翻看该解析器源码,可以看到该解析器的默认设置,如下:
REDIRECT_URL_PREFIX="redirect:"--重定向前缀
FORWARD_URL_PREFIX="forward"--转发前缀(默认值)
prefix="";--视图名称前缀
suffix="";--视图名称后缀
5.SpringMVC的数据响应方式
1)页面跳转
- 直接返回字符串
- 通过ModelAndView对象返回
2)回写数据
- 直接返回字符串
- 通过SpringMVC框架注入的response对象,使用response.getWriter().print("hello world")回写数据,此时不需要视图跳转,业务方法返回值为void。
@RequestMapping("/quick3")
public void save3(HttpServletResponse response) throws IOException {
response.getWriter().print("hello world!");
}
- 将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。
@RequestMapping("/quick4")
@ResponseBody // 告知SpringMVC框架,不进行视图跳转,直接进行数据响应
public String save4() throws IOException {
return "Hello Quick4!";
}
- 返回对象或集合
通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换,因此需要在springMVC.xml中进行配置:
<!-- 配置处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation
.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json
.MappingJackson2HttpMessageConverter">
</bean>
</list>
</property>
</bean>
在方法上添加@ResponseBody就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此,我们可以使用mvc的注解驱动代替上述配置:
<beans xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- mvc的注解驱动 -->
<mvc:annotation-driven/>
</beans>
在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在Spring-xml.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。
同时使用<mvc:annotation-driven>默认底层就会集成Jackson进行对象或集合的json格式字符串的转换。
问题:关于jsp文件无法获取${}表达式的值?解决方法如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>