【轉】spring MVC入門示例(hello world demo)


部分內容來自網絡:《第二章 Spring MVC入門 —— 跟開濤學SpringMVC 》

1. Spring MVC介紹

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發,Spring Web MVC也是要簡化我們日常Web開發的。

Spring Web MVC也是服務到工作者模式的實現,但進行可優化。前端控制器是DispatcherServlet;應用控制器其實拆為處理器映射器(Handler Mapping)進行處理器管理和視圖解析器(View Resolver)進行視圖管理;頁面控制器/動作/處理器為Controller接口(僅包含ModelAndView handleRequest(request, response) 方法)的實現(也可以是任何的POJO類);支持本地化(Locale)解析、主題(Theme)解析及文件上傳等;提供了非常靈活的數據驗證、格式化和數據綁定機制;提供了強大的約定大於配置(慣例優先原則)的契約式編程支持。

2. Spring MVC的優點

  • 讓我們能非常簡單的設計出干凈的Web層和薄薄的Web層;
  • 進行更簡潔的Web層的開發;
  • 天生與Spring框架集成(如IoC容器、AOP等);
  • 提供強大的約定大於配置的契約式編程支持;
  • 能簡單的進行Web層的單元測試;
  • 支持靈活的URL到頁面控制器的映射;
  • 非常容易與其他視圖技術集成,如Velocity、FreeMarker等等,因為模型數據不放在特定的API里,而是放在一個Model里(Map數據結構實現,因此很容易被其他框架使用);
  • 非常靈活的數據驗證、格式化和數據綁定機制,能使用任何對象進行數據綁定,不必實現特定框架的API;
  • 提供一套強大的JSP標簽庫,簡化JSP開發;
  • 支持靈活的本地化、主題等解析;
  • 更加簡單的異常處理;
  • 對靜態資源的支持;
  • 支持Restful風格。

2. 環境配置

新建一個web工程,file->new->web project,取名為SpringMVC。將spring中的jar中復制到SpringMVC/WEB-INF/lib下。spring中有些與struts相關的包可以不復制,因為這里用不到。除此之外,還需要

commons-logging.jar/jstl.jar/standard.jar這三個依賴包。配置完后,lib下的jar包如下所示:

3. 入門示例

3.1 我們首先從web.xml開始配置。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	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">
  <display-name>SpringMVC</display-name>	
  
	<servlet>  
    	<servlet-name>SpringMVC</servlet-name>  
    	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    	<load-on-startup>1</load-on-startup>  
       	</servlet>  
	<servlet-mapping>  
    	<servlet-name>SpringMVC</servlet-name>  
    	<url-pattern>/</url-pattern>  
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>MyJsp.jsp</welcome-file>
	</welcome-file-list>
</web-app>

load-on-startup表示啟動容器時初始化該Servlet;

url-pattern表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。

自此請求已交給Spring Web MVC框架處理,因此我們需要配置Spring的配置文件,默認DispatcherServlet會加載WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例為WEB-INF/ SpringMVC-servlet.xml。

3.2 再來配置SpringMVC-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">  
    
 	<bean name="/test1/helloWorld" class="com.SpringMVC.web.controller.HelloWorldController" />  
    
	<!-- ViewResolver -->  
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/WEB-INF"/>  
    	<property name="suffix" value=".jsp"/>  
	</bean>
	
</beans>  

InternalResourceViewResolver:用於支持Servlet、JSP視圖解析;

prefix和suffix:查找視圖頁面的前綴和后綴(前綴[邏輯視圖名]后綴),比如傳進來的邏輯視圖名為hello,則該jsp視圖頁面應該存放在“WEB-INF/hello.jsp”;

<bean name="test1/helloWorld" ... />這里表示傳來的url與代碼中的controller的對應關系。

3.3 下面我們來寫controller類代碼

package com.SpringMVC.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;


public class HelloWorldController implements Controller{

	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("--------------hello world! 世界你好!--------------------");
		return new ModelAndView("/helloWorld");
	}
}

這里實現了一個接口,重寫了其中的handleRequest函數。函數中,在后台打印一段文件,並將helloWorld.jsp頁面返回給瀏覽器。因為在-servlet.xml中進行了配置,所以helloWorld.jsp文件應在WEB-INF文件夾下,且此處返回時僅寫helloWorld即可,無需加后綴.jsp。

3.4 jsp頁面

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>Hello World!</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">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    -----------------Hello World! ----------------------<br>
  </body>
</html>

3.5 完成后的目錄結構

SpringMVC
  src
    com.SpringMVC.web.controller
      HelloWorldController.java
  WebRoot
    WEB-INF
      lib
      helloWorld.jsp
      SpringMVC-servlet.xml
      web.xml

5. 運行、訪問頁面

將SpringMVC部署到tomcat服務器上,運行。在瀏覽器中輸入訪問地址:http://localhost:8080/SpringMVC/test1/helloWorld。應該就可以看到前台顯示helloWorld.jsp頁面,后台打印“--------------hello world! 世界你好!--------------------”字符串了。

6. 遇到的小問題

我最先開始配置-servlet.xml文件時,將<property name="prefix" value="/WEB-INF"/> 配置為 <property name="prefix" value="/"/>,即返回SpringMVC根目錄,即WebRoot的jsp頁面。結果,后台可以打印出預期的字符串,而jsp頁面卻提示找不到資源,404錯誤,可是事實上我已經將helloWorld.jsp頁面放置在SpringMVC的根目錄下了。不知道這是為什么……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM