SpringMVC笔记:annotation注解式开发
一、配置式开发
在我们之前的学习中,springmvc使用配置式开发模式,需要在核心配置文件中springmvc.xml注册大量的bean来注入controller控制器,工作繁琐容易出错,下面我们学习一下注解式开发来简化我们的工作。
。。。
案例:
1.控制器
public class MyMultiController extends MultiActionController { /*第一个方法*/ public String doFirst(HttpServletRequest request, HttpServletResponse response){ System.out.println("执行方法一!!!"); return "first"; } /*第二个方法*/ public String doSecond(HttpServletRequest request, HttpServletResponse response){ System.out.println("执行方法二!!!"); return "second"; } }
2.spring注册
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="cn.springmvc.day02handler.MyPropertiesController" id="myPropertiesController"> <property name="methodNameResolver" ref="methodNameResolver">property> bean> <bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver" id="methodNameResolver"> bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello.do">myPropertiesControllerprop> props> property> bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> bean> beans>
3.访问
localhost:8080/hello.do?action=doFirst
-----------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver" id="propertiesMethodNameResolver"> <property name="mappings"> <props> <prop key="/first.do">doFirstprop> <prop key="/second.do">doSecondprop> props> property> bean> <bean class="cn.springmvc.day02handler.MyPropertiesController" id="myPropertiesController"> <property name="methodNameResolver" ref="propertiesMethodNameResolver">property> bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/*.do">myPropertiesControllerprop> props> property> bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/">property> <property name="suffix" value=".jsp">property> bean> beans>
访问:
localhost:8080/first.do | second.do
----------------------------------------------------
二、注解式开发
1.在控制器的类和方法上添加注解
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controllerpublic class MyAnnontation { /*方法一*/ @RequestMapping("/first.do") public ModelAndView getModel(HttpServletRequest request, HttpServletResponse response){ System.out.println("注解方法一!"); ModelAndView mv = new ModelAndView("first"); return mv; } /*方法一*/ @RequestMapping("/second.do") public ModelAndView getView(HttpServletRequest request, HttpServletResponse response){ System.out.println("注解方法二!"); ModelAndView mv = new ModelAndView("second"); return mv; } }
2.配置文件中添加注解驱动
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="cn.springmvc.annotation">context:component-scan> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> bean> <mvc:annotation-driven>mvc:annotation-driven> beans>
3.简单访问
。。。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Annotationtitle> head> <body> <h1>未标明命名空间h1> <form action="/first.do" method="get"> <input type="submit" value="执行方法一"> form> <form action="/second.do" method="get"> <input type="submit" value="执行方法一"> form> <hr/> <h1>已标明命名空间h1> <form action="/annotation/first.do" method="get"> <input type="submit" value="执行方法一"> form> <form action="/annotation/second.do" method="get"> <input type="submit" value="执行方法一"> form> body> html>
三、注解式开发中引入命名空间来避免重名方法的混淆
1.在类名上添加RequestMapping("/name")注解即可区分
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Controller /*命名空间*/ @RequestMapping("/annotation") public class MyAnnontation { /*方法一*/ @RequestMapping("/first.do") public ModelAndView getModel(HttpServletRequest request, HttpServletResponse response){ System.out.println("注解方法一!"); ModelAndView mv = new ModelAndView("first"); return mv; } /*方法一*/ @RequestMapping("/second.do") public ModelAndView getView(HttpServletRequest request, HttpServletResponse response){ System.out.println("注解方法二!"); ModelAndView mv = new ModelAndView("second"); return mv; } }