你知道目前最流行的SpringMVC框架吗?如何搭建呢?

Spring MVC 是 Spring 家族中的一个 web 成员, 它是一种基于 Java 的实现了 Web MVC 设计思想的请求驱动类型的轻量级 Web 框架,即使用了 MVC 架构模式的思想,将 web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring MVC 也是要简化我们日常 Web 开发的。

Spring MVC 是服务到工作者思想的实现。前端控制器是 DispatcherServlet;应用控制器拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;支持本地化/国际化(Locale)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。

SpringMVC 搭建的方式

开发环境搭建

新建 Maven webApp

Springmvc 环境 jar 包依赖

配置 web.xml (前端控制器配置)

servlet-context.xml 配置

页面控制器的编写

添加视图页面

启动 jetty 服务器

案例实操

开发环境搭建

Eclipse + jdk1.7 + maven + Jetty

新建 Maven webApp

建立 springmvc01 工程并调整 web 环境。

Springmvc 环境 jar 包依赖

<projectxmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.xxx</groupId>

<artifactId>springmvc01</artifactId>

<packaging>war</packaging>

<version>0.0.1-SNAPSHOT</version>

<name>springmvc01 Maven Webapp</name>

<url>http://maven.apache.org</url>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

<!-- spring web -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>4.3.2.RELEASE</version>

</dependency>

<!-- spring mvc -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.3.2.RELEASE</version>

</dependency>

<!-- web servlet -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.0.1</version>

</dependency>

</dependencies>

<!-- jetty 插件 -->

<build>

<finalName>springmvc01</finalName>

<resources>

<resource>

<directory>src/main/resources</directory>

</resource>

</resources>

<plugins>

<!-- 编译环境插件 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>2.3.2</version>

<configuration>

<source>1.7</source>

<target>1.7</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<version>6.1.25</version>

<configuration>

<scanIntervalSeconds>10</scanIntervalSeconds>

<contextPath>/springmvc01</contextPath>

</configuration>

</plugin>

</plugins>

</build>

</project>

配置 web.xml (前端控制器配置)

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appid="WebApp_ID"version="3.0"

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_3_0.xsd">

<!-- 表示容器启动时 加载上下文配置 这里指定 spring 相关配置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:*.xml</param-value>

</context-param>

<!-- 启用 spring 容器环境上下文监听 -->

<listener>

    <listenerclass>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 编码过滤 utf-8 -->

<filter>

<description>char encoding filter</description>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- servlet 请求分发器 -->

<servlet>

<servlet-name>springMvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:servlet-context.xml</param-value>

</init-param>

<!-- 表示启动容器时初始化该 Servlet -->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springMvc</servlet-name>

<!-- 这是拦截请求, /代表拦截所有请求,拦截所有.do 请求 -->

<url-pattern>/</url-pattern>

</servlet-mapping>

</web-app>

要想启动我们的 springMvc 环境,目前对于 mvc 框架的配置还未进行。以上在 web.xml 中引用了 servlet-context.xml 文件。

servlet-context.xml 配置

<beansxmlns="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/mvc  

http://www.springframework.org/schema/mvc/spring-mvc.xsd  

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">

<!-- 扫描 com.xxx.controller 下包 -->

<context:component-scanbase-package="com.xxx.controller"/>

<!-- mvc 请求映射 处理器与适配器配置-->

<mvc:annotation-driven/>

<!--配置视图解析器 默认的视图解析器- -->

<beanid="defaultViewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="viewClass"

value="org.springframework.web.servlet.view.JstlView"/>

<propertyname="contentType"value="text/html"/>

<propertyname="prefix"value="/WEB-INF/jsp/"/>

<propertyname="suffix"value=".jsp"/>

</bean>

</beans>

如果返回乱码:配置消息转换器

<!-- 消息转换器 -->

<mvc:message-convertersregister-defaults="true">

<beanclass="org.springframework.http.converter.StringHttpMessageConverter">

    <propertyname="supportedMediaTypes"value="text/html;charset=UTF-8"/>

</bean>

</mvc:message-converters>

页面控制器的编写

/**

* 采用注解扫描形式

*/

@Controller

publicclassHelloController{

/**

* 请求映射地址 /hello

* @return

*/

@RequestMapping("/hello")

publicModelAndViewhello(){

ModelAndViewmv=newModelAndView();

mv.addObject("hello","hello spring mvc");

mv.setViewName("hello");

returnmv;

   }

}

添加视图页面

在 WEB-INF 下新建 jsp 文件夹 ,并在文件加下新建 hello.jsp

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%

Stringpath=request.getContextPath();

StringbasePath=

request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<basehref="<%=basePath%>">

<title>My JSP 'hello.jsp' starting page</title>

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="This is my page">

</head>

<body>

<!-- el 表达式接收参数值 -->

    ${hello}

</body>

</html>

启动 jetty 服务器

选中项目右键 → run as → maven build → goals 输入框中输入 jetty:run 即可启动服务器。

如果这里启动成功,浏览器(最好用强大的 chrome 或者火狐浏览器,程序员的最爱!!!)访问地址 http://localhost:8080/springmvc01/hello

最终效果如下:

至此,springmvc 环境搭建完毕。

扩展

Spring MVC 能帮我们做什么

让我们能非常简单的设计出干净的 Web 层;

进行更简洁的 Web 层的开发;

天生与 Spring 框架集成(如 IoC 容器、AOP 等);

提供强大的约定大于配置的契约式编程支持;

能简单的进行 Web 层的单元测试;

支持灵活的 URL 到页面控制器的映射;

非常容易与其他视图技术集成,如 Velocity、FreeMarker 等等,因为模型 数据不放在特定的 API 里,而是放在一个 Model 里(Map 数据结构实现,因此很容易被其他框架使用);

非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的 API;

支持灵活的本地化等解析;

更加简单的异常处理;

对静态资源的支持;

支持 Restful 风格。    

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容