springmvc注解
一.spring-serlvet.xml
1 <!-- 注解搜索包 --> 2 <context:component-scan base-package="com.dwl.controller.annotation"></context:component-scan> 3 <!-- 注解需要的两个支持,开启注解 --> 4 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> 5 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
二.Controller
1 @Controller 2 public class PersonController { 3 4 @RequestMapping(value="/test/add" , method=RequestMethod.GET ) 5 public ModelAndView add(){ 6 String data = "这是一个添加人的方法"; 7 return new ModelAndView("/index","data",data); 8 } 9 @RequestMapping(value="/test/del" , method=RequestMethod.GET) 10 public ModelAndView delete(){ 11 String data = "删除人的方法"; 12 return new ModelAndView("/index" , "data" , data); 13 } 14 15 }
这样就可以实现springmvc注解,但是我们这样看很别扭,无论是xml还是Controller,配置的很繁琐,和原来我们学的annotation不太一样,下面,就进行一下springmvc注解的优化
1.优化xml配置
这个注解需要两个类来支持,也可以说成开启注解,这两句话不好记也不好写,这个可以换成
1 <!-- 注解需要的两个支持,开启注解 --> 2 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> 3 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> 4 <!-- 上面两句话可以合成下面这一句话 --> 5 <mvc:annotation-driven/>
2.优化访问路径(Controller)
在Controller里,注解@RequestMapping(value="/test/del",这里的/test/,我们每个方法都要写个,这根java的规范有冲突,所以,这句话可以提到类上面来,意思就是为这个类下面的所有方法都添加这个路径。
1 @Controller 2 @RequestMapping(value="/test") 3 public class PersonController { 4 5 @RequestMapping(value="/add" , method=RequestMethod.GET ) 6 public ModelAndView add(){ 7 String data = "这是一个添加人的方法"; 8 return new ModelAndView("/index","data",data); 9 } 10 @RequestMapping(value="/del" , method=RequestMethod.GET) 11 public ModelAndView delete(){ 12 String data = "删除人的方法"; 13 return new ModelAndView("/index" , "data" , data); 14 } 15 16 }
3.优化method(Controller)
@RequestMapping(value="/add" , method=RequestMethod.GET),这里的提交方式method,如果说页面是post提交,而这里是get,那就会有错,这个问题不大,但是如果代码量庞大的话,你肯定得懵,这里,可以不用写,method=RequestMethod.GET,这句话可以去掉,springmvc会自动的根据你提交的方式提交。
1 @RequestMapping(value="/add") 2 public ModelAndView add(){ 3 String data = "这是一个添加人的方法"; 4 return new ModelAndView("/index","data",data); 5 }
4.优化value(Controller)
@RequestMapping(value="/add"),这里面只有一个value感觉很多余,我们可以把这个value去掉
1 @RequestMapping("/add") 2 public ModelAndView add(){ 3 String data = "这是一个添加人的方法"; 4 return new ModelAndView("/index","data",data); 5 }
5.优化ModelAndView(Controller)
我们记得struts的action返回的是void或者String,没有这个返回值,我们每次引用也很不方便,这里也可以改成String,那么修改成String的话我们怎么想页面传值呢?
我们先用最原始的request。
1 @RequestMapping("/add") 2 public String add(HttpServletRequest request){ 3 String data = "这是一个添加人的方法"; 4 request.setAttribute("data", data); 5 return "/index"; 6 }
优化这我5个点我们在来看看,springmvc
1.配置文件xml
1 <!-- 注解搜索包 --> 2 <context:component-scan base-package="com.dwl.controller.annotation"></context:component-scan> 3 <!-- 注解需要的两个支持,开启注解 --> 4 <mvc:annotation-driven/>
2.Controller
1 @Controller 2 @RequestMapping(value="/test") 3 public class PersonController { 4 5 @RequestMapping("/add") 6 public String add(HttpServletRequest request){ 7 String data = "这是一个添加人的方法"; 8 request.setAttribute("data", data); 9 return "/index"; 10 } 11 @RequestMapping("/del" ) 12 public String delete(HttpServletRequest request){ 13 String data = "删除人的方法"; 14 request.setAttribute("data" , data); 15 return "/index"; 16 } 17 18 }
和上面的以比较,看着很清爽,这里如果你想操作响应的,直接在给方法参数添加响应HttpservletResponse就行了。