`
忆梦竹
  • 浏览: 65720 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

SpringMVC Tutorial

阅读更多
本文分为两部分讲解:
1. SpringMVC的基本执行流程
2. SpringMVC的HelloWorld例子
其中,会对一些需要注意的地方进行较为详细的讲解。

1. SpringMVC框架在接受一个客户端请求的时候,执行流程:


当一个请求到达Spring MVC框架的时候,下面的事件将一一触发:
- DispatcherServlet接收客户端的请求
- DispatcherServlet调用HandlerMapping以及执行请求对应的Controller
- Controller调用特定的方法来处理这个请求,然后返回一个ModelAndView对象或者String对 象或者ModelMap对象。
- DispatcherServlet得到上一步返回的对象后回将这些对象作为参数去调用ViewResolver,ViewResoler可以根据这些对象里面的视图的名称解析并生成相应的View对象。
- DispatcherServlet将模型数据model(也就是我们要在页面显示的动态的数据)传送给View对象
- View对象借助模型数据,将结果返回给客户端。

2. SpringMVC的HelloWorld例子:
开发工具MyEclipse8.6 、 Tomcat6.0.33

- 创建一个名为SpringMVC_HelloWorld的web项目



- 导入开发SpringMVC需要的JAR包,在开发SpringMVC时候我们使用commons-logging作为日志处理的工具,因此JAR包的列表如下:


-导入了jar包之后,我们希望我们的helloworld开发完成后是这样的:当我们访问我们的项目时进入的是一个现实CLICK ME 的链接,然后我们点击这个连接后回显示HelloWorld。
index.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%>">
  </head>
  
  <body>
	[url=helloworld.do]Click Me[/url]
  </body>
</html>


-当我们点击Click后需要一个Controller来处理我们的请求,接着我们来开发我们的控制器:HelloWorldController
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {
	
	@RequestMapping("/helloworld.do")
	/**
	 * 如果有请求参数可以使用@RequestParam来指定
	 */
	public ModelAndView doRequest(){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("welcome");
		//在这里调用相关的业务逻辑进行处理,然后返回数据,封装到ModelAndView中。
		mav.addObject("welcomeMesg","Hello, World !");
		return mav;
	}
}


-我们的首页面也写好了,控制器类也写好了,那么Spring怎么知道当我们点击Click Me的时候要去调用哪个控制器的哪个方法来执行呢,然后返回的结果又是哪个页面来显示呢?下面将一一说明。

-既然要让我们的请求与相应的控制器联系起来,那么Spring跟Struts一样也需要一个配置文件来关联控制器和视图。但是在这之前,我们想到了Struts在web.xml中配置了一个PreparedAndExecuteServlet作为Struts框架的入口。同样的,Spring也要配置这样的一个Servlet来接受符合要求的请求,并分发给相应的Controller处理。
下面是web.xml的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
  	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/dispatcher-servlet.xml,/WEB-INF/dispatcher2-servlet.xml</param-value>
		</init-param>
		 -->
		<load-on-startup>2</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
  
</web-app>

在web.xml文件中我们看到我们配置了DispatcherServlet。这个就是我们SpringMVC的入口。如果有多个配置文件我们需要指定init-param参数,否则Spring默认的配置文件的位置为/WEB-INF/下,名称为 我们配置的 <servlet-name>-servlet.xml  在我们的应用中是  dispatcher-servlet.xml  

接着我们将继续了解 dispatcher-servlet.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-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/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">
	
	<context:component-scan base-package="com.piedra.springmvc.controller"></context:component-scan>
	<mvc:annotation-driven></mvc:annotation-driven>
 	
 	<!-- 
 	如果没有配置handlerMapping的话,Spring MVC会默认使用BeanNameUrlHandlerMapping进行URL到具体的Controller的匹配 
	<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
 	-->
	
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix">
			<value>/WEB-INF/jsp/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>
</beans>

在这里我们配置了ViewResolver和annotation-driven和component-scan。其中component-scan和annotation-driven我将另起一篇博客说明,对于ViewResolver在下文将会讲到。
现在配置好了dispatcher-servlet.xml了,我们已经知道怎么映射请求和控制器以及控制器的哪个方法来执行了(这个有context:component-scan和mvc:annotation-driven这两个标签驱动的)。
然后我们再回顾下我们的控制器类的doRequest方法,该方法中有这样的语句

	mav.setViewName("welcome");

这个语句告诉Spring待会返回的视图名称叫做welcome,但是仅有这样的一个名称是不够的。那么我们刚刚配置的ViewResolver就派上用场了,viewResolver配置了前缀和后缀,这样Spring在内部就会生成这样的url /WEB-INF/jsp/welcome.jsp  那么我们就需要在/WEB-INF/jsp/下面创建一个welcome.jsp文件了
<html>
	<body>
		<font color="red" size="10">${welcomeMesg }</font>
	</body>
</html>


- 这样,我们的应用的目录结构就成为下面你的这个样子:


-那么我们要测试一下我们的应用了。
-首先我们再浏览器里面输入 http://localhost:8080/SpringMVC_HelloWorld/




更加详细的资料请参考Srping3.0ReferenceDocument
以下的链接是SpringMVC基于xml配置的参考网站:
http://www.dzone.com/tutorials/java/spring/spring-mvc-tutorial-1.html


我们的Spring MVC的入门例子到这里已经告一段落,希望我的例子对你有所帮助。
最后是这个项目的源代码:

  • 大小: 28.5 KB
  • 大小: 14.6 KB
  • 大小: 37.9 KB
  • 大小: 25.2 KB
  • 大小: 12.9 KB
  • 大小: 15.7 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics