原创文章,转载请注明出处
本文地址: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?
- 在应用中添加Spring框架支持;
- 在web.xml中配置Spring-MVC的请求转发器(前端控制器)
- 编写Spring-MVC的配置文件
- 将任意JavaBean通过注解配置成Controller(控制器)并注解其中的方法
- 完成
步骤简单明了,接下来我们一步一步详细说明:
在应用中加入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-MVC算是简单入门了,但上述例子并未展现Spring-MVC注解的强大功能,稍后将会在一个单独的篇幅中详细介绍。
原创文章,转载请注明出处http://www.yshjava.cn/post/430.html
相关推荐
通过阅读《Spring MVC 3 最简单的入门示例 - OPEN 开发经验库.mht》和《spring-mvc-step-by-step.pdf》,你可以深入了解每个步骤的细节,包括设置项目、编写控制器、创建视图以及进行测试。这些文档会逐步指导你完成...
### Spring MVC MyBatis ExtJS 3.4 ...综上所述,这个案例综合运用了Spring MVC、MyBatis、ExtJS 3.4以及Oracle数据库等多种技术手段,实现了一个完整的权限管理系统,为进销存产品的开发提供了一个优秀的参考范例。
在"SPRINGMVC 注解范例程序"中,我们可以深入理解 Spring MVC 如何利用注解进行配置简化,提高开发效率。下面将详细介绍 Spring MVC 中的关键注解和其工作原理。 1. **@Controller**:这是 Spring MVC 中的核心注解...
Java Web入门范例是针对初学者提供的一系列实例教程,主要涵盖了使用Java技术栈构建Web应用程序的基本步骤。在这个集合中,我们重点讨论了Spring框架、Hibernate ORM工具以及如何与MSSQL和MYSQL数据库进行交互。下面...
5. 实现业务逻辑:在Action类中,通过@Autowired注解或通过Spring的getBean方法获取由Spring管理的Service类,然后在Service中调用Hibernate的相关操作来处理业务逻辑。 6. 控制事务:Spring的声明式事务管理可以在...
本文将深入探讨如何基于注解实现Spring MVC的范例,旨在为初学者提供一个清晰的入门指南。 一、Spring MVC简介 Spring MVC是Spring框架的一部分,用于构建Web应用程序。它遵循Model-View-Controller(MVC)设计模式...
(3)创建日期转换类DateConverter,实现String类型到Date类型的转换。 (4)创建order.jsp页面。 (5)配置springmvc-config.xml文件。 (6)创建一个result.jsp结果页面(置于/WEB-INF/jsp目录下),用于显示接收到订单信息...
这个"SpringMVC 完整范例"可以帮助开发者深入理解Spring MVC和FreeMarker的结合使用,从项目结构、配置到实际编码,每个环节都有所涉及,对于学习和提升Web开发技能非常有帮助。通过实践这个范例,你可以更加熟练地...
以上这些知识点涵盖了Spring框架的多个方面,通过学习和实践,你可以深入了解Spring并将其应用到实际项目中,提升开发效率和软件质量。在“spring经典范例”压缩包中,可能包含了这些知识点的具体示例代码,有助于...
Java MVC(Model-View-...总结起来,Java MVC模式范例是一个典型的Web应用程序设计案例,通过模型处理数据,视图展示数据,控制器协调二者,配合DAO模式实现与数据库的交互,以达到高效、可维护的软件开发目标。
在"Struts2+Hibernate+Spring整合开发深入剖析与范例应用05"的源码中,我们可以看到具体的配置文件(如struts.xml、spring-context.xml、hibernate.cfg.xml)、Action类、Service类、DAO类以及实体类等。通过对这些...
4. **MVC(Model-View-Controller)**:Spring MVC是Spring提供的Web开发框架,用于构建RESTful应用程序。示例中会展示如何配置DispatcherServlet、创建Controller、模型绑定以及视图解析。 5. **JPA(Java ...
这个标题"ssh简单的范例,快速入门ssh"表明我们将探讨SSH的基本概念、配置和应用,适合初学者快速掌握SSH的使用。 SSH框架通常指的是Spring、Struts和Hibernate这三个Java开源框架的组合,它们一起构建了企业级Web...
在这个"Struts2+Hibernate+Spring整合开发深入剖析与范例应用04"的主题中,我们将探讨这三大框架的集成过程、关键概念以及实际应用。 首先,Struts2是基于MVC(Model-View-Controller)设计模式的Web框架,它负责...
通过这些源代码的学习,读者可以全面掌握Spring3.x在企业级应用开发中的各种应用场景,提升自己的技能水平。同时,这些高质量的代码也为我们提供了优秀的代码编写范例,有助于提高我们的编码规范和习惯。
Spring 2.0是Spring的重要里程碑,增加了数据访问抽象、事务管理、支持JSR-175注解和Web服务等新特性,增强了Spring在企业级应用中的适用性。 SSH框架的集成将Struts2的优秀表现层、Spring的强大控制层和Hibernate...
标题"Java struts+spring工程范例"暗示我们将探讨如何将这两个框架集成在一起创建一个完整的项目。在这样的工程中,Struts负责处理HTTP请求并调度控制流,Spring则处理服务层和数据访问层的逻辑,提供业务组件和持久...
3. **Spring配置**:在applicationContext.xml中,配置了Bean的定义、数据源、事务管理器等。Spring通过@Autowired注解或XML配置实现依赖注入。 4. **整合Struts2和Spring**:通过Struts2的Spring插件,Action类可以...
总结,Spring MVC实例代码提供了基于注解的编程范例,适合初学者入门。通过学习和实践这个实例,你可以了解Spring MVC的核心组件和工作流程,以及如何在MyEclipse环境中进行开发。这将有助于提升你在Web应用开发中的...
Spring框架的核心特性之一是依赖注入(DI),这是一种设计模式,允许将对象间的依赖关系由外部进行配置和管理,而不是在代码中硬编码。通过这种方式,对象可以专注于自己的职责,而依赖关系的管理则交给了Spring容器...