SpringMVC一路总结(一)(转)

itRed

You are never too old to set another goal or to dream a new dream.

SpringMVC一路总结(一)

SpringMVC听闻已久,早在去年就被学长问到关于SpringMVC的基础知识,当时也没在意。主要是工作中也没有用到关于SpringMVC的技术,因此免于没有时间和精力的借口就没有接触和学习SpringMVC。

一心以为SpringMVC和Spring的作用相当,也是MVC框架的一部分,此时我说的MVC中的一部分并不是替换Struts的Control那部分,而是和Spring一样的工厂管理类同等等。如今才发现技术不过关就会闹笑话,真心感觉技术这种东西,越学就越感觉需要学习的东西很多。静下心来,用一颗诚实的心面对未知,勇于挑战,好好学习。

关于MVC框架的结构以及说明不是本文的重点。我相信既然看到SpringMVC了,肯定对MVC框架有了一定的认识。因此,此时,不再赘述关于MVC框架的基础知识。本人仅总结自己学习SpringMVC过程中的点点滴滴,用以激励自己的奋斗,铭记自己的成长,为新手朋友提供一个快速入门的案例。本博文为本人学习的总结,请尊重劳动成果。欢迎转载,请保留博文出处:http://www.cnblogs.com/itred ;本人邮箱: [email protected] 。

一定要明白的理论

Spring 的 Web MVC 框架是围绕 DispatcherServlet 设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是基于Controller 接口和RequestMapping,提供广泛灵活的处理方法。Spring 提供了一个控制器层次结构,可以派生子类。

其实关于SpringMVC的好处,我觉得也没什么必要在这里过多的卖弄,这样说吧。SpringMVC可以实现Struts中的控制功能,SpringMVC就是利用效率高的servlet,虽然没有了struts中的过滤器了,但是它也可以实现自己的过滤功能;而且,在现在三大框架更多地应用到企业级应用中,越来越多的企业直接选择SpringMVC作为控制器,因为它不再需要额外的加入其它jar包,如果用struts的话,需要加入另外一些包,而SpringMVC可以和Spring共用jar包,也不知道这样说对不对,但是方便理解。

下图是直接取自Spring JAR包中的API文档,即:官方资料对于SpringMVC的阐述,本人认为没有哪个版本可以比这个更加好了。

本人并非是在写废话,把官方理论搬过来就行,只是为了入门做一些简单的功课。这样,在理解后面的代码时才更加轻松。

案例走起

一.Demo1

  1. 新建一个web工程,下载Spring的完整包,解压缩并且将libs目录下的jar包拷贝到lib目录下,进行build path; 因为这里只是需要jar包,可以不用拷贝doc和source包。具体操作也可以参看Spring包下的docs中的文档,本人测试用的版本是3.2;jdk版本是1.6
  2. 因为SpringMVC是围绕DispatcherServlet来的,所以需要将这个加入到web.xml中;首先对项目中的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>SpringMVC</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
       <servlet-name>SpringMVC</servlet-name>
       <url-pattern>/</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

注意:这里的servlet-name中的值必须要引起高度重视,因为这里的值需要和SpringMVC的另一个配置文件匹配。比如说,这里的servlet-name是SpringMVC,新建的一个配置文件的格式就必须是: ServletName-servlet.xml  ,即这里的名称为:SpringMVC-servlet.xml 。

  3. 因为采用的是默认模式,所以该文件必须放在WEB-INF目录下,即新建一个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: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.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    <context:component-scan base-package="org.springframework.samples.petclinic.web" />
    <bean name="/he" class="com.red.controller.HelloController"></bean>     <!--name="/he"这个就是在浏览器中的访问路径-->
    <bean id="viewResolver"
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/"></property>     <!--这个是目录约定-->
       <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

