使用注解的原因

最方便的还是启用注解

注解方便,而且项目中很流行。

配置文件尽量减少,主要使用注解方式。

Springmvc的注解是在2.5版本后有了注解,如何开启注解?

修改springmvc配置文件

Web.xml文件中不需要修改,只修改springmvc配置文件

新建一个springmvc的配置文件,取名为springAnnotation-servlet.xml

删除掉之前文件中的bean和多方法的配置,springAnnotation-servlet.xml文件内容如下:

<?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:p="http://www.springframework.org/schema/p"  

    xmlns:mvc="http://www.springframework.org/schema/mvc"  

    
xmlns:context="http://www.springframework.org/schema/context"       

    
xsi:schemaLocation="http://www.springframework.org/schema/beans 

  
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

            http://www.springframework.org/schema/context 

        
http://www.springframework.org/schema/context/spring-context-3.0.xsd  

            http://www.springframework.org/schema/mvc 

            
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

     <!-- 静态资源访问 -->

<mvc:resources location="/img/" 
mapping="/img/**"/>
   
 <mvc:resources 
location="/js/" mapping="/js/**"/>
 
   
<bean 
id="viewResolver" 
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     
<property name="prefix" 
value="/"></property>
   
<property 
name="suffix" 
value=".jsp"></property>
   
</bean>
</beans>

配置分两步

1)配置扫描包

这个配置文件的书写需要一个扫描包。

在springAnnotation-servlet.xml中配置

<context:component-scan base-package="com.tgb.web.controller.annotation"></context:component-scan>

这个配置的意思是:

Spring再启动的时候,会默认扫描自动扫描包下的所有的类,为每个注解分配一个mapping。

上面的配置是,在启动的时候会扫描com.tgb.web.controller.annotation下所有的包

2)配置spring注解的两个bean
<bean 
class="org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>   

     <bean 
class="org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

这两个bean的功能

1)AnnotationMethodHandlerAdapter

是方法映射的,不同方法有不同url请求,根基类找方法。

2)DefaultAnnotationHandlerMapping

DefaultAnnotationHandlerMapping根据扫描的包下面找类,即通过url找类

注意:

一定要把包找对,我就犯过错,两个包都在org.springframework.web.portlet目录下找的类,我用的是两个包分别是
org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.portlet.mvc.annotation.DefaultAnnotationHandlerMapping
其实应该是org.springframework.web.servlet目录下找类。
两个包分别是:
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
修改web.xml中的springmvc的配置文件
修改web.xml文件,使其使用新建的springmvc配置文件springAnnotation-servlet.xml
<?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:p="http://www.springframework.org/schema/p"  
    
xmlns:mvc="http://www.springframework.org/schema/mvc"  
    
xmlns:context="http://www.springframework.org/schema/context"       
    
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
      
      http://www.springframework.org/schema/context 
      
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
 
      
      http://www.springframework.org/schema/mvc 
      
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
 
    
 <!-- 注解扫描包 -->
    
 <context:component-scan base-package="com.tgb.web.controller.annotation" 
/>
    
 <!-- 开启注解 -->     
    
 <!--  bean 
class="org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> 
-->   
    
 <bean 
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
    
 <bean 
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
    
 <!-- 静态资源访问 -->
    
 <mvc:resources location="/img/" mapping="/img/**"/>
    
<mvc:resources location="/js/" mapping="/js/**"/>
 
  
 <bean id="viewResolver" 
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  
 <property name="prefix" value="/"></property>
  
 <property name="suffix" value=".jsp"></property>
  
 </bean>
</beans>

新建一个类(userController)来实现注解

新建包

新建一个包,下面的controller都使用注解

新建controller的包,在这个包下的controller都使用配置文件。

选择com.tgb.web.controller,邮件点击new-other-package,填新建的包名为annotation。

新建类userController(GET请求)

注解打开后,看看注解如何使用。

 

userController类实现如下:
package 
com.tgb.web.controller.annotation;
 
import 
org.springframework.stereotype.Controller;
import 
org.springframework.web.bind.annotation.RequestMapping;
import 
org.springframework.web.bind.annotation.RequestMethod;
import 
org.springframework.web.servlet.ModelAndView;
 
@Controller
public 
class UserController {
    
    
@RequestMapping(value="/user/addUser",method=RequestMethod.GET)
    public ModelAndView adduser(){
    String result = "this is adduser------";
        return new 
ModelAndView("/annotation","result",result);
    }
    
    
@RequestMapping(value="/user/delUser",method=RequestMethod.GET)
    public ModelAndView delUser(){
    String result = "this is delUser------";
        return new 
ModelAndView("/annotation","result",result);
    }
}

 

 

Spring常用注解:

<!--[if !supportLists]-->1.       
<!--[endif]-->类的注解
类注解用到了@Controller
@Controller表明下面是个Controller类
org.springframework.stereotype.Controller
 
@Component
@Target(value={TYPE})
@Retention(value=RUNTIME)
@Documented 
 
<!--[if !supportLists]-->2.       
<!--[endif]-->方法注解

方法注解用到了@RequestMapping

@RequestMapping表明下面的方法是个Controller的方法。
org.springframework.web.bind.annotation.RequestMapping
 
@Mapping
@Target(value={METHOD, TYPE})
@Retention(value=RUNTIME)
由上面的信息可以看出,注解类RequestMapping的返回值是Mapping,方法参数有2个,第一个是Method,第二个是Type,即Method是请求的方法,Type是请求的类似是get还是post。 
 @RequestMapping(value="/user/delUser",method=RequestMethod.GET)

新建一个view——annotation.jsp

新建一个view来实现userController的效果
<%@ page language="java" contentType="text/html; 
charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" 
uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" 
src="../js/jquery-1.7.min.js"></script>