一. 软件环境

  eclipse-jee-mars-R-win32-x86_64

  jdk1.7.0_79

  apache-tomcat-7.0.52

  spring-framework-3.2.0.RELEASE-dist

二. 环境搭建及实例

  2.1 新建动态web工程

  2.2 导入jar包

    

  2.3 配置Spring MVC前端控制器和访问的url

    在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" 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>SpringMVC</display-name> <!-- 配置SpringMVC DispatcherServlet(前端控制器) -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定Spring MVC启动所需加载的配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <!-- 配置DispatcherServlet所要拦截的url -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> </web-app>

    其中:

      a) 9~13行用于指定Spring MVC启动所需加载的配置文件,这里的配置含义是指在src目录下。默认为WEB-INF目录下,名称为[servlet-name]-servlet.xml,如spring-servlet.xml

<!-- 指定Spring MVC启动所需加载的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>

      b) 14行含义为:标记容器是否在启动的时候就加载这个servlet。

      当值为0或者大于0时,表示容器在应用启动时就加载这个servlet。

      当是一个负数或者没有指定时,则指示容器在该servlet被选择时才加载。

      正数的值越小,启动该servlet的优先级越高。

      (为什么不是true或false呢?这是因为如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序)。

     c) 18~21行表示拦截的模式。这里是"/"表示对所有的请求都进行拦截,包括静态资源如js,css,jpg等。关于拦截的模式以及如何访问静态资源详细请看另一篇:SpringMVC访问静态资源的springmvc.xml配置

  2.4 既然12行指示需要加载src目录下的一个名为springmvc.xml文件,接下来创建该文件

    创建springmvc.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: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-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 注解扫描(实现方式四), 通过扫描将带有@Controller注解的类交由spring容器管理并维护 -->
<context:component-scan base-package="com.pers.controller"/> <!-- 处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean> </beans>

    其中:

      a) 2~16行这些文件头详细介绍请看另一篇文章:XXXXXX。

      b) 19行表示指定注解扫描的范围,这里是"com.pers.controller"即:扫描com.pers.controller包下的所有文件(当然,首先需要创建package:com.pers.controller)。

      c)22、25行分别配置处理器映射器和处理器适配器,实际开发中,使用下面注解驱动的方式代替上面两种配置(更简洁),使用这种配置默认加载了很多需要的类型转换器,如json,还可以将自定义类型转换器添加到该配置中。

 <!-- 注解驱动自动注册组件, 处理器映射器和处理器适配器通过注解驱动的方式配置代替下面的处理器映射器和处理器适配器 -->
<mvc:annotation-driven/>

      c) 28~31行,配置视图解析器ViewResolver,通过配置逻辑地址(前缀和后缀),将ModelAndView对象进行拆分,将model对象渲染到视图页面。如果不配置ViewResolver,Spring MVC默认依然将org.springframework.web.servlet.view.InternalResourceViewResolver作为ViewResolver,但是prefix和suffix的value都为空。

  2.5 创建index.jsp(WebContent下)

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC登录页面</title>
</head>
<body>
<h2>SpringMVC示例</h2>
<form action="./user/login" method="post">
username:<input type="text" id="name" name="username" /><br/>
password:<input type="password" id="password" name="password" /><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>

    其中:

      a) 11行action="./user/login"表示请求的url,method="post"表示post请求。

  2.6 创建UserController类(com.pers.controller包下)

 package com.pers.controller;

 import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; /**
* @author liangyadong
* @date 2017年2月28日 下午2:25:39
* @version 1.0
*/
@Controller
@RequestMapping("/user")
public class UserController { @RequestMapping(value="/login",method={RequestMethod.POST,RequestMethod.GET})
public ModelAndView login(String username, String password){
ModelAndView mv = new ModelAndView();
// 指定返回页面loginSucc.jsp
mv.setViewName("loginSucc");// 当不配置视图解析器的时候,参数loginSucc改为:/WEB-INF/jsp/loginSucc.jsp
// 设置返回信息
mv.addObject("msg", "欢迎,登录成功!");
return mv;
} }

   其中:

      a) 13行@Controller注解,表明自己是一个Controller。

      b) 14行@RequestMapping("/user")注解,和17行@RequestMapping(value="/login")注解共同组合为/user/login作为jsp中请求的url。/user注解放在类上,/login注解放在方法上并且与方法名login()相同。之所以拆开,目的是分类化管理Controller,这一点称为“窄化请求”。

      c) 14行@RequestMapping(value="/login",method={RequestMethod.POST,RequestMethod.GET})的method限定请求方法。

      d) 21行指定返回的页面loginSucc.jsp,不是瞎返回的,这个jsp的位置是和springmvc.xml配置文件的视图解析器相匹配的,视图解析器前缀"/WEB-INF/jsp/",后缀".jsp",意思就是返回这个目录下的页面loginSucc.jsp。

      e) 关于Controller的返回值可以参考另一篇文章:XXXXXX

  2.7 创建返回成功的页面

    创建loginSucc.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC欢迎页面</title>
