SpringMVC复习

时间:2023-07-11 21:31:26

第一天

springmvc.xml 一个配置文件,SpringMVC本身就是Spring的子项目,对Spring兼容性很好,不需要做很多配置。

这里只配置一个Controller扫描就可以了,让Spring对页面控制层Controller进行管理。

配置SpringMVC的前端控制器DispatcherServlet

@RequestMapping:里面放的是请求的url,和用户请求的url进行匹配,action可以写也可以不写@RequestMapping("/itemList.action")

创建ModelAndView,用来存放数据和视图

使用组件扫描器省去在spring容器配置每个Controller类的繁琐。

使用<context:component-scan>自动扫描标记@Controller的控制器类,

在springmvc.xml配置文件中配置

<!-- 配置逻辑视图的前缀 -->

<property name="prefix" value="/WEB-INF/jsp/" />

<!-- 配置逻辑视图的后缀 -->

<property name="suffix" value=".jsp" />

</bean>

逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为ItemList,则最终返回的jsp视图地址:

“WEB-INF/jsp/itemList.jsp”

// 视图解析器根据前缀+逻辑视图名+后缀拼接出来物理路径

modelAndView.setViewName("itemList");

return modelAndView;

POST乱码问题

springmvc与struts2不同

1、 springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。

2、 springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。

3、 Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面。Jsp视图解析器默认使用jstl。

/拦截所有不包含jsp   /*拦截所有(真拦截)

第二天

@RequestMapping

通过@RequestMapping注解可以定义不同的处理器映射规则。

URL路径映射

@RequestMapping(value="item")或@RequestMapping("/item")

value的值是数组,可以将多个url映射到同一个方法

添加在类上面

在class上添加@RequestMapping(url)指定通用请求前缀, 限制此类下的所有方法请求url必须以请求前缀开头

请求方法限定

除了可以对url进行设置,还可以限定请求进来的方法

u 限定GET方法

@RequestMapping(method = RequestMethod.GET)

如果通过POST访问则报错:

HTTP Status 405 - Request method 'POST' not supported

Controller方法返回值

返回ModelAndView

controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。

参考第一天的内容

1.2. 返回void

在Controller方法形参上可以定义request和response,使用request或response指定响应结果:

1、使用request转发页面,如下:

request.getRequestDispatcher("页面路径").forward(request, response);

request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);

2、可以通过response页面重定向:

response.sendRedirect("url")

response.sendRedirect("/springmvc-web2/itemEdit.action");

3、可以通过response指定响应结果,例如响应json数据如下:

response.getWriter().print("{\"abc\":123}");

例如:

@RequestMapping(value = "itemList",method = RequestMethod.POST)

u 限定POST方法

@RequestMapping(method = RequestMethod.POST

如果通过GET访问则报错:

HTTP Status 405 - Request method 'GET' not supported

u GET和POST都可以

@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})

返回字符串

逻辑视图名

controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

Redirect重定向

Contrller方法返回字符串可以重定向到一个url地址

forward转发

Controller方法执行后继续执行另一个Controller方法

异常处理器

springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

json数据交互

@RequestBody

作用:

@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。

@ResponseBody

作用:

@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

配置json转换器

如果不使用注解驱动<mvc:annotation-driven />,就需要给处理器适配器配置json转换器,参考之前学习的自定义参数绑定。

RESTful支持

什么是restful?

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

资源:互联网所有的事物都可以被抽象为资源

资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

分别对应 添加、 删除、修改、查询。

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

图片上传,使用上传解析器