[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地办理 - 转发:
你这个东西我这里办理不了,不过我们公司别的部分可以做,我帮你给他们 - 区别:
- 重定向经过客户端,而转发却没有,转发比重定向更快
- 若重定向到一个外部网站,则无法使用转发
- 避免在用户加载页面时再次调用同样的动作
提交表单时候重新加载页面,保存的业务代码再次调用,保存两份数据 - 重定向无法轻松地传值给目标页面,而转发可以简单地将属性添加到Model,使得目标视图可以轻松访问
重定向经过客户端,所以Model的一切都在重定向时丢失;
Spring3.1版本开始通过flash属性提供了一种供重定向传值的方法
- 使用
- SpringMVC配置文件中添加元素
- 在方法上添加一个新的参数类型
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
若链接失效请留言
- 【SpringMVC】SpringMVC常用注解
- [SpringMVC] SpringMVC注解
- springMVC注解
- springMVC注解
- SpringMVC注解
- Springmvc注解
- SpringMVC注解
- springMVC注解
- springmvc注解
- SpringMVC注解
- springmvc注解
- Springmvc注解
- SpringMVC 注解
- springMVC注解
- SpringMVC注解
- SpringMVC 注解
- springmvc注解
- SpringMVC 注解
- 关于iCheck 单选框的事件绑定
- quick cocos2dx 自定义事件管理器
- QLabel中html标签的使用
- SonicOperator之实验2
- SonicOperator之结论
- [SpringMVC] SpringMVC注解
- hdoj 2010
- Hadoop之HDFS(三)
- 简单了解Java本身是怎样判断一个文件是目录
- HDU1559 最大子矩阵【DP】
- c#处理3种json数据的实例
- hdoj 2011
- QLabel设置行间距
- HTML DOM之节点操作方法(2)