亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java Spring MVC4環(huán)境搭建實(shí)例詳解(步驟)

 更新時(shí)間:2017年08月31日 19:08:53   作者:東陸之滇  
spring WEB MVC框架提供了一個(gè)MVC(model-view-controller)模型-視圖-控制器的結(jié)構(gòu)和組件,利用它可以開發(fā)更靈活、松耦合的web應(yīng)用。MVC模式使得整個(gè)服務(wù)應(yīng)用的各部分(控制邏輯、業(yè)務(wù)邏輯、UI界面展示)分離開來(lái),使它們之間的耦合性更低

spring WEB MVC框架提供了一個(gè)MVC(model-view-controller)模型-視圖-控制器的結(jié)構(gòu)和組件,利用它可以開發(fā)更靈活、松耦合的web應(yīng)用。MVC模式使得整個(gè)服務(wù)應(yīng)用的各部分(控制邏輯、業(yè)務(wù)邏輯、UI界面展示)分離開來(lái),使它們之間的耦合性更低。

Model
模型層封裝了整個(gè)應(yīng)用程序的數(shù)據(jù)對(duì)象并且將會(huì)持久化POJO
View
視圖層負(fù)責(zé)渲染模型層的數(shù)據(jù),一般最終使用HTML展示到用戶瀏覽器或移動(dòng)設(shè)備終端
Controller
控制層負(fù)責(zé)處理用戶的請(qǐng)求、構(gòu)建合適的模型數(shù)據(jù)并將其傳輸?shù)揭晥D層進(jìn)行渲染

SpringMVC核心-DispatcherServlet分發(fā)器

SpringMVC框架是設(shè)計(jì)用來(lái)處理所有的HTTP請(qǐng)求和響應(yīng)的,它的核心是圍繞著一個(gè)分發(fā)器DispatcherServlet。在Spring Web MVC DispatcherServlet的請(qǐng)求處理流程如下圖所示:

這里寫圖片描述

以下是對(duì)應(yīng)一個(gè)HTTP請(qǐng)求時(shí)分發(fā)器的處理流程:

1.接收到一個(gè)Http請(qǐng)求后,DispatcherServlet 告訴映射處理器HandlerMapping 去調(diào)用相應(yīng)的Controller(控制器)。

2.然后Controller控制器根據(jù)接收到的的請(qǐng)求調(diào)用相應(yīng)的Service服務(wù)方法,基于請(qǐng)求所使用的GET或PUT等其它請(qǐng)求方式。Service方法將會(huì)根據(jù)業(yè)務(wù)邏輯設(shè)置模型數(shù)據(jù)并且返回一個(gè)視圖給DispatcherServlet分發(fā)器。

3.DispatcherServlet 分發(fā)器將會(huì)請(qǐng)求視圖解析器ViewResolver去處理找到該請(qǐng)求對(duì)應(yīng)的已經(jīng)定義的視圖view。

4.一旦視圖確定了,DispatcherServlet 會(huì)將模型數(shù)據(jù)傳輸給該視圖view,最終渲染到用戶瀏覽設(shè)備上。

上述提到的所有組件:映射處理器HandlerMapping, 控制器Controller 和視圖解析器ViewResolver都是WebApplicationContext 的組成部分。WebApplicationContext 擴(kuò)展了ApplicationContext ,但是為web應(yīng)用程序提供了更多的必要的特性。

SpringMVC需要的配置要求

為了將用戶的請(qǐng)求映射到分發(fā)器DispatcherServlet 去處理,需要在web.xml中配置URL映射。
以下是一個(gè)聲明和映射了Demo應(yīng)用HelloWeb的分發(fā)器DispatcherServlet 的配置示例(就是servlet映射配置):

<web-app id="WebApp_ID" version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <display-name>Spring MVC Application</display-name>

 <!--聲明一個(gè)servlet配置-->
 <servlet>
 <servlet-name>HelloWeb</servlet-name>
 <servlet-class>
  org.springframework.web.servlet.DispatcherServlet
 </servlet-class>
 <load-on-startup>1</load-on-startup>
 </servlet>

 <!--配置servlet與處理請(qǐng)求的映射模式-->
 <servlet-mapping>
 <servlet-name>HelloWeb</servlet-name>
 <url-pattern>/</url-pattern>
 </servlet-mapping>

</web-app>

首先: web.xml文件根據(jù)servlet規(guī)范放在WebContent/WEB-INF目錄下,使用Mavan風(fēng)格的放在scr/main/webapp/WEB-INF目錄下。

