注解实现spring mvc的Controlle、service、dao。
[b]1.注解Controller[/b]
创建注解Controller类。
@Controller注解说明是一个controller类。
@RequestMapping("/annonation")注解可用在类、方法上,说明要将类或方法绑定到servlet下的/annonation路径。
在root-context.xml中加入以下配置以支持spring注解、扫描和mvc注解支持、默认解析器handler。
部署后访问[url]http://localhost:8080/testSpringWeb/annonation[/url]可看到结果:
annonation
[b]2.注解service、dao[/b]
按照[url]http://sb33060418.iteye.com/blog/2372867[/url]中的测试步骤,在相同包中创建接口类TestService、TestDao和实现类TestServiceAnnoImpl、TestDaoAnnoImpl。
新建TestController。
因类中使用@Controller、@Service、@Repository、@Autowired等注解,spring将创建bean并自动注入。
方法上@RequestMapping(value = "/test")注解的地址会/test在类注解/test之后被拦截。
重新部署后,访问[url]http://localhost:8080/testSpringWeb/test/test?param=anno[/url]看到结果:
testServiceImpl.test:testDaoImpl.test:anno
不是注解service、dao实现。
因为controller中被byName方式注入了xml文件配置的TestServiceImpl、TestDaoImpl。
注释掉root-context.xml中引入service、dao的配置
再重新部署后,访问测试地址可看到期待的结果:
testServiceAnnoImpl.test:testDaoAnnoImpl.test:anno
[b]3.Controller绑定多个地址[/b]
在实际应用中,经常会把一个模块下的多个资源放在一个Controller类中实现,以共享相同的service、变量定义等。这就需要为单个Controller的不同方法绑定不同地址。
在TestController中增加方法:
方法上的@RequestMapping(value = "/index")注解会将/index地址绑定到类地址/test后,拦截/test/index请求。
重新部署后,访问[url]http://localhost:8080/testSpringWeb/test/index[/url]和之前的/test/test可以看到不同的结果。
因注解实现Controller功能,因此类不需再实现Controller接口,也就不用再实现接口中的handleRequest抽象方法,可以使用其他方法名。
[b]4.指定支持的请求方法[/b]
@RequestMapping(value = "/index")默认只支持get方法访问,如果使用post、put等方法访问时会报错:
405 Method Not Allowed
需要配置对不同请求方法的支持,修改注解如下:
这样方法就可以通过get、post方式访问了。同样也可以配置put和delete方法,以实现支持restful样式的服务。
[b]1.注解Controller[/b]
创建注解Controller类。
package com.sunbin.test.testSpring.web.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.stereotype.Controller;
@Controller
public class AnnonationController {
@RequestMapping("/annonation")
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
// TODO Auto-generated method stub
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "annonation");
modelAndView.setViewName("helloWorld");
return modelAndView;
}
}
@Controller注解说明是一个controller类。
@RequestMapping("/annonation")注解可用在类、方法上,说明要将类或方法绑定到servlet下的/annonation路径。
在root-context.xml中加入以下配置以支持spring注解、扫描和mvc注解支持、默认解析器handler。
<!-- 注解声明,使用context:component-scan后可省略 -->
<context:annotation-config />
<!-- 开启controller注解支持 -->
<context:component-scan base-package="com.sunbin"></context:component-scan>
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven/>
<!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
<mvc:default-servlet-handler />
部署后访问[url]http://localhost:8080/testSpringWeb/annonation[/url]可看到结果:
annonation
[b]2.注解service、dao[/b]
按照[url]http://sb33060418.iteye.com/blog/2372867[/url]中的测试步骤,在相同包中创建接口类TestService、TestDao和实现类TestServiceAnnoImpl、TestDaoAnnoImpl。
新建TestController。
package com.sunbin.test.testSpring.web.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.sunbin.test.testSpring.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@RequestMapping(value = "/test")
public class TestController {
@Autowired
public TestService testService;
@RequestMapping(value = "/test")
public ModelAndView test(HttpServletRequest request,
HttpServletResponse reponse) throws Exception {
// TODO Auto-generated method stub
String param = request.getParameter("param");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", testService.test(param));
modelAndView.setViewName("helloWorld");
return modelAndView;
}
}
因类中使用@Controller、@Service、@Repository、@Autowired等注解,spring将创建bean并自动注入。
方法上@RequestMapping(value = "/test")注解的地址会/test在类注解/test之后被拦截。
重新部署后,访问[url]http://localhost:8080/testSpringWeb/test/test?param=anno[/url]看到结果:
testServiceImpl.test:testDaoImpl.test:anno
不是注解service、dao实现。
因为controller中被byName方式注入了xml文件配置的TestServiceImpl、TestDaoImpl。
注释掉root-context.xml中引入service、dao的配置
<!-- <import resource="services.xml"/>
<import resource="daos.xml"/> -->
再重新部署后,访问测试地址可看到期待的结果:
testServiceAnnoImpl.test:testDaoAnnoImpl.test:anno
[b]3.Controller绑定多个地址[/b]
在实际应用中,经常会把一个模块下的多个资源放在一个Controller类中实现,以共享相同的service、变量定义等。这就需要为单个Controller的不同方法绑定不同地址。
在TestController中增加方法:
@RequestMapping(value = "/index")
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
// TODO Auto-generated method stub
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "test/index");
modelAndView.setViewName("helloWorld");
return modelAndView;
}
方法上的@RequestMapping(value = "/index")注解会将/index地址绑定到类地址/test后,拦截/test/index请求。
重新部署后,访问[url]http://localhost:8080/testSpringWeb/test/index[/url]和之前的/test/test可以看到不同的结果。
因注解实现Controller功能,因此类不需再实现Controller接口,也就不用再实现接口中的handleRequest抽象方法,可以使用其他方法名。
[b]4.指定支持的请求方法[/b]
@RequestMapping(value = "/index")默认只支持get方法访问,如果使用post、put等方法访问时会报错:
405 Method Not Allowed
需要配置对不同请求方法的支持,修改注解如下:
@RequestMapping(value = "/index", method = { RequestMethod.GET,
RequestMethod.POST })
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
...
这样方法就可以通过get、post方式访问了。同样也可以配置put和delete方法,以实现支持restful样式的服务。