Spring MVC新手教程(一)

直接乾貨html

model 考慮給用戶展現什麼。關注支撐業務的信息構成。構建成模型。前端

control 調用業務邏輯產生合適的數據以及傳遞數據給視圖用於呈獻;java

view怎樣對數據進行佈局,以一種優美的方式展現給用戶;web

  

MVC核心思想:業務數據抽取和業務數據呈獻相分離。spring

 

 看看Spring MVC官網給的圖:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.htmlexpress



          Spring’sweb MVC framework is, like many other web MVC frameworks, request-driven, designed around a central Servlet that dispatchesrequests to controllers and offers other functionality that facilitates thedevelopment of web applications. Spring’s DispatcherServlet however, doesmore than just that. It is completely integrated with the Spring IoC containerand as such allows you to use every other feature that Spring has.spring-mvc

         Therequest processing workflow of the Spring Web MVC DispatcherServlet isillustrated in the following diagram.Thepattern-savvy reader will recognize that the DispatcherServlet is an expressionof the "Front Controller" design pattern (this is a pattern thatSpring Web MVC shares with many other leading web frameworks).mvc



簡單理解就是:client發過來的請求,首先被交給叫作DispatcherServlet的前端控制器去處理,由它決定交給哪一個Control去處理。

處理完後,還會返回結果給Front controller。而後前端控制器再去和View交互,最後response給用戶。是否是很是其餘MVC框架很是像呢?比方Struts 2.0 app


當中大概設計到這些概念(看不懂不要緊,後面文章會解釋):先看個臉熟框架

DispatchServlet 

Controller

HandlerAdapter

HandlerInterceptor

HandlerMapping

HandlerExecutionChain

ModelAndView

ViewResolver

View

 

 

好了,是否是已經火燒眉毛了呢?如下給個高速入門的實例,很是easy,僅僅有一個java文件。兩個配置文件和一個終於的jsp文件:


首先是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>Spring MVC</display-name> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- DispatchServlet相應的上下文配置,默以爲/WEB-INF/$servlet-name$-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <!-- mvc-dispatcher攔截所有的請求 --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>


而後是:mvc-dispatcher-servlet.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"
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	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-3.0.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
		 
  <!--激活@Required @Autowired,JSP250'S @PostConstruct, @PreDestroy @Resource等標註 -->	 
  <context:annotation-config/>
		 
  <!--DispatcherServlet上下文,僅僅搜索@Controller標註的類。不搜索其它搜索的類 -->	 
  <context:component-scan base-package="com.xidian.mvcdemo.controller">
  		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  </context:component-scan> 
  
  <!--啓用HandlerMapping標籤 -->
  <mvc:annotation-driven/>
  <!--ViewResovlver啓用。視圖解析器 -->
  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 
	  <!--存放jsp文件的目錄位置 -->
	  <property name="prefix" value="/WEB-INF/jsps/"/> 
	  <property name="suffix" value=".jsp"/> 
  </bean>
</beans>
  
 

HelloMvcConntroller.java

package com.xidian.mvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/hello")
//提示Spring MVC這是一個Controller,以及攔截根文件夾下的hello
public class HelloMvcConntroller {
	
	//host:port/hello/mvc
	@RequestMapping("/mvc")
	public String helloMvc(){
		return "home";  //返回home.jsp
	}
}

最後是一個home.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 'home.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>
    Hello Spring MVC <br>
  </body>
</html>

可以這樣理解程序之間的關係:首先在web.xml中咱們用servlet攔截了所有請求交給Spring MVC的Dispatcher,而後它去找對應文件夾下的mvc-dispatcher-servlet.xml文件(也可以不設置,會在默認位置載入文件,代碼中有說明,這裏僅僅是幫助養成良好的文件歸檔習慣)。咱們在對應的HelloMvcConntroller.java中加上的@Controller 

@RequestMapping("/hello")  @RequestMapping("/mvc")註解,會告訴Spring MVC這裏是Controller,當前端控制器發送來的請求符合這些要求時。就交給它處理。最後會返回home.jsp,哪裏的home.jsp?

mvc-dispatcher-servlet.xml中的最後一部分,對視圖解析器的配置。


你看會了嗎?歡迎談論 http://blog.csdn.net/code_7

相關文章
相關標籤/搜索