到这里,SpringMVC的配置文件就算配置全了,但是如果要测试这样的环境是否合适我们的开发环境,就还需要进行编码设置控制器。

  4. 作为第一个入门程序,显然理解清楚过程远比实现复杂逻辑更有用。在这里的控制器编写中,我们只需要实现一个接口方法就行。这个接口就是Controller;实现的方法是handleRequest;这里又会接触到一个新的东西----ModelAndView。这个就是返回的一个视图,也是可以传递参数的,在Demo2中会具体实现。这里只是实现跳转到一个hello.jsp的页面。

在这里的配置中,你不会看到.jsp跟在页面后面,因为在配置文件中已经将其独立出来,页面以后缀为.jsp的,因此,这里的视图不会仅仅局限于jsp。

控制器源码如下:

package com.red.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

         public ModelAndView handleRequest(HttpServletRequest request,
                            HttpServletResponse response) throws Exception {
                   System.out.println("This is the first example about SpringMVC.");
                   return new ModelAndView("/hello");   //实际上就是跳转到hello.jsp页面
         }
} 

这里,案例一就已经实现了。运行程序,才浏览器中输入:http://localhost:8080/20150505_SpringMVC01/he

控制台输出:

  

浏览器中的显示:

  

二.Demo2

案例二在案例一的基础上进行了进一步的修改,将配置文件独立出来,因为在实际的项目开发过程中,都不会将一些特殊的配置文件进行默认处理,那样看起来很无序,维护起来也存在一定的困难。

  1. 在src目录下,新建包com/red/config
  2. 将SpringMVC-servlet.xml复制到该目录下
  3. 在web.xml中的servlet中加入如下代码:
    <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath*:com/red/config/SpringMVC-servlet.xml</param-value>
    </init-param>

这样配置之后就可以任意指定config文件了。根据自己的实际项目要求做。

  4. 在完成配置文件移位后,接下来需要做的就是往页面上传递参数,即从控制器中拿到参数往页面上传。查看源码就会知道ModelAndView的构造方法有很多,这里贴出一些。

    

参数可以根据需要进行选择,这里用的有第7个。参数ViewName表示jsp页面,modelname表示参数名称,页面上取,modelObject就是传递的值。

源码如下:

package com.red.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

         public ModelAndView handleRequest(HttpServletRequest request,
                            HttpServletResponse response) throws Exception {
                   System.out.println("This is the second example about SpringMVC.");
                   String firstParam = "第一个字符串参数";
                   Map<String, Object> map = new HashMap<String, Object>();
                   map.put("prm1", "map中的第一个");
                   map.put("prm2", "map中的第二个");
                   map.put("prm3", "map中的第三个");
                   // return new ModelAndView("/hello", "prm", firstParam);//字符串用
                   return new ModelAndView("/hello", "prm", map);
         }
 }

实现效果如下:

  

                                  总结                                           

到这里,第一部分的SpringMVC入门就已经完成了。就像struts入门一样简单,对于技术这种东西,我始终坚信,入门并不难,难得是能够静下心来去分析,去思考这样做的原因,这样做的好处,为什么会选择这个技术来实现。因此,思考远比copy and copy 更加重要!

本文所涉及到的源码等供菜鸟朋友学习:

Demo1      Demo2       Spring完整JAR包(访问密码 d498)

感谢奋斗中的自己!

时间: 2024-10-10 05:08:10

SpringMVC一路总结(一)(转)的相关文章

SpringMVC一路总结(二)

冰冻三尺非一日之寒.对技术的学习尤其得遵循这么一个理.在<SpringMVC一路总结(一)>中,清楚的总结了SpringMVC的入门案例,对于这类入门demo,理清套路,整理思绪是最为重要的.能够从案例中了解到SpringMVC在框架技术中的特点和应用,就是第一部分的主要作用. 从上部分可以看出,每个Controller中只能写一个方法,这个Controller是实现Controller中的方法handleRequest.然而对于这种形式的分布和配置,一旦项目中的功能增多,很难准确的定位方法的

SpringMVC一路总结(三)

