[SpringMVC] SpringMVC注解

来源:互联网 发布:上海网络推广铭心科技 编辑:程序博客网 时间:2024/06/04 00:59

  • SpringMVC注解类型
    • controller注解类型
    • requestMapping注解类型
      • 使用
      • 属性介绍
    • url访问
    • 编写请求处理方法
      • 参数类型
      • 命令或表单对象
      • 返回类型
    • 例子springmvc_first_b
        • 应用Autowired和Service进行依赖注入
    • 重定向与转发
    • 请求参数和路径变量
      • 说明
      • 使用路径变量
      • 动作路径变量url冲突解决方案
    • 例子springmvc_autowiredservice_test
  • 工程下载

[白话] SpringMVC中可以在配置文件spring-mvc.xml中声明你要用的东西;
也可以用注解(@方式)的方式,告诉它 你写的这个东西 是 这个用途

SpringMVC注解类型

优点
一个控制器类可以处理多个动作
不需要存储在配置文件中

controller注解类型

org.springframework.stereotype.Controller注解类型用于指示spring类的实例是一个控制器
1. 设置控制器

    @Controller    public class CustomerController{    }

2. 声明spring-context
Spring使用扫描机制来找到应用程序中所有基于注解的控制器类
[白话]你写的注释要让他看到,你就要告诉他指定地方有,去那里找一遍
为了保证Spring能找到控制器,需要在SpringMVC配置文件中声明spring-context,应用

    <?xml version="1.0" encoding="utf-8"?>    <beans ...        xmlns:context="http://wwww.springframework.org/schema/context"    ...>    <context:compoent-scan base-package="com.example.controller" />    //指定控制器类的基本包,所有控制器都在com.example.controller及其子包下</beans>

requestMapping注解类型

要让Spring知道用哪一种方法类处理它的动作,需要使用
org.springframework.web.bind.annotation.RequestMapping注解类型映射的URL方法
RequestMapping映射一个请求和一种方法,并由调度程序在接收到对应URL请求时调用
[白话] 用户想要苹果,告诉它去柜台1拿;用户想要梨,告诉它去柜台2拿
用户要的动作即请求(request),要的是苹果,对应到 柜台1
此注释就是说 这个柜台(Controller) 是 放苹果的(处理相应请求)

使用

@Controllerpublic class CustomerController{    @RequestMapping(value="/customer_input")    public String inputCustomer() {        return "CustomerForm";    }}

属性介绍

value属性将URL映射到方法,如果只有唯一的属性,则可以省略属性名称

@RequestMapping("/customer_input")//methoed属性指定该方法仅处理那些HTTP方法@RequestMapping(value="/order_process",    method={RequestMethod.POST,RequestMethod.PUT})

url访问

url/类的RequestMapping/方法的ReqeustMapping

编写请求处理方法

每个请求处理方法可以有多个不同类型的参数,和一个多种类型的返回结果

参数类型

* javax.servlet.ServletRequest或javax.servlet.http.HttpServletRequest* javax.servlet.ServletResponse或javax.servlet.http.HttpServletResponse* javax.servlet.http.HttpSession* org.springframework.web.context.request.WebRequest或org.springframework.web.context.request.NativeWebRequest* java.util.Locale* java.io.InputStream或java.io.Reader* java.io.OutpoutStream或java.io.Writer* java.security.Principal* HttpEntity<?>* java.util.Map/org.springframework.ui.Model/* org.springframework.ui.ModelMap* org.springframework.web.servlet.mvc.suppot.RedirectAttributes* org.springframework.validation.Errors/* org.springframework.validation.BindingResult

命令或表单对象

* org.springframework.web.bind.suppot.SessionStatus* org.springframework.web.util.UriCompoentsBuilder* 带@PathVariable,@MatrixVariable注解的对象* @RequestParam,@RequestHeader,@RequestBody,@RequestPart

返回类型

* ModelAndView* Model* Map包含模型的属性* View* 代表逻辑视图名的String* void* 提供对Servlet的访问,以响应HTTP头部和内容HttpEntity或ResponseEntity对象* Callable* DeferredResult* 其他任意类型,Spring将其视作输出给View的对象模型

△org.springframework.ui.Model类型,这不是一个Servlet API类型,而是一个包含Map的SpringMVC类型。每次调用请求处理方法时,SpringMVC都创建Model对象并将各种对象注入Map中

例子springmvc_first_b

新增了一个名为index.html的HTML文件,以便SpringMVCServlet的URL模式设置为/时,依然可以访问静态资源
ProdcutController的saveProduct方法的第二个参数时org.springframework.ui.Model类型;
无论是否使用,SpringMVC都会在每一个请求处理方法被调用时创建一个Model实例,使用Model的主要母的是添加需要在视图中显示的属性

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

Autowired注解类型属于org.springframework.beans.factory.annotation包
为了能作为依赖注入,类必须要注明为@Service(org.springframework.stereotype)
Service注解类型指示类是一个服务,此外在配置文件中,需要添加一个扫描元素来扫描依赖基本包

重定向与转发

  • 重定向:
    你请求的东西我这里处理不了,你去B地办理
  • 转发:
    你这个东西我这里办理不了,不过我们公司别的部分可以做,我帮你给他们
  • 区别:
    1. 重定向经过客户端,而转发却没有,转发比重定向更快
    2. 若重定向到一个外部网站,则无法使用转发
    3. 避免在用户加载页面时再次调用同样的动作
      提交表单时候重新加载页面,保存的业务代码再次调用,保存两份数据
    4. 重定向无法轻松地传值给目标页面,而转发可以简单地将属性添加到Model,使得目标视图可以轻松访问
      重定向经过客户端,所以Model的一切都在重定向时丢失;
      Spring3.1版本开始通过flash属性提供了一种供重定向传值的方法
  • 使用
    1. SpringMVC配置文件中添加元素
    2. 在方法上添加一个新的参数类型
      org.springframework.web.servlet.mvc.support.RedirectAttributes

请求参数和路径变量

说明

两者都是url传参
①请求参数:url?key1=value1&key2=value2
取值 httpServletRequest.getParameter(“key”)
②路径变量:url/value1/value2
取值 public void sendProduct(@RequestParam int productId)
③问题:会与url冲突

使用路径变量

@ReqeustMapping("/product_view/{id}")public String viewProduct(@PathVariable Long id,Model model) {    Product product = productService.get(id);    model.addAttribute("product",product);    return "ProductView";}//可使用多个路径变量@RequestMapping("/product_view/{userId}/{orderId}")

动作、路径变量、url冲突解决方案

<style type="text/css">@import url(css/main.css);</style>--><style type="text/css">    @import url("<c:url value="/css/main.css"/>");</style>

例子springmvc_autowiredservice_test

应用@Autowried flash属性 路径变量

@ModelAttribute@RequestMapping(method=Request.POST)public String submitOrder(@ModelAttribute("newOrder") Order order,Model model) {    ... //输入或创建Order实例将用newOrder键值添加到Model对象中}

第二个用途:标注一个非请求的处理方法
被@ModelAttribute注解的方法会在每次调用该控制器类的请求处理方法时被调用
意味着,如果一个控制器类有两个请求处理方法,以及一个有@ModelAttribute注解方法
该方法的调用就回比每个处理请求方法更频繁
@ModelAttribute注解的方法可以返回一个对象或者一个void类型,如果返回一个对象,则返回的对象会自动添加到Model中

工程下载

链接:http://pan.baidu.com/s/1hrJhLi8 密码:1sdl
若链接失效请留言