springMVC学习-基于注解的SpringMVC

4.基于注解的SpringMVC

1)用于支持注解的配置
使用基于注解的配置可以省略很多操作,更方便。我们之前所看到的所有的xml配置,如果替换成基于注解只需要在spring的xml文件中做如下配置:
<mvc:annotation-driven/>

在Spring中,
处理器列可以使用   @Controller注解
业务逻辑层可以使用 @Service注解
数据持久层可以使用 @Repository注解


如果在处理器上使用 @Controller注解,那么还需要在配置文件中指定哪个包下面的类使用了该注解:
		<context:component-scan base-package="com.briup.web.controller">					 </context:component-scan>


2)基于注解的Controller
使用注解后,就不需要再实现特定的接口,任意一个javaBean对象都可以当做处理器对象,对象中任意一个方法都可以作为处理器方法。
只需
在类上加上 @Controller注解
方法上加上 @RequestMapping注解
即可


例如:
web.xml中:
<servlet>
			<servlet-name>SpringMVC</servlet-name>
			<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
			<init-param>
				<param-name>contextConfigLocation</param-name>
				<param-value>classpath:spring-web-mvc.xml</param-value>
			</init-param>
			<load-on-startup>1</load-on-startup>
		</servlet>
		<servlet-mapping>
			<servlet-name>SpringMVC</servlet-name>
			<url-pattern>/</url-pattern>
		</servlet-mapping>
		


		src下面的spring-web-mvc.xml中:
		<mvc:annotation-driven/>
		<context:component-scan base-package="com.briup.web.controller"></context:component-scan>
		
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
			<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
			<property name="prefix" value="/WEB-INF/jsp/"/>  
			<property name="suffix" value=".jsp"/>  
		</bean>
自定义的Controller中:
@Controller
		public class HomeController {
			@RequestMapping("/home")
			public ModelAndView home(){
				ModelAndView mv = new ModelAndView("index");
				return mv;
			}
		}
如上代码,使用 @Controller表明HomeController类是一个处理器类,通过 @RequestMapping("/home")表明当url请求名为/home时,调用home方法执行处理,当处理完成之后返回ModelAndView对象。因为在spring-web-mvc.xml中配置了视图解析器的前缀和后缀,所以最后视图home.jsp被返回



3)基于注解的Controller的返回值
1.返回ModelAndView,和之前一样


2.返回String,表示跳转的逻辑视图名字,模型可以通过参数传过来
	@Controller
			public class HomeController {
				@RequestMapping("/home")
				public String home(Model model){
					model.addAttribute("msg", "hello world");
					return "index";
				}
			}
3.声明返回类型为void
可以通过参数获取request和response,分别使用服务器内部跳转和重定向,自己来决定要跳转的位置。
@Controller
			public class HomeController {
				@RequestMapping("/home")
				public void home(HttpServletRequest request,HttpServletResponse response){
					String username = request.getParameter("username");
					response.setContentType("text/html;charset=utf-8");
					response.getWriter().write("hello world! "+username);
					//或者使用servlet的方式进行跳转/重定向
					
				}
			}
5.Spring2.5中引入注解对处理器(headler)支持
@Controller
用于标识是处理器类;
@RequestMapping
请求到处理器功能方法的映射规则;
@RequestParam
请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute
请求参数到命令对象的绑定;
@SessionAttributes
用于声明session 级别存储的属性,放置在处理器类上,通常列出模型属性(如@ModelAttribute)对应的名称,则这些属性会透明的保存到session 中
@InitBinder
自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;



6.Spring3引入了更多的注解,其中包含了对RESTful架构风格的支持
@CookieValue
cookie数据到处理器功能处理方法的方法参数上的绑定;
@RequestHeader
请求头数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody
请求的body体的绑定
@ResponseBody
处理器功能处理方法的返回值作为响应体
@ResponseStatus
定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler
注解式声明异常处理器;
@PathVariable
请求URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful架构风格的URI;


7.Spring3中引入的mvc命名空间
mvc这个命名空间是在Spring3中引入的,其作用是用来支持mvc的配置
需要在<bean>中声明出这个命名空间及其对应的schemaLocation中的值
<mvc:annotation-driven>
自动注册基于注解风格的处理器和适配器:
在spring2.5中是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter


在spring3中是RequestMappingHandlerMapping和RequestMappingHandlerAdapter.
同时还支持各种数据的转换器.


<mvc:interceptors>
配置自定义的处理器拦截器,例如:
<mvc:interceptors>
			<mvc:interceptor>
				<mvc:mapping path="/**"/>
				<ref bean="handlerInterceptor1"/>
			</mvc:interceptor>
		</mvc:interceptors>
<mvc:view-controller>
收到相应请求后直接选择相应的视图,例如:
<mvc:view-controller path="/hello" view-name="test"></mvc:view-controller>
<mvc:resources>
逻辑静态资源路径到物理静态资源路径的对应.例如:
<mvc:resources mapping="/images/**" location="/images/"/>  
		<mvc:resources mapping="/js/**" location="/js/"/>  
		<mvc:resources mapping="/css/**" location="/css/"/> 
<mvc:default-servlet-handler>
当在web.xml中DispatcherServlet使用<url-pattern>/</url-pattern> 映射的时候,会静态资源也映射了,如果配置了这个mvc标签,那么再访问静态资源的时候就转交给默认的Servlet来响应静态文件,否则报404 找不到静态资源错误。






8.@Controller和@RequestMapping注解
1)声明处理器
@Controller
public class HelloWorldController {

}


2)映射处理器中的【功能处理方法】
	@Controller
	public class HelloWorldController {
		@RequestMapping("/home")
		public ModelAndView home(){
			ModelAndView mv = new ModelAndView("index");
			return mv;
		}
	}
表明该方法映射的url路径为/home


3)@RequestMapping也可以写在处理器类上
@RequestMapping("/test")
	@Controller
	public class HomeController {
		@RequestMapping("/home")
		public ModelAndView home(){
			ModelAndView mv = new ModelAndView("index");
			return mv;
		}
	}
表明该方法映射的url路径为/test/home
注意:功能处理方法的方法可以是String类型,表示逻辑视图的名字,可以不用返回ModelAndView对象
例如:
@Controller
	public class HelloWorldController {
		@RequestMapping("/home")
		public String home(){
			return "index";
		}
	}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值