在博文<SpringMVC一路总结(一)>和<SpringMVC一路总结(二)>中,该框架的应用案例都是是基于xml的形式实现的.然而,对于大型项目而言,这种xml的配置会增加项目模块之间的耦合性,增加配置文件的配置难度,因此,从效率上来讲,这是一种并不被看好的方式. 尽管这种xml形式的配置在项目中用的比较少,但是,这种形式的配置可以很清楚的了解到SpringMVC 入门的一些基础知识,学起来可以感觉到很轻松.只有在了解了这种基于xml的实现SpringMVC 之后,我们再来看注

SpringMVC一路总结(

SpringMVC一路总结(三) 在博文<SpringMVC一路总结(一)>和<SpringMVC一路总结(二)>中,该框架的应用案例都是是基于xml的形式实现的.然而,对于大型项目而言,这种xml的配置会增加项目模块之间的耦合性,增加配置文件的配置难度,因此,从效率上来讲,这是一种并不被看好的方式. 尽管这种xml形式的配置在项目中用的比较少,但是,这种形式的配置可以很清楚的了解到SpringMVC 入门的一些基础知识,学起来可以感觉到很轻松.只有在了解了这种基于xml的实现Sp

SpringMVC一路总结(一)

SpringMVC听闻已久,早在去年就被学长问到关于SpringMVC的基础知识,当时也没在意.主要是工作中也没有用到关于SpringMVC的技术,因此免于没有时间和精力的借口就没有接触和学习SpringMVC. 一心以为SpringMVC和Spring的作用相当,也是MVC框架的一部分,此时我说的MVC中的一部分并不是替换Struts的Control那部分,而是和Spring一样的工厂管理类同等等.如今才发现技术不过关就会闹笑话,真心感觉技术这种东西,越学就越感觉需要学习的东西很多.静下心来,

SpringMVC1

itRed You are never too old to set another goal or to dream a new dream. SpringMVC一路总结(一) SpringMVC听闻已久,早在去年就被学长问到关于SpringMVC的基础知识,当时也没在意.主要是工作中也没有用到关于SpringMVC的技术,因此免于没有时间和精力的借口就没有接触和学习SpringMVC. 一心以为SpringMVC和Spring的作用相当,也是MVC框架的一部分,此时我说的MVC中的一部分并不

初学springMVC搭建框架过程及碰到的问题

刚刚开始学spring框架,因为接了一个网站的项目,想用spring+springMVC+hibernate整合来实现它,现在写下搭建框架的过程及碰到的问题.希望给自己看到也能让大家看到不要踏坑. 一.创建Maven项目 我选用的IDE是Intellij idea2016.2 Ultimate,使用的Maven来创建web项目,这样可以省去很多我自己找依赖包下载的时间,因为Maven有中央仓库统一管理可以通过配置pom.xml文件到Maven仓库上去获取需要的包,点击File->New proj

Java过滤器与SpringMVC拦截器之间的关系与区别

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才能少走些弯路).过滤器和拦截器的区别:①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②

Spring+Mybatis+SpringMVC+Maven+MySql搭建实例(转)

文章转自http://www.cnblogs.com/cnndevelop/p/7029367.html 1. 首先创建一个表: CREATE TABLE `t_user` ( `USER_ID` int(11) NOT NULL AUTO_INCREMENT, `USER_NAME` char(30) NOT NULL, `USER_PASSWORD` char(10) NOT NULL, `USER_EMAIL` char(30) NOT NULL, PRIMARY KEY (`USER_I

【转】Spring+Mybatis+SpringMVC+Maven+MySql搭建实例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何使用Maven来搭建Spring+Mybatis+SpringMVC+MySql的搭建实例,文章写得很详细,有代码有图片,最后也带有运行的效果. 本文工程免费下载 一.准备工作 1. 首先创建一个表: CREATE TABLE `t_user` ( `USER_ID` int(11) NOT NULL AUTO_INCREMENT, `USER_NAME` char(3