spring mvc(三)注解

注解实现spring mvc的Controlle、service、dao。

[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样式的服务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值