SpringMVC學習簡單HelloWorld實例


首先還是從一個簡單的Hello World項目說起:

 

我機器的開發環境為:

Ubuntu12.04(不同操作系統對本系列項目沒有影響);

開發工具:Eclipse For JavaEE;

數據庫:MySql5.5.35;

運行環境:TomCat V7.0;

JDK:JDK 1.7.0_45;

項目工程為:Dynamic Web Project;

 

一、項目依賴的jar包:

1.Spring框架依賴的jar包:

日志:commons-logging-1.1.3.jar;

JSTL支持:jakarta-taglibs-standard-1.1.2中的jstl.jar和standard.jar;

2.Spring的jar包:

spring-framework-3.2.5.RELEASE/libs中的jar包(這里為了方便我直接把全部都復制過去了);

把以上的jar包全部復制到項目的WebContent/WEB-INF/lib目錄中。

 

二、在/WEB-INF中添加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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 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>SpringMVCLesson</display-name> 
        
    <servlet>
        <servlet-name>SpringMVCLesson</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springservlet-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!-- load-on-startup必須放在最后 -->
    </servlet>
    <!-- Spring MVC配置文件結束 -->
    
    <servlet-mapping>
        <servlet-name>SpringMVCLesson</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
</web-app>
復制代碼

首先是配置DispatcherServlet,根據系列(1)的Spring MVC響應流程圖,可以看出DispatcherServlet主要就是攔截請求,然后調用對應的Controller和Action,解析和渲染指定的視圖並返回響應 。

其中classpath:springservlet-config.xml指定具體的配置文件為springservlet-config.xml。

<load-on-startup>1</load-on-startup>是啟動順序,讓這個Servlet隨Servletp容器一起啟動,必須放在<servlet> 配置的最后。

servlet-mapping中的<servlet-name>指定配置的是哪個servlet,<url-pattern>則指定攔截哪些請求到該servlet,這里配置的是攔截全部請求。

 

三、springservlet-config.xml文件配置:

在項目中新建一個resources的Source Folder文件夾,並添加springservlet-config.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:util="http://www.springframework.org/schema/util"
  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/util
  http://www.springframework.org/schema/util/spring-util.xsd
  http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/mvc
  http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
    
    <!-- 默認的注解映射的支持 -->  
    <mvc:annotation-driven/>
      
    <!-- 如果當前請求為“/”時,則轉發到“/helloworld/index” -->
    <mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 
    <!-- 靜態資源映射 -->
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
    <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
    <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
    <mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
    <mvc:resources mapping="images/**" location="/WEB-INF/images/" />
    <!-- 當上面要訪問的靜態資源不包括在上面的配置中時,則根據此配置來訪問 -->
    <mvc:default-servlet-handler/>

    <!-- 開啟controller注解支持 -->
    <!-- use-default-filters="false" 只掃描指定的注解 -->
    <context:component-scan base-package="com.demo.web.controllers" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
      
    <!-- 視圖解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
       <property name="contentType" value="text/html"/>        
       <property name="prefix" value="/WEB-INF/views/"/>
       <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>
復制代碼

<mvc:annotation-driven/> 開啟注解映射支持,它是為了簡化配置的縮寫形式,它相當於以下2個配置:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

由於我們在web.xml文件里面配置的是攔截所有的請求到該servlet,所以我們在這里要對靜態資源文件映射作一下配置,否則請求這些資源文件會返回404:

復制代碼
<!-- 靜態資源映射 -->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
<mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
<mvc:resources mapping="images/**" location="/WEB-INF/images/" />
<!-- 當上面要訪問的靜態資源不包括在上面的配置中時,則根據此配置來訪問 -->
<mvc:default-servlet-handler/>
復制代碼

開啟Controller注解支持,並配置只掃描指定包下面的Controller:

<context:component-scan base-package="com.demo.web.controllers" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

配置視圖解析器,並指定視圖所在的文件夾:

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

添加HelloWorldController,在項目中新建一個web的Source Folder文件夾,並在文件夾下面添加com.demo.web.controllers包,在包中添加一個HelloWorldController類,類中內容如下:

復制代碼
package com.demo.web.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping(value = "/helloworld")
public class HelloWorldController {

    @RequestMapping(value="/index", method = {RequestMethod.GET})
    public ModelAndView index(){
        
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("message", "Hello World!");  
        modelAndView.setViewName("index");  
        return modelAndView;
    }
    
}
復制代碼

其中@Controller 注解把該class指定為controller,controller 上的@RequestMapping 注解的 value值指定該controller所映射的請求。

方法上的@RequestMapping 注解指定該方法為一個action,value 值指定該action所映射的請求,method 中的RequestMethod.GET指定該action只接受get請求。

ModelAndView 中的setViewName指定了該action所對應的視圖名稱,解析視圖時會在springservlet-config.xml文件指定的視圖文件夾中尋找對應的視圖。

 

添加視圖,在項目/WEB-INF文件夾下新建一個views文件夾,並在views中添加index.jsp視圖,視圖內容如下:

復制代碼
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    ${message}
</body>
</html>
復制代碼

 

運行項目,由於我們之前配置了:<mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 所以直接可以看到結果:

1

把請求的URL地址改為配置的地址:http://localhost:8080/SpringMVCLesson/helloworld/index,可以看到結果相同:

2

代碼下載:http://pan.baidu.com/s/1o6LRw7o

 


免責聲明!

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



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