`
杨胜寒
  • 浏览: 284615 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring MVC3注解学习之简单入门范例

阅读更多

原创文章,转载请注明出处

本文地址:http://www.yshjava.cn/post/430.html

 

之前做Web应用都是在用Struts2,觉得功能强大,效率也能提升很多,所以一直都很喜欢Struts。虽然也曾经在接手前人遗留的项目时遭遇过Spring MVC,不过不知道是前人用的不好,还是自己水平差,亦或者是Spring MVC(那个时候还是2)本身的问题,让Spring MVC给自己留下了很不好的印象:配置文件繁琐、功能一般甚至简陋、不能够在开发效率上与Struts2媲美等等问题,致使自己一直以来都是带着偏见看待Spring MVC的,也因此一直都没有再去尝试过。

最近是一次偶然的机会,再次正面遭遇Spring MVC,不过这次它改头换面,由2升级到3了,看到别人基于Spring MVC注解方式写出来的简洁流畅的代码后,惊叹于Spring MVC3的注解驱动能力之强大,代码之简洁,觉得自己以前的偏见简直就是愚昧至极,不由地暗自对Spring MVC有了好感,打算实实在在尝试一把。

不过自己之前对Spring MVC确实不熟,加之这次升级的内容有点多,所以我找来了一份很好的入门文档《Spring3_MVC注解教程》作为自己的领路人。这份PPT做的很好,本文也是在此基础上有感而发的,在此感谢作者陈雄华先生的辛勤劳动和无私奉献!

本文所示代码均基于最新版SpringFrameword3.2.3,请知悉。

 

Spring MVC框架简介

  • 支持REST风格的URL
  • 添加更多注解,可完全注解驱动
  • 引入HTTP输入输出转换器(HttpMessageConverter)
  • 和数据转换、格式化、验证框架无缝集成
  • 对静态资源处理提供特殊支持
  • 更加灵活的控制器方法签名,可完全独立于Servlet API

 

Spring MVC框架结构

Spring MVC 3框架结构

 

 

框架的实现者

Spring MVC 3框架的默认实现者

 

 

如何在应用中使用Spring-MVC?

  1. 在应用中添加Spring框架支持;
  2. 在web.xml中配置Spring-MVC的请求转发器(前端控制器)
  3. 编写Spring-MVC的配置文件
  4. 将任意JavaBean通过注解配置成Controller(控制器)并注解其中的方法
  5. 完成

 

步骤简单明了,接下来我们一步一步详细说明:

在应用中加入Spring支持:

因为Spring-MVC是属于SpringFramework的一部分,因此要在应用中使用Spring-MVC,就必须以引入Spring基础框架为前提,另外还包括beans、context、aop、web组件,将上述组件的jar及其依赖添加到buildpath下,就算完成了为应用添加Spring框架支持的工作,然后在web.xml中配置Spring的监听器,代码如下:

<!-- 该监听器将在Web容器启动时激活Spring -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


另外,因为是在web应用中使用Spring,因此建议配置一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器来处理资源回收的工作:

<!-- 处理由JavaBeans Introspector的使用而引起的缓冲泄露 -->
<listener>
	<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>

 

再配置一个编码过滤器

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping> 


 

在web.xml中配置Spring-MVC的请求转发器(前端控制器)

在应用中使用Spring-MVC比较简单,除了需要引入相关依赖库外,还需要在web.xml配置Spring-MVC的请求转发器,代码如下:

<servlet>
	<servlet-name>SpringMVCDispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<!-- 声明Spring MVC配置文件路径 -->
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:mvc-config.xml
		</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>SpringMVCDispatcher</servlet-name>
	<!-- 监听所有请求,注意这里是/而不是/*,否则将会造成jsp页面不能正常渲染等问题 -->
	<url-pattern>/</url-pattern>
</servlet-mapping>

 

编写Spring-MVC的配置文件

在上述代码中,我们告知Spring-MVC的请求转发器我们的mvc配置在classpath:mvc-config.xml中,因此我们需要在该文件中正确描述我们的mvc配置信息,配置代码如下:

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		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-3.0.xsd">

	<!-- 扫描指定包下面通过注解配置的组件 -->
    <context:component-scan base-package="cn.ysh.studio.spring.mvc.web"/>

	<!-- 添加自动代理功能 -->
	<aop:aspectj-autoproxy proxy-target-class="true"/>

	<!-- 默认的注解处理器映射,必须配置 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<property name="useDefaultSuffixPattern" value="false" />
 	</bean>
 	
 	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
			</list>
		</property>
	</bean>
 	
 	<!-- RESTful风格链接,处理静态资源无法访问的问题 -->
    <mvc:default-servlet-handler />
    
    <!-- 基于内容协商的视图解析器,其中可以配置多个视图解析器 -->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="viewResolvers">
        	<list>
        		<!-- JSP/HTML页面的视图解析器 -->
			    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			        <property name="prefix" value="/WEB-INF/jsp/"/>
			        <property name="suffix" value=".jsp"/>
			        <property name="contentType" value="text/html;charset=UTF-8"/>
					<property name="order" value="2"/>
			    </bean>
			    <!-- FreeMarker模板的视图解析器 -->
			    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
					<property name="prefix" value="/WEB-INF/views/" />
					<property name="suffix" value=".ftl" />
					<property name="contentType" value="text/html;charset=UTF-8"/>
					<property name="order" value="2"/>
			        <property name="exposeSpringMacroHelpers" value="true"/>  
				</bean>
        	</list>
        </property>
    </bean>
    
    <!-- 根路径默认视图,非必须,可以去掉 -->
    <mvc:view-controller path="/" view-name="welcome" />
    
    <!-- 异常处理,非必须,可以去掉 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="exception"/>
        <property name="warnLogCategory" value="warn"/>
    </bean>

</beans>

 

将任意JavaBean通过注解配置成Controller(控制器)并注解其中的方法

本文主要示范如何使用注解为应用添加Spring-MVC支持,因此本文中的所有MVC映射配置都采用注解方式,范例Controller如下所示:

package cn.ysh.studio.spring.mvc.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import cn.ysh.studio.spring.mvc.bean.User;

/**
 * @author Shenghany
 */
//通过注解将VisitController声明为一个Controller控制器
@Controller
//声明该Controller控制器的请求映射路径为/visit(非必须,可以不声明)
@RequestMapping("/visit")
public class UserController {

	//将当前方法的请求映射路径声明为create
    @RequestMapping("create")
    /**
     * 该方法将处理请求到/visit/create(控制器的映射路径(可以没有) + 处理方法的映射路径)路径的HTTP请求
     * @param model 将会被带到view层使用的数据模型
     * @return 逻辑视图名
     */
    public String create(Model model) {
        return "create";
    }

    @RequestMapping(value = "/visits", method = RequestMethod.POST)
    public ModelAndView visits() {
        ModelAndView mav = new ModelAndView("visitList");
        mav.addObject("visits", "");
        return mav;
    }
    
    @RequestMapping(value = {"/show", "view"}, method = {RequestMethod.GET, RequestMethod.POST})
    public String show(User user, Model model) {
        model.addAttribute("username", "springmvc");
        model.addAttribute("password", "类型非常灵活");
        return "show";
    }
    
    @RequestMapping("/hello/{username}")
    public String hello(@PathVariable("username")/*URL中的{xxx}占位符可以通过@PathVariable("xxx")绑定到操作方法的入参中*/String username, Model model) {
        model.addAttribute("username", username);
        model.addAttribute("password", "类型非常灵活");
        return "hello";
    }
    

}

 

为了是上面的Controller能够正常使用,我们还需要在WebRoot下创建Controller中使用的逻辑视图对应的视图文件,以上例中create为例,我们在WEB-INF/jsp/目录下新建jsp文件,内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>创建新用户</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
  </head>
  
  <body>
    这是一个创建新用户的页面,对应的请求地址为<%=basePath%>visit/create
  </body>
</html>

 

完成上述四个步骤后,将工程部署到任意web容器(本文采用tomcat6.0),然后启动,即可在浏览器中浏览映射出来的地址,如果需要在记录详细的Spring调试信息,则可以通过配置log4j来实现(这里多说一句,Spring的调试信息真的很详细很丰富,通过分析日志,将有助于我们快速理解和掌握Spring-MVC的工作原理)。

以访问示例中create地址为例,结果图如下所示:

Spring MVC3范例预览结果

 

至此,Spring-MVC算是简单入门了,但上述例子并未展现Spring-MVC注解的强大功能,稍后将会在一个单独的篇幅中详细介绍。

原创文章,转载请注明出处http://www.yshjava.cn/post/430.html

 

 

 

 

 

 

0
5
分享到:
评论

相关推荐

    Spring MVC 基于注解实例

    Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于...

    Spring MVC+MyBatis开发从入门到项目实战

    第3篇是Spring MVC技术入门,包括Spring MVC的背景介绍、架构整体剖析、环境搭建、处理器与映射器的讲解、前端控制器的源码分析、多种视图解析器的介绍、请求映射与参数绑定的介绍、Validation校验与异常处理和拦截...

    Spring MVC 的注解使用实例

    主要介绍Spring MVC 的使用注解来配置的使用实例

    学习Spring MVC,关于注解的Spring MVC,简单例子,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例

    学习Spring MVC,关于注解的Spring MVC,简单例子,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    Spring MVC MyBatis开发从入门到项目实战

    Spring MVC MyBatis开发从入门到项目实战

    精通Spring MVC 4

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...

    spring mvc 入门范例

    spring mvc 入门范例,包学包会!

    Spring mvc指南+Spring mvc入门

    spring mvc 实战指南和spring mvc入门:图解加源代码

    spring MVC_快速入门

    39页的PDF文档,简单详细的介绍了spring MVC的入门知识。 对spring MVC的入门有很大的帮助。

    spring mvc入门小例子

    spring mvc入门小例子spring mvc入门小例子spring mvc入门小例子spring mvc入门小例子spring mvc入门小例子

    Spring MVC入门教程

    十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...

    IT学习者Spring MVC注解实例.pdf

    IT学习者Spring MVC注解实例.pdf

    Spring MVC 教程 快速入门 深入分析

    Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...

    Spring MVC非注解测试

    Spring MVC非注解测试,用于理解spring mvc原理,然后再结合源码分析,更好的理解spring mvc

    Spring MVC学习指南 高清完整.pdf版下载

    通俗移动的Spring MVC入门书籍。请尊重版权,禁止用于商业目的。

    大优惠 Spring MVC学习指南(第2版)2017.pdf

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...

    Spring MVC 学习记录总结1

    Spring MVC 学习记录总结Spring MVC 是目前主流的实现MVC设计模式的框架,是Spring 框架的一个分支产品,以 Spring IoC 容器

    Spring MVC学习指南

    以下这个学习案例是我最近学习Spring MVC时跟从一本 书上的示例,原文中的示例代码有一些小错误,不过我 在调试的过程中已经给予了修正,如还有其它错误,还 请各位批评指正。 对于现有较成熟的Model-View-...

    spring mvc入门示例

    spring mvc入门示例

Global site tag (gtag.js) - Google Analytics