电子政务服务网站建设,app推广平台排行榜,做淘宝优惠券网站要多少钱,校园网上零售网站建设方案2019独角兽企业重金招聘Python工程师标准 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能。02 之前在使用Struts2实现MVC的注解时#xff0c;是借助struts2-convention这个插件#xff0c;如今我们使用Spring自带的spring-webmvc组件来实现同… 2019独角兽企业重金招聘Python工程师标准 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能。 02 之前在使用Struts2实现MVC的注解时是借助struts2-convention这个插件如今我们使用Spring自带的spring-webmvc组件来实现同样的功能而且比之以前更简单。另外还省掉了整合两个框架带来的不稳定因素。 03 对于Spring MVC框架我主要讲一下它的常用注解再结合一些示例进行说明方便大家能够快速理解。 04 一、Spring MVC常用注解说明 05 Controller 06 在类上面定义表明该类为控制器返回字符串与redirect:xxx 07 RequestMapping 08 在类或方法上面使用此注解设置URL访问地址。它有两个属性value指定访问路径method指定指定请求方式请求方式在RequestMethod这个类中全部以常量形式定义它默认使用GET请求。 09 RequestParam 10 指定Request请求参数在方法参数中定义相当于传统的request.getParameter()。 11 PathVariable 12 获取URL访问路径变量这是Spring MVC 3.0框架才加入的特性基于RESTful风格的URL访问路径。 13 ModelAttribute 14 全局式的方法在一组URL访问路径中每次都会执行方法返回结果保存在module会话中。 15 Service 16 在类上面定义指定被注解的类是业务逻辑组件如果不指定具体的Bean ID则采用默认命名方式即类名的首字母小写。之前在SSH2中大象曾对Dao组件使用Repository本例只有业务层所以就只用Service注解。 17 Autowired 18 IoC自动注入功能替换以前的set写法在SSH2中就已经开始使用了。 19 Qualifier 20 对同一接口类有不同实现指定具体的实现类。 21 ResponseBody 22 同样定义在方法上Ajax调用声明指定方法返回结果为Ajax回调函数结果。这是Spring MVC3.0框架中增加的一个新特性。 23 InitBinder 24 初始化数据绑定与类型转换将传入的参数转换为自定义类型或者对参数进行自定义处理。 25 二、示例 26 27 RequestMapping在类名上面定义相当于指定的URL是此控制器内的所有其它访问路径的父路径。如果在某个方法上面定义RequestMapping注解则相对于父路径来说是其子路径。如果不定义value值那么按父路径访问就会被默认执行。但请注意默认的访问方式只能有一个。 28 对于UserController的list方法REST访问URL为http://localhost:8080/ssm3/user而且它同时接收GET和POST两种请求。另外Spring MVC 3.0有一个很灵活的特性可以自定义方法参数。看看list方法我设定了两个参数一个Model一个User对象。Model是用来渲染数据生成页面用的。相当于request.setAttribute你可以这样理解但不能就这样认为Model以及另一个ModelMap都是作为视图模型传递参数的它们的作用域为request。除此之外你还可以定义HttpServletRequest、HttpServletResponse等等各种各样的参数。 29 如果一个类还要定义其它资源访问怎么办呢请看下面的RoleController 30 31 在RoleController上定义了全局路径/role这样一来对于和角色相关的资源都会以/role开头比如创建角色/role/new编辑角色/role/edit/{id}等等。 32 上图edit方法中的{id}写法就是RESTful URL风格与PathVariable搭配来一起实现该功能。它表示所请求的URL中可以将变量值作为参数进行动态的传递。例如http://localhost:8080/ssm3/role/edit/1另外除了可以用数字还可以用字符串还可以多定义几个变量/role/edit/{id}/{type}等等。 33 每个方法的返回值其实都对应着一个结果页面这一点和struts2-convention这个插件很相像。本例使用FreeMarker模板引擎作为展示层页面的后缀为.html页面中除了标准的HTML之外其余的数据填充条件判断之类都要用到FreeMarker指令。 34 对于save方法返回值写法表示的是重定向相当于执行http://localhost:8080/ssm3/role而这个URL对应的其实就是RoleController这个类里面list方法。如果要带上参数之类的一定要符合所定义的REST资源路径才可以。 35 36 37 ResponseBody用来标识Ajax方法调用在上面这个方法中用到了RequestParam注解它的作用就和request.getParameter(name)一样。Spring MVC框架支持好几种返回格式例如String/JSON/XML等等。不过以这种格式的字符串值形式返回是最简便的一种方式而且利用JavaScript解析也十分方便。页面调用的时候请用jQuery的$.ajax()这种原生方式来定义这种写法不会出问题也很灵活而且其它几种方式最终也是调用它来完成请求。 38 39 对于拥有相同的一组访问规则的URL如果都需要获得相同的数据则使用ModelAttribute注解。以RoleController为例上面这个注解与方法的含义相当于是在它里面所有的访问路径方法中都调用这个写法module.addAttribute(“allRoles”,roleService.getRoles())。也即不管是访问create还是edit都会执行preperList都会获得allRoles这个List。 40 41 注册自定义类型编辑器在Spring MVC中对于时间类型框架不会自动帮你转换绑定需要你自己来定义属性编辑器。除此之外还可以对某些特殊字符进行转义符处理都可以放在InitBinder注解的方法中进行。如果所有的Controller都需要注册相同的属性编辑器则可以实现WebBindingInitializer接口定义一个全局的属性编辑器。 42 三、在web容器中部署 43 想要让Spring MVC框架帮助我们完成工作就需要在Web容器中配置好它。 44 45 DispatcherServlet是Spring MVC的核心是处理一切请求转发的核心控制器。大象曾在本系列的第二篇文章中就详细描述了Spring MVC的流程结构如果没什么印象的话请再去看看。 46 Spring MVC有一个默认规则Web容器启动之后会自动查找/WEB-INF/servlet-name.xml这个Spring类型的配置文件。如果想自定义配置文件路径就按上面的写法指定contextConfiglocation这个属性大象采用maven构建项目所以servlet-context.xml这个配置文件放在resource目录下。 47 四、MVC配置 48 Spring MVC 3.0对使用和配置作了较大的改进除了提供注解来简化控制器的开发之外在配置文件上面也进行了简化。 49 50 基于Spring MVC注解的配置就是上面这两行还有一种更简化的配置写法是只写这一句mvc:annotation-driven /就可以了Spring启动的时候会自动注册上面这两个bean。为什么大象要在这里显示的注册两个bean呢因为我们在真正使用的时候一般来说使用默认的方式满足不了我们的系统或业务要求。比如拦截器比如数据验证比如返回消息格式转换等等一些自定义设置。他们都需要配置在这两个bean里面。因为本例是用来作为入门教程所以这些东西都没有加进来。 51 DefaultAnnotationHandlerMapping这个类是将所有标注了RequestMapping注解的Controller类都放到了一个HandlerMapping对象中当有请求时就在这个对象中进行查找是否有与之匹配的路径AnnotationMethodHandlerAdapter是管理所有RequestMapping注解的方法。 转载于:https://my.oschina.net/zhanghaiyang/blog/594509