`
annan211
  • 浏览: 463234 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

spring mvc 经典入门

 
阅读更多
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。

  一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0)

  1. jar包引入

  Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib-nodep-2.1_3.jar

  Hibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、antlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.GA.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相应数据库的驱动jar包

  2. web.xml配置(部分)

<!-- Spring MVC配置 -->
02
<!-- ====================================== -->
03
<servlet>
04
    <servlet-name>spring</servlet-name>
05
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
06
    <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
07
    <init-param>
08
        <param-name>contextConfigLocation</param-name>
09
        <param-value>/WEB-INF/spring-servlet.xml</param-value>  默认
10
    </init-param>
11
    -->
12
    <load-on-startup>1</load-on-startup>
13
</servlet>
14
 
15
<servlet-mapping>
16
    <servlet-name>spring</servlet-name>
17
    <url-pattern>*.do</url-pattern>
18
</servlet-mapping>
19
   
20
 
21
 
22
<!-- Spring配置 -->
23
<!-- ====================================== -->
24
<listener>
25
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
26
</listener>
27
   
28
 
29
<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
30
<context-param>
31
    <param-name>contextConfigLocation</param-name>
32
    <param-value>classpath:config/applicationContext.xml</param-value>
33
</context-param>

  3. spring-servlet.xml配置

  spring-servlet这个名字是因为上面web.xml中<servlet-name>标签配的值为spring(<servlet-name>spring</servlet-name>),再加上“-servlet”后缀而形成的spring-servlet.xml文件名,如果改为springMVC,对应的文件名则为springMVC-servlet.xml。

<?xml version="1.0" encoding="UTF-8"?>
02
<beans xmlns="http://www.springframework.org/schema/beans"    
03
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
04
        xmlns:context="http://www.springframework.org/schema/context"    
05
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
06
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
07
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
08
       http://www.springframework.org/schema/context <a href="http://www.springframework.org/schema/context/spring-context-3.0.xsd">http://www.springframework.org/schema/context/spring-context-3.0.xsd</a>">
09
 
10
    <!-- 启用spring mvc 注解 -->
11
    <context:annotation-config />
12
 
13
    <!-- 设置使用注解的类所在的jar包 -->
14
    <context:component-scan base-package="controller"></context:component-scan>
15
 
16
    <!-- 完成请求和注解POJO的映射 -->
17
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
18
 
19
    <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
20
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp" />
21
</beans>

  4. applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?>
02
<beans xmlns="http://www.springframework.org/schema/beans"
03
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04
        xmlns:aop="http://www.springframework.org/schema/aop"
05
        xmlns:tx="http://www.springframework.org/schema/tx"
06
        xsi:schemaLocation="
07
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
08
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
09
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10
 
11
    <!-- 采用hibernate.cfg.xml方式配置数据源 -->

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
13
        <property name="configLocation">
14
            <value>classpath:config/hibernate.cfg.xml</value>
15
        </property>
16
    </bean>
17
     
18
    <!-- 将事务与Hibernate关联 -->
19
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
20
        <property name="sessionFactory">
21
            <ref local="sessionFactory"/>
22
        </property>
23
    </bean>
24
     
25
    <!-- 事务(注解 )-->
26
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
27
 
28
   <!-- 测试Service -->
29
   <bean id="loginService" class="service.LoginService"></bean>
30
 
31
    <!-- 测试Dao -->
32
    <bean id="hibernateDao" class="dao.HibernateDao">
33
        <property name="sessionFactory" ref="sessionFactory"></property>
34
    </bean>
35
</beans>
 


  二、详解

  Spring MVC与Struts从原理上很相似(都是基于MVC架构),都有一个控制页面请求的Servlet,处理完后跳转页面。看如下代码(注解):

package controller;
02
 
03
import javax.servlet.http.HttpServletRequest;
04
 
05
import org.springframework.stereotype.Controller;
06
import org.springframework.web.bind.annotation.RequestMapping;
07
import org.springframework.web.bind.annotation.RequestParam;
08
 
09
import entity.User;
10
 
11
@Controller  //类似Struts的Action
12
public class TestController {
13
 
14
    @RequestMapping("test/login.do")  // 请求url地址映射,类似Struts的action-mapping
15
    public String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) {
16
        // @RequestParam是指请求url地址映射中必须含有的参数(除非属性required=false)
17
        // @RequestParam可简写为:@RequestParam("username")
18
 
19
        if (!"admin".equals(username) || !"admin".equals(password)) {
20
            return "loginError"; // 跳转页面路径(默认为转发),该路径不需要包含spring-servlet配置文件中配置的前缀和后缀
21
        }
22
        return "loginSuccess";
23
    }
24
 
25
    @RequestMapping("/test/login2.do")
26
    public ModelAndView testLogin2(String username, String password, int age){
27
        // request和response不必非要出现在方法中,如果用不上的话可以去掉
28
        // 参数的名称是与页面控件的name相匹配,参数类型会自动被转换
29
         
30
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
31
            return new ModelAndView("loginError"); // 手动实例化ModelAndView完成跳转页面(转发),效果等同于上面的方法返回字符串
32
        }
33
        return new ModelAndView(new RedirectView("../index.jsp"));  // 采用重定向方式跳转页面
34
        // 重定向还有一种简单写法
35
        // return new ModelAndView("redirect:../index.jsp");
36
    }
37
 
38
    @RequestMapping("/test/login3.do")
39
    public ModelAndView testLogin3(User user) {
40
        // 同样支持参数为表单对象,类似于Struts的ActionForm,User不需要任何配置,直接写即可
41
        String username = user.getUsername();
42
        String password = user.getPassword();
43
        int age = user.getAge();
44
         
45
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
46
            return new ModelAndView("loginError");
47
        }
48
        return new ModelAndView("loginSuccess");
49
    }
50
 
51
    @Resource(name = "loginService")  // 获取applicationContext.xml中bean的id为loginService的,并注入
52
    private LoginService loginService;  //等价于spring传统注入方式写get和set方法,这样的好处是简洁工整,省去了不必要得代码
53
 
54
    @RequestMapping("/test/login4.do")
55
    public String testLogin4(User user) {
56
        if (loginService.login(user) == false) {
57
            return "loginError";
58
        }
59
        return "loginSuccess";
60
    }
61
}

  以上4个方法示例,是一个Controller里含有不同的请求url,也可以采用一个url访问,通过url参数来区分访问不同的方法,代码如下:

package controller;
02
 
03
import org.springframework.stereotype.Controller;
04
import org.springframework.web.bind.annotation.RequestMapping;
05
import org.springframework.web.bind.annotation.RequestMethod;
06
 
07
@Controller
08
@RequestMapping("/test2/login.do")  // 指定唯一一个*.do请求关联到该Controller
09
public class TestController2 {
10
     
11
    @RequestMapping
12
    public String testLogin(String username, String password, int age) {
13
        // 如果不加任何参数,则在请求/test2/login.do时,便默认执行该方法
14
         
15
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
16
            return "loginError";
17
        }
18
        return "loginSuccess";
19
    }
20
 
21
    @RequestMapping(params = "method=1", method=RequestMethod.POST)
22
    public String testLogin2(String username, String password) {

        // 依据params的参数method的值来区分不同的调用方法

        // 可以指定页面请求方式的类型,默认为get请求

         

        if (!"admin".equals(username) || !"admin".equals(password)) {

            return "loginError";

        }

        return "loginSuccess";

    }

     

    @RequestMapping(params = "method=2")

  public String testLogin3(String username, String password, int age) {

        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {

            return "loginError";

        }

        return "loginSuccess";

    }

}

  其实RequestMapping在Class上,可看做是父Request请求url,而RequestMapping在方法上的可看做是子Request请求url,父子请求url最终会拼起来与页面请求url进行匹配,因此RequestMapping也可以这么写:

package controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

@RequestMapping("/test3/*")  // 父request请求url

public class TestController3 {

 

    @RequestMapping("login.do")  // 子request请求url,拼接后等价于/test3/login.do

    public String testLogin(String username, String password, int age) {

        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
            return "loginError";

        }

        return "loginSuccess";

    }

}
 

  三、结束语

  掌握以上这些Spring MVC就已经有了很好的基础了,几乎可应对与任何开发,在熟练掌握这些后,便可更深层次的灵活运用的技术,如多种视图技术,例如 Jsp、Velocity、Tiles、iText 和 POI。Spring MVC框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。

转自:http://blog.csdn.net/wangpeng047/article/details/6983027
分享到:
评论

相关推荐

    spring mvc经典入门案例

    这个经典入门案例将引导你逐步了解并掌握 Spring MVC 的基本概念、配置以及实际应用。 1. **Spring MVC 概述** Spring MVC 是一个模型-视图-控制器(MVC)架构模式的实现,它简化了Java Web 应用的开发,提供了一...

    spring mvc 的入门级资料

    Spring MVC 入门级资料 Spring MVC 是一个基于 Java 的 Web 框架,它提供了一种灵活、可扩展、Easy-to-use 的 Web 应用程序开发方式。Spring MVC 是 Spring 框架的一部分,提供了一个强大、灵活、可扩展的 MVC 框架...

    spring MVC_快速入门

    这个“spring MVC_快速入门”文档可能涵盖了以上部分或全部内容,旨在帮助初学者快速理解Spring MVC的工作原理和基本用法。通过学习,开发者可以快速搭建起一个功能完善的Web应用,并逐步深入到更高级的特性,如AOP...

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    精简源码-spring-mvc 入门级使用,亲测好用

    这个"精简源码-spring-mvc 入门级使用"的压缩包文件,旨在为初学者提供一个简单易懂的实践案例,帮助他们快速理解和上手 Spring MVC。 首先,我们从 "spring" 这个标签开始。Spring 是一个开源框架,它提供了一个...

    Spring MVC 教程快速入门 深入分析

    Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...

    Spring MVC入门(登录示例)

    **Spring MVC 入门教程——基于登录示例** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务逻辑、数据处理和用户界面,使得代码更易于...

    Spring MVC入门教程

    个人认为相当适合入门和知识巩固!! 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置文件...

    Spring MVC快速入门

    【Spring MVC 快速入门】 Spring MVC 是一个强大的基于Java的Web应用开发框架,它提供了模型-视图-控制器(MVC)架构模式,使得开发者能够有效地分离业务逻辑和表现层。Spring MVC 以其简洁、高效和高度可扩展性...

    Spring mvc指南+Spring mvc入门

    Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本指南将深入探讨 Spring MVC 的核心概念、配置、控制器、...

    Spring MVC 教程 快速入门 深入分析

    Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...

    spring mvc入门示例

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、用户界面和数据访问分离开来,...

    spring mvc - 入门

    本教程将带你入门 Spring MVC,理解其核心概念和工作原理,以及如何在实际项目中应用。 一、Spring MVC 架构 Spring MVC 提供了一个模型-视图-控制器的设计模式,它将应用程序逻辑、用户界面和数据处理分离,使得...

    Spring Web MVC入门教程

    Spring Web MVC是一种基于MVC模式的轻量级Java Web应用框架,它是Spring框架的一部分,主要用于简化Web层的开发。Spring Web MVC允许开发者将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller...

    spring mvc 快速入门深入分析

    ### Spring MVC 快速入门深入分析 #### 一、Spring MVC 概述 Spring MVC 是 Spring Framework 的一个重要模块,主要用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序的不同关注点...

    Spring MVC 简单入门

    **Spring MVC 简单入门** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关注底层细节。...

    spring mvc入门小例子

    本教程将深入探讨Spring MVC的基本概念和关键组件,帮助初学者快速入门。 首先,让我们理解Spring MVC的核心组件: 1. **DispatcherServlet**:它是Spring MVC的前端控制器,负责接收HTTP请求,根据请求的URL和...

    Spring MVC 从入门到精通

    **Spring MVC 框架详解** Spring MVC 是 Spring 框架的重要组成部分,是一个轻量级的、模型-视图-控制器(Model-View-Controller)的 Web 应用开发框架,它允许开发者以简洁、高效的方式构建动态的、数据驱动的 Web...

    Spring MVC 详细入门教程(含jar包)

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、模块化和可测试的Web应用程序。它是Spring框架的一个重要组成部分,遵循Model-View-Controller(MVC)设计模式,旨在简化Web应用的开发流程。本教程将带你...

Global site tag (gtag.js) - Google Analytics