SpringMVC学习

来源:互联网 发布:淘宝宝贝怎么修改类目 编辑:程序博客网 时间:2024/05/29 00:31

1.SpringMVC处理请求

这里写图片描述
1.请求的第一站是Spring的DispatcherServlet(前端控制器)。DispatcherServlet会查询一个或多个处理器映射(handler mapping)来确定请求的下一站在哪里。(web.xml)
2.选择合适的控制器,然后请求发送给选中的控制器。控制器完成逻辑处理后,通常会产生一些信息,这些信息是返回给浏览器上显示的。这些信息被称为模型(model)。控制器将模型打包将请求连同模型和视图名发送回DispatcherServlet。(在spring.xml)
3.然后交给视图解析器解析匹配出一个特定的视图实现(配置在spring.xml)
4.视图将使用的模型数据渲染输出,然后响应传送给客户端。

这里写图片描述

2.关于控制器

前端控制器的配置

<servlet> <servlet-name>chapter</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup>          <init-prarm> </init-param> </servlet> <servlet-mapping> <servlet-name>chapter</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

DispatcherServlet 作用

DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,而且负责职责的分派,而且与
Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处。 具体请参考第二章的图 2-1。
DispatcherServlet 主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是 multipart 将通过 MultipartResolver 进行文件上传解析;
2、通过 HandlerMapping,将请求映射到处理器(返回一个 HandlerExecutionChain,它包括一个处理器、多个
HandlerInterceptor 拦截器);
3、 通过 HandlerAdapter 支持多种类型的处理器(HandlerExecutionChain 中的处理器);
4、通过 ViewResolver 解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给 HandlerExceptionResolver 来解析。
从以上我们可以看出 DispatcherServlet 主要负责流程的控制(而且在流程中的每个关键点都是很容易扩展的)。

一些注解:
@Controller:用于标识是处理器类;
@RequestMapping:请求到处理器功能方法的映射规则;
映射一个请求和一个方法。
@RequestMapping(value=”/product_input” method=”“)

@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute:请求参数到命令对象的绑定;
@SessionAttributes:用于声明 session 级别存储的属性,放置在处理器类上,通常列出模型属性(如
@ModelAttribute)对应的名称,则这些属性会透明的保存到 session 中;
@InitBinder:自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;

spring使用扫描机制来找到应用程序中所有基于注解的控制器类
<context-component-scan base-package="控制器包名">

应用@Autowired和@service进行依赖注入

为了能被作为依赖注入,类必须注明为@Service
Controller类中

@Autowiredprivate ProductService productService;

ServiceImpl类

@Servicepublic class ProductServiceImpl implements ProductService{    //成员变量    //构造    //重载}

3.转发和重定向

转发:jsp容器使用内部方法来调用目标页面,新的页面可以处理同一个请求,浏览器并不知道这个过程。
重定向:页面通知浏览器发送一个新的页面请求,URL会改变,但转发不会改变。
如何选择?转发速度更快(重定向经过客户端),要想保持request等内的对象,那么使用转发。使用重定向的一个场景是避免用户重新加载页面时调用同样的动作,放置重复添加东西。重定向可以到一个外部网站,而转发不行。

重定向不方便的地方在于无法轻松的传值给目标页面。经过重定向,Model中的一切会被丢失。Spring3.1提供Flash属性来通过重定向传值。

//要在springmvc配置中添加<annotation-driven/>
@RequestMapping(value="product_save")public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){    Product savedProduct = productService.add(product);    redirectAttributes.addFlashAttribute("message","product added.");    return "redirect:/product_view/"+savedProduct.getId();  }

@ModelAttribute
会将其输入的或创建的参数对象添加到Model对象中。

1 0
原创粉丝点击