SpringMVC Tutorial

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

1. SpringMVC框架在接受一个客户端请求的时候,执行流程:[/size]
[img]http://dl.iteye.com/upload/attachment/0070/9765/c68620ac-8313-33f3-b709-8ccf1ae1b8b9.png[/img]
[size=medium]当一个请求到达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项目[/size]
[img]http://dl.iteye.com/upload/attachment/0070/9772/5efc8a98-0767-3a60-9012-631701991438.jpg[/img]

[size=medium]- 导入开发SpringMVC需要的JAR包,在开发SpringMVC时候我们使用commons-logging作为日志处理的工具,因此JAR包的列表如下:[/size]
[img]http://dl.iteye.com/upload/attachment/0070/9776/d0deed69-9392-3209-88e5-6c8b6037e0c6.jpg[/img]

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


[size=medium]-当我们点击Click后需要一个Controller来处理我们的请求,接着我们来开发我们的控制器:HelloWorldController[/size]
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;
}
}


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

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

<?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>

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

接着我们将继续了解 dispatcher-servlet.xml的配置[/size]
<?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>

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

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


[size=medium]- 这样,我们的应用的目录结构就成为下面你的这个样子:[/size]
[img]http://dl.iteye.com/upload/attachment/0070/9790/2d1d2058-e7d4-36e2-a50e-686729d63574.jpg[/img]

[size=medium]-那么我们要测试一下我们的应用了。
-首先我们再浏览器里面输入 http://localhost:8080/SpringMVC_HelloWorld/[/size]
[img]http://dl.iteye.com/upload/attachment/0070/9792/c4db46ee-0c43-3d40-8ddd-22266769abbf.jpg[/img]
[img]http://dl.iteye.com/upload/attachment/0070/9796/c55db60a-2c3f-3525-9831-d9da9ada2e13.jpg[/img]
[size=medium]
更加详细的资料请参考Srping3.0ReferenceDocument
以下的链接是SpringMVC基于xml配置的参考网站:
[url]http://www.dzone.com/tutorials/java/spring/spring-mvc-tutorial-1.html[/url][/size]

[size=medium]我们的Spring MVC的入门例子到这里已经告一段落,希望我的例子对你有所帮助。
最后是这个项目的源代码:
[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值