SpringMVC学习

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类中

@Autowired
private ProductService productService;

ServiceImpl类

@Service
public 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对象中。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值