一旦初始化HelloWeb的的DispatcherServlet,框架將會(huì)嘗試從WebContent/WEB-INF目錄下的[servlet-name]-servlet.xml配置文件加載應(yīng)用上下文application context。在這個(gè)Demo中,會(huì)去加載 HelloWeb-servlet.xml文件。這是默認(rèn)行為,我們也可以指定加載配置文件的位置,這點(diǎn)后面會(huì)有實(shí)例示范。

然后: <\servlet-mapping>標(biāo)簽指明什么樣的URL才會(huì)被DispatcherServlet映射處理。這里配置的是所有的HTTP請(qǐng)求都會(huì)被HelloWeb的DispatcherServlet映射處理

如果你不想使用默認(rèn)的文件名[servlet-name]-servlet.xml和默認(rèn)的context加載位置WebContent/WEB-INF(或者scr/main/webapp/WEB-INF),你也可以在web.xml中通過(guò)添加一個(gè)servlet監(jiān)聽器ContextLoaderListener來(lái)自定義指定文件名和位置。示例配置如下:

<web-app...>

<!-------- DispatcherServlet的定義,上面的配置這里略過(guò)了----->
....


<!--指定上下文配置文件的位置,指定classpath下的spring-mvc-config.xml文件
使用Maven風(fēng)格,可以將該文件放在src/main/resources目錄下
-->
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:spring-mvc-config.xml</param-value>
</context-param>
<!--增加監(jiān)聽器-->
<listener>
 <listener-class>
 org.springframework.web.context.ContextLoaderListener
 </listener-class>
</listener>
</web-app>

接下來(lái): 使用自定義servlet上下文配置后,我們來(lái)看看spring-mvc-config.xml文件的配置信息,該文件放在src/main/resources目錄下,文末會(huì)展示Demo結(jié)構(gòu)視圖:

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.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 ">

 <context:component-scan base-package="org.byron4j" />

 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
 <property name="prefix" value="/WEB-INF/jsp/" />
 <property name="suffix" value=".jsp" />
 </bean>

 <mvc:resources mapping="/resources/**" location="/resources/" />

 <mvc:annotation-driven />

</beans>

這里有幾點(diǎn)比較重要:

[servlet-name]-servlet.xml文件(現(xiàn)在我們自定義為spring-mvc-config.xml) 會(huì)創(chuàng)建已經(jīng)定義的bean, 會(huì)覆蓋其他位置已經(jīng)定義的同名的全局的bean,這點(diǎn)是血淚的教訓(xùn),參見mapper注入失敗問題解決

<context:component-scan...> 標(biāo)簽用于激活Spring MVC注解掃描功能,像@Controller、 @RequestMapping等

InternalResourceViewResolver 將使用下面定義的規(guī)則來(lái)解析視圖名稱。 按照我們配置的規(guī)則:一個(gè)名為”hello”的邏輯視圖的實(shí)現(xiàn)將會(huì)是/WEB-INF/jsp/目錄下的hello.jsp文件來(lái)渲染。

接下來(lái): 我們編寫一些實(shí)際使用的組件例如Controller, Model and View。

定義一個(gè)Controller

DispatcherServlet代表請(qǐng)求通過(guò)控制器來(lái)執(zhí)行該請(qǐng)求的指定業(yè)務(wù)處理功能。@Controller 注解表明該類是一個(gè)控制器。@RequestMapping注解用于請(qǐng)求的URL映射到一個(gè)類或一個(gè)特定的處理方法

package org.byron4j.helloWeb;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Hello world!
 *
 */
@Controller
@RequestMapping("/hello")
public class HelloController{

 @RequestMapping(method = RequestMethod.GET)
 public String printHello(ModelMap model) {
 model.addAttribute("message", "Hello Spring MVC Framework!");
 return "hello";
 }

}

@Controller注解將一個(gè)類定義為Spring MVC 的控制器controller。 在這里@RequestMapping的第一個(gè)使用位置是表明這個(gè)Controller類的所有方法都是處理/hello請(qǐng)求的。 第二個(gè)位置的用法@RequestMapping(method = RequestMethod.GET) 表明printHello()方法作為這個(gè)Controller類的默認(rèn)服務(wù)方法去處理HTTP的GET請(qǐng)求。你可以依葫蘆畫瓢定義一個(gè)方法處理同名的的URL的POST請(qǐng)求,試試,你僅僅需要在新方法中將@RequestMapping(method = RequestMethod.GET)替換為@RequestMapping(method = RequestMethod.POST)即可。

你也可以將上面的Controller替換成下面的的這種寫法:

@Controller
public class HelloController{

