作为一个J2EE的开发者,我们基本上是开发基于WEB的应用系统。事实上,工作流,状态管理以及验证都是需要解决的重要功能。而HTTP协议的无状态性决定了这些功能都不容易实现。Spring的WEB框架就是来帮助我们解决这些问题的。使用Spring,我们可以让WEB框架自动将传递进来的请求参数填充到模型对象中,同时提供验证和错误处理。还可以管理用户在WEB表单中创建的对象的状态。在了解SpringMVC之前,我们先来复习下MVC,MVC从逻辑上把应用分为模型组件,视图组件和控制器组件。其中控制器组件又可以细分为:前端控制器组件和后端控制器组件。
我们来看一下MVC的基本工作流程:首先是客户端(通常是浏览器)发出一个请求。第一个接受这个请求的组件一般是一个前端控制器。它将不同的请求交给不同的后端控制器来处理,而在后端控制器里面又可以调用相应的模型对象来处理具体的业务逻辑,最后再返回一个特定的视图响应给客户端。
拿我们比较熟悉的struts框架来说,前端控制器就是ActionServlet,后端控制器就是Action.请求的URL和后端控制器的映射关系在struts-config.xml上的<action-mappings>里面配置,模型对象就是我们平常写的DAO/DTO,返回的视图类型一般就是jsp了。
那么,在spring MVC中又是怎样的呢?我们先按上面对号入座地说一下。第一个接受这个请求的前端控制器叫DispatcherServlet,后端控制器叫Controller。负责处理请求URL和后端控制器映射的叫HandlerMapping,它有多种类型,比较灵活,也是在一个xml文件上进行配置。负责业务逻辑处理的模型对象一般也是我们平常写的DAO/DTO组件。只是它最后的返回更灵活,Controller返回一个ModelAndView对象给DispatcherServlet,ModelAndView可以携带一个视图对象或视图对象的逻辑名,【如果携带的是一个视图对象的逻辑名,那么DispatcherServlet需要一个ViewResolver来查找用于渲染回应的视图对象】最后,DispatcherServlet将请求分派给ModelAndView对象指定的视图对象。视图对象负责渲染返回给客户的回应。
OK,现在跑一个最简单的例子。
(1)建立动态web工程,导入spring的jar包。
(2)配置DispatcherServlet
DispatcherServlet是SpringMVC的核心,将下面Servlet的注册信息登记在web.xml中。一定要记住:Servlet跟伴侣一样,要结婚,先得注册登记!
<?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/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4"> <display-name>springmvc_001_xml</display-name> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- spring的配置文件名在这里可以随便命名,比如:spring-mvc.xml,不一定要命名为dispatcherServlet-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
(3)编写Controller,做核心配置文件,并配置url和Controller的映射
package com.test.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("hello", "Hello World!"); return new ModelAndView("helloWorld"); } }
我们知道Struts有个XML格式的核心配置文件,springMVC当然也有,在WEB-INF下新建配置文件: spring-mvc.xml,当DispatcherServlet载入后,它将试图从这个文件中载入应用上下文。
<?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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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"> <!--缺省映射处理器,不需要明确声明,但声明后就非常清楚使用的是哪个映射处理器 --> <!-- <bean id="beanNameUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> </bean> --> <!-- 这里的name属性有两个职责,既定义Bean的名字,也定义需要这个控制器处理的URL样式 --> <bean name="/hello" class="com.test.controller.HelloController"> </bean> </beans>
上面可能有人奇怪,为什么不用id属性,而设置name属性。这里是因为URL中含有XML id属性非法字符,特别是斜杠(/)。
(4)配置一个视图解析器将控制器与JSP结合起来。
将解析器的配置片段加到上面的spring-mvc.xml中。
<!--对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
InternalResourceViewResolver在ModelAndView返回的视图名前加上prefix属性配置的前缀,再在最后加上suffix属性配置的后缀。由于HelloController返回的ModelAndView中视图名为helloWorld,所以InternalResourceViewResolver将在/jsp/helloWorld.jsp处查找视图。
(5)编写呈现给用户的jsp文件。
/jsp/helloWorld.jsp
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <h2>${hello}</h2> </body> </html>
完成后启动服务器,在浏览器地址栏上输入
http://127.0.0.1:9900/springmvc_001_xml/hello就可以访问了。对照一下,我们发现SpringMVC跟Struts大同小异。只是有两处映射,SpringMVC做的相对灵活,哪两处呢?
(1)url和后端控制器的映射。
springMVC里有个映射处理器(HandlerMapping)的概念。它实际上是一个处理器映射Bean,用来将一个控制器指定到一个URL上。Spring提供了三种有用的HandlerMapping的实现:
BeanNameUrlHandlerMapping:根据控制器的名字,把一个URL映射到控制器上
SimpleUrlHandlerMapping:通过配置文件,把一个URL映射到控制器上
DefaultAnnotationHandlerMapping:通过注解,把一个URL映射到控制器上
(2)逻辑视图名和视图对象的映射。
springMVC里还有个视图解析器(ViewResolver)的概念。它决定了ModelAndView对象的逻辑视图名如何解析成一个用于将结果渲染给用户的视图Bean,Spring有四种ViewResolver实现:
InternalResourceViewResolver:将逻辑视图名解析成一个用模板文件(如JSP和FreeMarker模板)渲染的视图对象
BeanNameViewResolver:将逻辑视图名解析成一个DispatcherServlet应用上下文中的视图Bean
ResourceBundleViewResolver:将逻辑视图名解析成一个ResourceBundle中的视图对象
XmlViewResolver:从一个XML文件中解析视图Bean,这个文件是从DispatcherServlet应用上下文中分离出来的。
相关推荐
ssm配置文件springmvc.xml
在SpringMVC中,XML配置文件扮演着关键角色,它们定义了组件的装配方式,如控制器、服务、数据源等。这篇内容将深入探讨SpringMVC中XML文件的读取与显示,并结合JSP页面的实现。 首先,我们需要理解SpringMVC的配置...
在这个"springMVC零xml小例子"中,我们将深入探讨如何在不使用XML配置的情况下搭建一个简单的SpringMVC应用。XML配置曾是Spring框架的标准配置方式,但随着Spring的发展,现在更推荐使用Java配置或注解驱动的方式来...
这是一个springmvc-config.xml文件,<?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:...
NULL 博文链接:https://star77266989.iteye.com/blog/2111430
传统的SpringMVC配置往往依赖于XML文件,如web.xml和spring-servlet.xml等,但随着Spring框架的发展,出现了基于代码的配置方式,实现了零XML配置,提高了开发效率。本文将详细介绍如何在不使用web.xml的情况下,...
springmvc.xml
springMVC模块头信息.xml springMVC模块头信息.xml
2. **springmvc.xml**:这是SpringMVC的配置文件,定义了SpringMVC的相关组件,如HandlerMapping(处理器映射)、HandlerAdapter(处理器适配器)、ViewResolver(视图解析器)等。还包含了拦截器(Interceptor)、...
最近开始学习springMVC,刚刚看了两天的springMVC3.0,看的头都大了,好多的handlerMapping,好多的方法解析策略。经过本博主的不断尝试,感觉找到了最精简的模式,只要配置controller就可以了。总体感觉springMVC是...
SpringMVC所需的依赖,包含logback的依赖详情,maven项目的基本依赖。 2020/06/02-很久之前的了忘记里面,看见所需的积分太高了,重新设置一下
SpringMVC用XML方式实现AOP的方法示例 本文主要介绍了SpringMVC用XML方式实现AOP的方法示例,通过示例代码详细地介绍了如何使用XML方式来实现AOP。AOP(Aspect-Oriented Programming)是一种编程范式,它可以将横切...
这是一些配置文件,可以作为参考,个人感觉很方便的学习方法
1,搭建SpringMVC 2,加载properties配置文件 3,集成mybatis 4,配置事务 5,另一种配置springMVC的方式 6,自定义(扩展)mvc配置 7,解决@ResponseBody return String的中文乱码问题 8,配置静态资源映射ResourceHandlers 9...
1. 配置XML解析器:在SpringMVC的配置文件中,需要添加XMLMessageConverter,使Spring能够解析接收到的XML数据。 2. 创建Controller:定义一个Controller方法,使用@RequestMapping注解指定接收请求的URL。参数类型...
在SpringMVC框架中,处理视图的呈现是至关重要的,尤其在当今Web应用程序中,JSON和XML格式的数据传输越来越普遍。SpringMVC为开发者提供了便捷的方式,将Java对象转换成JSON或XML视图,使得数据交换更加灵活。本文...
当我们需要在SpringMVC中返回XML响应时,可以结合使用SpringMVC和XStream。 首先,让我们详细了解一下SpringMVC。SpringMVC是Spring框架的一部分,负责处理HTTP请求并生成响应。它通过DispatcherServlet作为入口点...
springmvc+hibernate的maven工程pom.xml文件配置
《SpringMVC与MyBatis整合初探》 在当今的Java Web开发领域,SpringMVC和MyBatis是两大主流框架,它们分别负责控制层和数据访问层的处理。SpringMVC作为Spring框架的一部分,提供了强大的MVC设计模式实现,而...