阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Spring Web MVC框架学习笔记

Posted on 2012-02-14 11:24  阳光VIP  阅读(255)  评论(0编辑  收藏  举报

spring-framework-reference中文版摘录。

spring3.1

 

1.简单介绍一下Spring Web MVC框架 

Spring Web MVC借助DispatcherServlet将requests转发给handlers,可以配置handler mappings、视图、本地化等,甚至支持文件上传。

默认的handler 基于@Controller 和 @RequestMapping注解。通过@Controller和@PathVariable等其他注解还可以构建RESTful的WEB应用。

在Spring Web MVC中可以使用普通的类,而不必实现特定的接口。

Spring的数据绑定和视图实现非常的灵活,model采用Map格式。

 

 

2.DispatcherServlet

跟其他的web MVC框架一样,Spring Web MVC也是基于request驱动的(跟JSF区别),属于前端控制型。

DispatcherServlet 其实是Servlet(HttpServlet的子类),需要在web.xml声明,并配置要其转发的requests。示例如下:

 

Xml代码 复制代码 收藏代码
  1. <web-app>  
  2. <servlet>  
  3. <servlet-name>example</servlet-name>  
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5. <load-on-startup>1</load-on-startup>  
  6. </servlet>  
  7. <servlet-mapping>  
  8. <servlet-name>example</servlet-name>  
  9. <url-pattern>/example/*</url-pattern>  
  10. </servlet-mapping>  
  11. </web-app>  
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
</web-app>

 /example/的请求将会被DispatcherServlet转发。这仅仅是使用Spring Web MVC的第一步。

DispatcherServlet需要定义自己的WebApplicationContext,以[servlet-name]-servlet.xml命名置于WEB-INF目录下。文件的命名必须和web.xml配置的servlet-name一致。如上的配置,就应命名为/WEB-INF/example-servlet.xml。

Xml代码 复制代码 收藏代码
  1. <web-app>  
  2. <servlet>  
  3. <servlet-name>golfing</servlet-name>  
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5. <load-on-startup>1</load-on-startup>  
  6. </servlet>  
  7. <servlet-mapping>  
  8. <servlet-name>golfing</servlet-name>  
  9. <url-pattern>/golfing/*</url-pattern>  
  10. </servlet-mapping>  
  11. </web-app>  
<web-app>
<servlet>
<servlet-name>golfing</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>golfing</servlet-name>
<url-pattern>/golfing/*</url-pattern>
</servlet-mapping>
</web-app>

 如上配置就应命名为/WEB-INF/golfing-servlet.xml。

Spring DispatcherServlet利用一些特定的bean来转发请求和渲染视图,这些bean都在WebApplicationContext中配置。

 

 

3.实现Controllers

Spring Web MVC的controller用标注定义,这样不需要继承或实现特定的基类,可以灵活的扩展和移植。示例如下:

Java代码 复制代码 收藏代码
  1. @Controller  
  2. public class HelloWorldController {   
  3. @RequestMapping("/helloWorld")   
  4. public String helloWorld(Model model) {   
  5. model.addAttribute("message""Hello World!");   
  6. return "helloWorld";   
  7. }   
  8. }  
@Controller
public class HelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World!");
return "helloWorld";
}
}

 通过@Controller和@RequestMapping标注定义非常灵活,helloWorld方法有个Model参数,返回sting类型的视图名称。

dispatcher会扫描有@Controller标注的类,请在[servlet-name]-servlet.xml加入如下配置

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4. xmlns:p="http://www.springframework.org/schema/p"  
  5. xmlns:context="http://www.springframework.org/schema/context"  
  6. xsi:schemaLocation="   
  7. http://www.springframework.org/schema/beans   
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  9. http://www.springframework.org/schema/context   
  10. http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  11. <context:component-scan base-package="org.springframework.samples.petclinic.web"/>  
  12. // ...   
  13. </beans>  
<?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:p="http://www.springframework.org/schema/p"
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/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.springframework.samples.petclinic.web"/>
// ...
</beans>

  用 @RequestMapping映射 Requests,可以在类级别,也可以在方法级上,一个相对的,一个是绝对的。

 

@RequestMapping映射URI 格式:http://www.example.com/users/{userId} 包含了变量userId.

 http://www.example.com/users/fred.给变量users赋值:fred

@RequestMapping 支持任何形式的路径(如 /myPath/*.do). URI 与其他路径的结合(如 /owners/*/pets/{petId}).