 @RequestMapping(value = "/hello", method = RequestMethod.GET)
 public String printHello(ModelMap model) {
 model.addAttribute("message", "Hello Spring MVC Framework!");
 return "hello";
 }

}

功能是一樣的。

@RequestMapping的value屬性指明該方法僅僅映射處理的GET方式的請(qǐng)求/hello。 以下有幾點(diǎn)比較重要:

你可以在Controller的處理方法中調(diào)用其他業(yè)務(wù)方法去處理業(yè)務(wù)邏輯。

基于定義的業(yè)務(wù)邏輯,你需要在該方法中創(chuàng)建一個(gè)模型對(duì)象。你可以設(shè)置不同的模型屬性,這些屬性可以讓視圖訪問最終渲染給用戶。這個(gè)demo中創(chuàng)建了一個(gè)包含”message”屬性的模型對(duì)象。

一個(gè)定義的服務(wù)方法可以返回一個(gè)包含渲染模型的視圖名字的字符串。這個(gè)demo返回的”hello” 作為一個(gè)邏輯視圖的名字。

創(chuàng)建JSP視圖

SpringMVC支持多種類型的視圖顯示技術(shù)。包括 JSP, HTML, PDF, Excel worksheets, XML, Velocity 末班, XSLT, JSON, Atom 和RSS feeds, JasperReports, Thymeleaf等等。這里我們使用jap視圖, 在/WEB-INF/hello/jsp目錄下創(chuàng)建一個(gè)hello.jsp:

<html>
 <head>
 <title>Hello Spring MVC</title>
 </head>
 <body>
 <h2>${message}</h2>
 </body>
</html>

這里的${message} 是Controller中模型對(duì)象設(shè)置的屬性message的值。你還可以在你的視圖中展示另外的其他屬性。

demo最后自定義的web.xml:

<web-app 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"
 version="2.5">

 <display-name>Spring MVC Application</display-name>
 <welcome-file-list>
 <welcome-file>
  /index.jsp
 </welcome-file>
 </welcome-file-list>
 <!--聲明一個(gè)servlet配置-->
 <servlet>
 <servlet-name>dispatcherServlet</servlet-name>
 <servlet-class>
  org.springframework.web.servlet.DispatcherServlet
 </servlet-class>
 <!-- 自定義servlet文件名、文件位置需要使用該參數(shù)配置 -->
 <init-param>
 <!-- 分發(fā)器攔截的上下文-contextConfigLocation|指定servlet context配置文件的位置 -->
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring-mvc-config.xml</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
 </servlet>

 <!--配置servlet與處理請(qǐng)求的映射模式,會(huì)對(duì)所有*.jsp的后綴請(qǐng)求處理-->
 <servlet-mapping>
 <servlet-name>dispatcherServlet</servlet-name>
 <url-pattern>/</url-pattern>
 </servlet-mapping>


 <!--指定上下文配置文件的位置,指定classpath下的spring-mvc-config.xml文件
使用Maven風(fēng)格,可以將該文件放在src/main/resources目錄下
-->
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:spring-mvc-config.xml</param-value>
</context-param>
<!--增加監(jiān)聽器-->
<listener>
 <listener-class>
 org.springframework.web.context.ContextLoaderListener
 </listener-class>
</listener>
</web-app>

demo項(xiàng)目的pom.xml:

<project xmlns="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/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>org.byron4j</groupId>
 <artifactId>helloWeb</artifactId>
 <version>1.0.0-SNAPSHOT</version>
 <packaging>war</packaging>

 <name>helloWeb</name>
 <url>http://blog.csdn.net/zixiao217</url>

 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <spring.version>4.2.5.RELEASE</spring.version>
 <log4j.version>1.2.17</log4j.version>
 </properties>

 <dependencies>

 <!-- Spring -->
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
 </dependency>

 <!-- Log4j -->
 <dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>${log4j.version}</version>
 </dependency>


 <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
 <dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
 </dependency>


 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
 </dependency>
 <dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
 </dependency>
 </dependencies>


 <build>
 <plugins>
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.5.1</version>
  <configuration>
   <source>1.8</source>
   <target>1.8</target>
  </configuration>
  </plugin>
 </plugins>
 <finalName>helloWeb</finalName>
 </build>
</project>

以下是demo在eclipse的package explorer視圖:

這里寫圖片描述


以下是demo在eclipse的navigator視圖:

這里寫圖片描述

運(yùn)行項(xiàng)目,在瀏覽器輸入http://localhost:8080/helloWeb/hello,顯示:

這里寫圖片描述

若參考本文編寫第一個(gè)SpringMVC Demo跑不起來(lái),可以到原文留言提出意見。

相關(guān)文章

最新評(píng)論