【springmvc 3】----配置 VS 注解方式


【springmvc 3】----配置 VS 注解方式







    Springmvc 在springmvc-xml有配置和注解方式两种,今天小编对两种都方式都进行了

一个代码的实践,我们发现,现在其实是发注解方式是比较的常用的,注解方式简单、

方便可见一斑:



配置方式的代码:


    springmvc -xml:

<!-- 需要配置controller,handlerMapping,ViewResolver, interceptor -->
        
        <!-- 映射处理器之间是独立的,不相互影响 -->
        <!-- 默认的映射处理器 -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
        
        <!-- 简单url的映射处理器 -->
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="/hello1.do">testController</prop>
                </props>
            </property>
        </bean>
        
        <!-- 控制器的类名映射处理器 -->
        <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
        
        <!-- 使用默认的映射处理器来映射controller -->
        <bean id="testController" name="/hello.do" class="cn.itcast.springmvc.TestController"></bean>
  


      
TestController.java:
 
public class TestController extends AbstractController {


	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		System.out.println("hello springmvc");
		//viewName不是jsp的名称而是前缀与后缀之间的路径字符串
		return new ModelAndView("jsp1/index");
	}
	
	


}






注解方式代码


   (只要将上面的配置方式换成MVC注解驱动+扫描即可):

 

handler 实现的两个注解: @Controller 标志它是一个控制器; @RequestMapping("/url")



springmvc-xml:
<!-- mvc注解的驱动 -->            
        <mvc:annotation-driven/>
        <!-- 一档有扫描器的定义MVC:annotation-driven 就不需要,扫标签已经有了注解驱动的功能 -->
        <context:component-scan base-package="cn.itcast.springmvc"/>
        


TestController.java
@Controller //用来标注当前类 springmvc的控制层类
@RequestMapping("/test")// controller ,唯一标识或命名空间
public class TestController {
  //有哪些注解方式:@controller同类别的注解: @service 一般用于服务层  ,@component 标注无法分层的类 ,@response 标注DAO层
    
    /** 
     * 方法的返回值代表 ModelAndViewH懂得ViewName
     * @return
     */
    @RequestMapping("/hello.do")//用来访问控制层方法的主角
        public String hello()
    {
        System.out.println("you did a good job, Daniel!");
        return"jsp1/index";        
    }




最后的显示结果:

其实两种情况都是相同的如下:


         


 
index.jsp页面显示:

               
  
 


 
整个例子代码如下:
 

                     
  
 


springmvc-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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-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/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">    
        
        
                                
        <!--  需要配置方式:controller,handlerMapping,ViewResolver, interceptor 
        
        映射处理器之间是独立的,不相互影响
        默认的映射处理器
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
        
        简单url的映射处理器
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="/hello1.do">testController</prop>
                </props>
            </property>
        </bean>
        
        控制器的类名映射处理器
        <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
        
        使用默认的映射处理器来映射controller
        <bean id="testController" name="/hello.do" class="cn.itcast.springmvc.TestController"></bean>
         -->
         
         
         <!--使用注解方式 -->
         <!-- mvc注解的驱动 -->            
        <mvc:annotation-driven/>
        <!-- 一档有扫描器的定义MVC:annotation-driven 就不需要,扫标签已经有了注解驱动的功能 -->
        <context:component-scan base-package="cn.itcast.springmvc"/>
        
         
         
        <!-- 前缀+ viewName +后缀 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- webroot到某一指定的文件夹的路径 -->
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <!-- 视图名称的后缀 -->
            <property name="suffix" value=".jsp"></property>
        </bean>
</beans>




web-xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    
    <!-- 中央控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- struts习惯使用/*,在springmvc不管用 -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
</web-app>





index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
    hello springmvc!you 
  are so good!</body>
</html>





TestController.java:
package cn.itcast.springmvc;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //用来标注当前类 springmvc的控制层类
@RequestMapping("/test")// controller ,唯一标识或命名空间
public class TestController {
  //有哪些注解方式:@controller同类别的注解: @service 一般用于服务层  ,@component 标注无法分层的类 ,@response 标注DAO层
    
    /** 
     * 方法的返回值代表 ModelAndViewH懂得ViewName
     * @return
     */
    @RequestMapping("/hello.do")//用来访问控制层方法的主角
        public String hello()
    {
        System.out.println("you did a good job, Daniel!");
        return"jsp1/index";        
    }
    
}









最终的显示结果其实两种情况都是相同的如下:


            


 
index.jsp页面显示:

                    
  






评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值