7.SpringMVC中的注解——@Controller类上面 、@RequestMapping方法上面和类上面、更多的注解介绍

新建spring-web-mvc-annotation.xml,

1.支持注解的配置

使用基于注解的配置可以省略很多操作,更方便。
我们之前所看到的所有的xml配置(如配置映射器...),如果替换成基于注解只需要在spring的xml文件中做如下配置:
<mvc:annotation-driven/>
在Spring中,用到@Component表示走无参构造来初始化对象
将@Component拆分成三个,更加有分层感:
	处理器类可以使用   @Controller注解
	业务逻辑层可以使用 @Service注解
	数据持久层可以使用 @Repository注解
如果在处理器上使用 @Controller注解,那么还需要在配置文件spring-web-mvc-annotation.xml中指定哪个包下面的类使用了该注解:
<context:component-scan base-package="com.briup.web.controller"></context:component-scan>

******重要的

加上
<mvc:annotation-driven/>用于支持注解
<context:component-scan base-package="com.briup.web.controller"></context:component-scan>用于扫描指定哪个包下面的类使用了该注解

2.基于注解的Controller

使用注解后,就不需要像以前一样让controller再实现特定的接口(如:public class HelloController implements Controller),
任意一个javaBean对象都可以当做处理器对象,对象中任意一个方法都可以作为处理器方法。
只需
	在类上加上 @Controller注解
	方法上加上 @RequestMapping注解
即可

web.xml中
配置自定义的[servlet-name]-servlet.xml前端控制器

<!-- springmvc的前端控制器 -->
<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-annotation.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
public class TestAnnotationController {
	@RequestMapping("/test") //浏览器中访问.../test就走这个方法
	public ModelAndView test(HttpServletRequest request,HttpServletResponse response) {
		System.out.println("TestAnnotationController test()......");
		ModelAndView mv = new ModelAndView("test");//找test.jsp文件
		return mv;
	}
}

启动tomcat,,访问…/test,就会跳转到test.jsp下,后台也走了,说明注解生效了
在这里插入图片描述

3.基于注解的Controller的返回值

1.返回ModelAndView,和之前一样
2.返回String,表示跳转的逻辑视图名字,模型可以通过参数传过来
@Controller
public class TestAnnotationController {
	@RequestMapping("/test2")
	public String test2() {
		System.out.println("TestAnnotationController test2()......");
		return "test";//跳转到test.jsp
	}
}
3.声明返回类型为void
可以通过参数获取request和response,分别使用服务器内部跳转和重定向,自己来决定要跳转的位置。
@Controller
public class TestAnnotationController {
	//内部跳转
	@RequestMapping("/test3")
	public void test3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
		System.out.println("TestAnnotationController test3()......");
		String url="WEB-INF/jsp/test.jsp";
		request.getRequestDispatcher(url).forward(request, response);//跳转
	}
	//重定向
	@RequestMapping("/test4")
	public void test4(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
		System.out.println("TestAnnotationController test4()......");
		//String url="WEB-INF/jsp/test.jsp";  //重定向代表重新定位,而web-inf下的资源是隐藏的不能直接访问
		//response.sendRedirect(request.getContextPath()+url);//绝对路径
		
		response.getWriter().println("hello test");//通过response.getWriter写回页面
	}
}

在这里插入图片描述
ModelAndView保存数据

@Controller
public class TestAnnotationController {
	@RequestMapping("/test5")
	public String test5(Model model) {
		System.out.println("TestAnnotationController test5()......");
		model.addAttribute("name", "郑爽");
		return "test";//跳转到test.jsp
	}
}

在这里插入图片描述
在这里插入图片描述

4.Spring3中引入的mvc标签

mvc这个命名空间是在Spring3中引入的,其作用是用来支持mvc的配置
需要在<beans>中声明出这个命名空间及其对应的schemaLocation中的值
1.<mvc:annotation-driven>自动注册基于注解风格的映射器和适配器:
在spring2.5中是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter
在spring3中是RequestMappingHandlerMapping和RequestMappingHandlerAdapter.
同时还支持各种数据的转换器
2.<mvc:interceptors>配置自定义的处理器拦截器,
例如:
<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/**"/>
		<ref bean="handlerInterceptor1"/>
	</mvc:interceptor>
</mvc:interceptors>

3.<mvc:resources>逻辑静态资源路径到物理静态资源路径的对应,
例如:
<mvc:resources mapping="/images/**" location="/images/"/>  
<mvc:resources mapping="/js/**" location="/js/"/>  
<mvc:resources mapping="/css/**" location="/css/"/> 

4.<mvc:default-servlet-handler>当在web.xml中DispatcherServlet使用<url-pattern>/</url-pattern> 映射的时候,会静态资源也映射了,
如果配置了这个mvc标签,那么再访问静态资源的时候就转交给默认的Servlet来响应静态文件,否则报404 找不到静态资源错误。

5.<mvc:view-controller>收到相应请求后直接选择相应的视图,直接跳转到某个页面,但是没有携带任何的数据
例如:
<mvc:view-controller path="/test6" view-name="test"></mvc:view-controller>
等同于,直接跳转到test.jsp,没有携带任何的数据
	@RequestMapping("/test6")
	public String a() {
		return "test";//跳转到test.jsp
	}

5.@RequestMapping也可以写在处理器类上

@RequestMapping("/test")
@Controller
public class HomeController {
	@RequestMapping("/home")
	public ModelAndView home(){
		ModelAndView mv = new ModelAndView("index");
		return mv;
	}
}

表明该方法映射的url路径为…/test/home

6.Spring2.5中引入注解对控制器/处理器(controller/handler)支持

@Controller
	用于标识是处理器类;
@RequestMapping
	请求到处理器功能方法的映射规则;
@RequestParam
	请求参数到处理器功能处理方法的方法参数上的绑定;
@ModelAttribute
	请求参数到命令对象的绑定;
@SessionAttributes
	用于声明session级别存储的属性,放置在处理器类上,通常列出模型属性(如@ModelAttribute)对应的名称,则这些属性会透明的保存到session 中
@InitBinder
	自定义数据绑定注册支持,用于将请求参数转换到命令对象属性的对应类型;

7.Spring3引入了更多的注解,其中包含了对RESTful架构风格的支持

@CookieValue
	cookie数据到处理器功能处理方法的方法参数上的绑定;
@RequestHeader
	请求头数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody
	请求的body体的绑定
@ResponseBody
	处理器功能处理方法的返回值作为响应体
@ResponseStatus
	定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler
	注解式声明异常处理器;
@PathVariable
	请求URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持RESTful架构风格的URI;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值