【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页面显示: