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

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

Spring MVC 是 Spring 家族中的一個(gè) web 成員, 它是一種基于 Java 的實(shí)現(xiàn)了 Web MVC 設(shè)計(jì)思想的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí) Web 框架,即使用了 MVC 架構(gòu)模式的思想,將 web 層進(jìn)行職責(zé)解耦,基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),Spring MVC 也是要簡(jiǎn)化我們?nèi)粘?Web 開(kāi)發(fā)的。

Spring MVC 是服務(wù)到工作者思想的實(shí)現(xiàn)。前端控制器是 DispatcherServlet;應(yīng)用控制器拆為處理器映射器(Handler Mapping)進(jìn)行處理器管理和視圖解析器(View Resolver)進(jìn)行視圖管理;支持本地化/國(guó)際化(Locale)解析及文件上傳等;提供了非常靈活的數(shù)據(jù)驗(yàn)證、格式化和數(shù)據(jù)綁定機(jī)制;提供了強(qiáng)大的約定大于配置(慣例優(yōu)先原則)的契約式編程支持。

SpringMVC 搭建的方式

開(kāi)發(fā)環(huán)境搭建

新建 Maven webApp

Springmvc 環(huán)境 jar 包依賴(lài)

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

servlet-context.xml 配置

頁(yè)面控制器的編寫(xiě)

添加視圖頁(yè)面

啟動(dòng) jetty 服務(wù)器

案例實(shí)操

開(kāi)發(fā)環(huán)境搭建

Eclipse + jdk1.7 + maven + Jetty

新建 Maven webApp

建立 springmvc01 工程并調(diào)整 web 環(huán)境。

Springmvc 環(huán)境 jar 包依賴(lài)

<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><!-- 編譯環(huán)境插件 --><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 (前端控制器配置)

<?xml version="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"><!-- 表示容器啟動(dòng)時(shí) 加載上下文配置 這里指定 spring 相關(guān)配置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:*.xml</param-value></context-param><!-- 啟用 spring 容器環(huán)境上下文監(jiān)聽(tīng) --><listener><listenerclass>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 編碼過(guò)濾 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 請(qǐng)求分發(fā)器 --><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><!-- 表示啟動(dòng)容器時(shí)初始化該 Servlet --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMvc</servlet-name><!-- 這是攔截請(qǐng)求, /代表攔截所有請(qǐng)求,攔截所有.do 請(qǐng)求 --><url-pattern>/</url-pattern></servlet-mapping></web-app>

要想啟動(dòng)我們的 springMvc 環(huán)境,目前對(duì)于 mvc 框架的配置還未進(jìn)行。以上在 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 請(qǐng)求映射 處理器與適配器配置--><mvc:annotation-driven/><!--配置視圖解析器 默認(rèn)的視圖解析器- --><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>

如果返回亂碼:配置消息轉(zhuǎn)換器

<!-- 消息轉(zhuǎn)換器 --><mvc:message-convertersregister-defaults="true"><beanclass="org.springframework.http.converter.StringHttpMessageConverter"><propertyname="supportedMediaTypes"value="text/html;charset=UTF-8"/></bean></mvc:message-converters>

頁(yè)面控制器的編寫(xiě)

/**

* 采用注解掃描形式

*/@ControllerpublicclassHelloController{/**

? ? * 請(qǐng)求映射地址 /hello

? ? * @return

? ? */@RequestMapping("/hello")publicModelAndViewhello(){ModelAndView mv=newModelAndView();mv.addObject("hello","hello spring mvc");mv.setViewName("hello");returnmv;}}

添加視圖頁(yè)面

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

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

<%

String path = request.getContextPath();

String basePath =?

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

%>

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

<html>

? ? <head>

? ? ? ? <base href="<%=basePath%>">

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

? ? ? ? <meta http-equiv="pragma" content="no-cache">

? ? ? ? <meta http-equiv="cache-control" content="no-cache">

? ? ? ? <meta http-equiv="expires" content="0">

? ? ? ? <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

? ? ? ? <meta http-equiv="description" content="This is my page">

? ? </head>?

? ? <body>

? ? <!-- el 表達(dá)式接收參數(shù)值 -->

? ? ${hello}

? ? </body>

</html>

啟動(dòng) jetty 服務(wù)器

選中項(xiàng)目右鍵 → run as → maven build → goals 輸入框中輸入 jetty:run 即可啟動(dòng)服務(wù)器。

如果這里啟動(dòng)成功,瀏覽器(最好用強(qiáng)大的?chrome?或者火狐瀏覽器,程序員的最?lèi)?ài)?。?!)訪問(wèn)地址 http://localhost:8080/springmvc01/hello

最終效果如下:

至此,springmvc 環(huán)境搭建完畢。

擴(kuò)展

Spring MVC 能幫我們做什么

讓我們能非常簡(jiǎn)單的設(shè)計(jì)出干凈的 Web 層;

進(jìn)行更簡(jiǎn)潔的 Web 層的開(kāi)發(fā);

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

提供強(qiáng)大的約定大于配置的契約式編程支持;

能簡(jiǎn)單的進(jìn)行 Web 層的單元測(cè)試;

支持靈活的 URL 到頁(yè)面控制器的映射;

非常容易與其他視圖技術(shù)集成,如 Velocity、FreeMarker 等等,因?yàn)槟P?數(shù)據(jù)不放在特定的 API 里,而是放在一個(gè) Model 里(Map 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),因此很容易被其他框架使用);

非常靈活的數(shù)據(jù)驗(yàn)證、格式化和數(shù)據(jù)綁定機(jī)制,能使用任何對(duì)象進(jìn)行數(shù)據(jù)綁定,不必實(shí)現(xiàn)特定框架的 API;

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

更加簡(jiǎn)單的異常處理;

對(duì)靜態(tài)資源的支持;

g MVC 能幫我們做什么

讓我們能非常簡(jiǎn)單的設(shè)計(jì)出干凈的 Web 層;

進(jìn)行更簡(jiǎn)潔的 Web 層的開(kāi)發(fā);

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

提供強(qiáng)大的約定大于配置的契約式編程支持;

能簡(jiǎn)單的進(jìn)行 Web 層的單元測(cè)試;

支持靈活的 URL 到頁(yè)面控制器的映射;

非常容易與其他視圖技術(shù)集成,如 Velocity、FreeMarker 等等,因?yàn)槟P?數(shù)據(jù)不放在特定的 API 里,而是放在一個(gè) Model 里(Map 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),因此很容易被其他框架使用);

非常靈活的數(shù)據(jù)驗(yàn)證、格式化和數(shù)據(jù)綁定機(jī)制,能使用任何對(duì)象進(jìn)行數(shù)據(jù)綁定,不必實(shí)現(xiàn)特定框架的 API;

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

更加簡(jiǎn)單的異常處理;

對(duì)靜態(tài)資源的支持;

支持 Restful 風(fēng)格。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容