SpringMVC入门

jopen 5年前

1、Spring  MVC 背景介绍

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer PagesJSP)技术、VelocityTilesiText 和 POISpring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

 

2、常见MVC框架比较 

    运行性能上:

        Jsp+servlet>struts1>spring mvc>struts2+freemarker>>struts2,ognl,值栈。

    开发效率上,基本正好相反。值得强调的是,spring mvc开发效率和struts2不相上下。

 

Struts2的性能低的原因是因为OGNL和值栈造成的。所以,如果你的系统并发量高,可以使用freemaker进行显示,而不是采用OGNL和值栈。这样,在性能上会有相当大得提高。

3、SpringMVC 核心原理

1. 用户发送请求给服务器。urluser.do

2. 服务器收到请求。发现DispatchServlet可以处理。于是调用DispatchServlet

3. DispatchServlet内部,通过HandleMapping检查这个url有没有对应的Controller。如果有,则调用Controller

4. Controller开始执行。

5. Controller执行完毕后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象;如果返回ModelAndView对象,该对象本身就包含了视图对象信息。

6. DispatchServlet将执视图对象中的数据,输出给服务器。

7. 服务器将数据输出给客户端。

4、基于spring 3.0项目开发实例

    1、导入相关jar包

    2、配置web.xml  

<?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/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">    <display-name>SpringMVCDemo</display-name>          <servlet>          <servlet-name>web servlet</servlet-name>          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>           <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>web servlet</servlet-name>          <url-pattern>/</url-pattern>         </servlet-mapping>    </web-app>

  3、配置spring-mvc.xml

<?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:mvc="http://www.springframework.org/schema/mvc"      xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"      xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"      xsi:schemaLocation="http://www.springframework.org/schema/beans                http://www.springframework.org/schema/beans/spring-beans.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context.xsd                http://www.springframework.org/schema/aop                http://www.springframework.org/schema/aop/spring-aop.xsd                http://www.springframework.org/schema/tx                 http://www.springframework.org/schema/tx/spring-tx.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context.xsd">        <!--告知Spring,我们启用注解驱动-->      <mvc:annotation-driven />        <!--配置要扫描注解的类的路径-->      <context:component-scan base-package="com.excel.controller"></context:component-scan>        <!--配置获取VIEW的方式 -->      <bean    class="org.springframework.web.servlet.view.InternalResourceViewResolver"          p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />  </beans>

4、编写控制器

package com.excel.controller;    import org.springframework.stereotype.Controller;  import org.springframework.ui.ModelMap;  import org.springframework.web.bind.annotation.ModelAttribute;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestParam;  import org.springframework.web.bind.annotation.SessionAttributes;    @Controller  @RequestMapping("user")  public class UserController {              //RequestParam  当传递参数名与接收名称不一致时指定      @RequestMapping("/login.do")      public String login(String userName ){          System.out.println("User Login...."+userName);          return "index";      }  }