springmvc基于注解的开发
注解第一个例子
1. 创建web项目 springmvc-2
2. 在springmvc的配置文件中指定注解驱动,配置扫描器
2. 在springmvc的配置文件中指定注解驱动,配置扫描器
<!-- sprimgmvc 注解驱动 --> <!-- <mvc:annotation-driven /> --> <!-- springmvc的扫描器,一旦有扫描器的定义上面的mvc:annotation.. 就不需要了,扫描器已经有哪里注解驱动的功能 --> <context:component-scan base-package="cn.edu.hqu.springmvc"></context:component-scan> <!--视图解析器 前缀+ viewName +后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- webroot到某一指定的文件夹的路径 --> <property name="prefix" value="/WEB-INF/"></property> <!-- 视图名称的后缀 --> <property name="suffix" value=".jsp"></property> </bean> </beans>在cn.hqu.springmvc下 新 建 TestController
package cn.edu.hqu.springmvc; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller//用来标注当前类是springmvc的控制层的类 @RequestMapping("/test") //controller的唯一标识或者命名空间 public class TestController { /** * 方法的返回值是ModelAndVIew中的viewName * @return */ @RequestMapping("/hello.do")//用来访问控制层的方法的注解 public String hello(){ return "jsp/index"; } }3. @controller:标识当前类是控制层的一个具体的实现
4. @requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问。
类上面有@RequestMapping("/test")访问:localhost:8080/springmvc-2/test/hello.do
没有的话:localhost:8080/springmvc-2/hello.do
部署,访问;
注解方式参数
在TestController
/** * HttpServletRequest可以直接定义在参数的列表 * @param request * @return */ @RequestMapping("/toPerson.do") public String toPerson(HttpServletRequest request) { String result = request.getParameter("name"); System.out.println(result); return "jsp/index"; }重启tomcat访问:http://localhost:8080/springmvc-2/test/toPerson.do?name=jerome
控制台输出:jerome
/** * 在参数列表上直接定义要接收的参数名称,只要参数名称能匹配的上就能接收所传过来的数据 * 可以自动转换成参数列表里面的类型,注意的是值与类型之间是可以转换的 * @param name * @return */ @RequestMapping("/toPerson1.do") public String toPerson1(String name,Integer age,String address){ System.out.println(name+" "+age+" "+address); return "jsp/index"; }地址栏和代码两边的参数要一致;
重启tomcat,访问:
http://localhost:8080/springmvc-2/test/toPerson1.do?name=jerome&age=23&address=china
控制台输出:jerome 23 china
如果有时间类型要 注册属性编辑
/** * 注册时间类型的属性编辑器 * @param binder */ @InitBinder public void initBinder(ServletRequestDataBinder binder){ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); }
@RequestMapping("/toPerson1.do") public String toPerson1(String name,Integer age,String address,Date birthday){ System.out.println(name+" "+age+" "+address+" "+birthday); return "jsp/index"; }重启tomcat,访问
http://localhost:8080/springmvc-2/test/toPerson1.do?name=jerome&age=23&address=china&birthday=2012-12-12
控制台输出:jerome 23 china Wed Dec 12 00:00:00 CST 2012
Springmvc接收实体类:
在cn.edu.hqu.entity 新建一个类Person,将上面的四个参数写进去,get set方法和toString方法;
/** * 传递的参数名字必须要和实体类的属性set方法后面的字符串匹配的上才能接收到参数 * @param person * @return */ @RequestMapping("/toPerson2.do") public String toPerson2(Person person){ System.out.println(person); return "jsp/index"; }重启tomcat 执行
http://localhost:8080/springmvc-2/test/toPerson2.do?name=jerome&age=23&address=china&birthday=2012-12-12
控制台输出:
Person [name=jerome, address=china, birthday=Wed Dec 12 00:00:00 CST 2012, age=23]
浏览器参数首字母大写没影响;
如果多个实体类:添加实体类User 属性:name age;get set toString方法;
/** * 传递的参数名字必须要和实体类的属性set方法后面的字符串匹配的上才能接收到参数 * 请求中的参数只要是能和参数列表里面的变量名或者实体里面的set后面的字符串匹配的上就能接受到 * @param person * @return */ @RequestMapping("/toPerson2.do") public String toPerson2(Person person, User user){ System.out.println(person); System.out.println(user); return "jsp/index"; }重启tomcat 执行
http://localhost:8080/springmvc-2/test/toPerson2.do?name=jerome&age=23&address=china&birthday=2012-12-12
控制台输出:
Person [name=jerome, address=china, birthday=Wed Dec 12 00:00:00 CST 2012, age=23]
User [name=jerome, age=23]
接收一个数组;
http://localhost:8080/springmvc-2/test/toPerson3.do?names=jerome&names=jelly
控制台输出:
jerome
jelly
项目源码:http://pan.baidu.com/s/1bntiZzp
/** * 对数组的接收 * @param names * @return */ @RequestMapping("/toPerson3.do") public String toPerson3(String[] names){ for(String result:names){ System.out.println(result); } return "jsp/index"; }重启tomcat 执行
http://localhost:8080/springmvc-2/test/toPerson3.do?names=jerome&names=jelly
控制台输出:
jerome
jelly
项目源码:http://pan.baidu.com/s/1bntiZzp