</head>
<body>
返回信息:${msg}
</body>
</html>

  2.8 测试

    将该动态工程加入tomcat,启动tomcat,打开浏览器地址栏输入:localhost:8080/SpringMVC/index.jsp,如下图所示:

    点击"登录",成功跳转到登录成功页面如下图:

 三. 附图

  3.1. 最终项目结构图:

    

四. 总结

  以上是Spring MVC基于注解的实现方式,也是最常用的方式。除了注解还有非注解的实现方式,非注解的实现方式是通过实现Controller接口或HttpRequestHandler接口,但是这种方式仅仅实现了一个方法(handlerRequest()),而在实际开发中一个Controller往往代表一个模块,该模块下会有许多方法,那么非注解的实现方式显然不合适了,于是就通过注解的方式实现来解决。

  默认加载的配置信息(在web.servlet中的DispatcherServlet.properties中配置了默认的各种器)详见下图:

  

   

  可以看到,该文件里面加载了处理器映射器、处理器适配器、视图解析器。

  SpringMVC环境搭建并不难,重要的是要看源码。

springmvc环境搭建及实例的更多相关文章

  1. SpringMVC环境搭建和详解

    1.Spring容器和SpringMVC容器是父子容器 1.1 SpringMVC容器可以调用Spring容器中的所有内容 1.2 图示 2.SpringMVC环境搭建 1.导入jar包 2.在web ...

  2. springmvc环境搭建以及常见问题解决

    1.新建maven工程 a)  打开eclipse,file->new->project->Maven->Maven Project b)  下一步 c)   选择创建的工程为 ...

  3. spring入门(五)【springMVC环境搭建】

    springMVC作为spring的一个WEB组件,是一个MVC的思想,减少了WEB开发的难度,现介绍springMVC环境的搭建,具体的原理放在后面介绍.用过框架的朋友都知道要在WEB项目中使用一个 ...

  4. monkeyrunner之环境搭建及实例(三)

    Monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器. 一.Monkeyrunner简介 1.MOnkeyrunner相对Mo ...

  5. SpringMvc环境搭建(配置文件)

    在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...

  6. Struts2环境搭建及实例解析

    与struts1框架的使用一样,struts2的环境搭建及使用同样分为以下几个步骤: 1.      引入jar包(这里以struts2.2.3为例),所需jar包有以下几个: a)        s ...

  7. SpringMVC 环境搭建

    SpringMVC 框架环境搭建操作步骤如下: 创建动态 Web 项目 配置 Tomcat 服务器 配置 SpringMVC 前端控制器 <?xml version="1.0" ...

  8. Struts2(一)---struts2的环境搭建及实例

    刚刚接触struts2,有点懵懵懂懂,还是习惯于先写代码,然后慢慢来理解其中的思想. 这篇文章主要内容是strusts的环境搭建及通过一个简单的例子来理解到底是怎么使用struts来简化编程的. 1. ...

  9. 我的第一个MVC程序(SpringMVC的环境搭建与实例运用)

    做一个完整点的mvc框架的搭建流程吧 Spring包含jar包下载 SpingMVC是基于Spring的一种关于web的解决方案,所以,使用springMVC,首先要准备有关Spring的一些jar包 ...

随机推荐

  1. kafka深入研究(六)

    Kafka Producer端封装自定义消息 Kafka.network包源码解读 Kafka Consumer端的一些解惑 Kafka producer使用注意 kafka0.8的一些变动,先收藏, ...

  2. 玩转kafka

    http://zookeeper.apache.org/releases.html#download http://kafka.apache.org/downloads.html(下载最新 二进制版本 ...

  3. 使用java api操作HDFS文件

    实现的代码如下: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import ...

  4. OTL使用指南

    1 OTL简介 OTL 是 Oracle, Odbcand DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持当前所有的各种主流数据库, ...

  5. Javascript开发笔记:不完整的继承

    Javascript的继承和标准的oop继承有很大的区别,Javascript的继承是采用原型链的技术,每个类都会将“成员变量”和“成员函数”放到 prototype 上,Js++都过supercla ...

  6. nginx配置解决vue单页面打包文件大,首次加载慢的问题

    cnpm run build 文件过大,其中主要是vender.js有1.5M,代码部署到服务器,首次访问加载页面时比较慢,耗时6.5s左右,所以需要优化下. 1.Nginx开启gzip 找到ngin ...

  7. 利用js_API 执行对html文档元素的属性的CRUD操作

    转自:http://my.oschina.net/felay/blog/303470 <!DOCTYPE html> <html> <head> <meta ...

  8. Opera Unite如何架设自己的网站

    1使用Opera的File Sharing可以共享你的文件 2使用Opera的Stream media可以共享你的视频,有些格式甚至可以直接在浏览器端打开(比如MOV,但是需要安装Quicktime的 ...

  9. 2.6.33中关于at91sam9260的i2c controller驱动的问题

    在为at91sam9260移植2.6.33内核的I2C时,直接用driver/bus/i2c-at91.c这个iic的adapter驱动是不能用的,而且在makemenuconfig时,在device ...

  10. 如何:在 DHTML 代码和客户端应用程序代码之间实现双向通信

    https://msdn.microsoft.com/zh-cn/library/a0746166 可以使用 WebBrowser 控件向 Windows 窗体客户端应用程序添加现有的动态 HTML ...