Spring從入門到深入研究之搭建MVC

xiangsuixi 12年前發布 | 3K 次閱讀 jQuery插件 工作流

spring3 MVC手工搭建Spring3項目demo

步驟: 1.開發環境確認    2.Spring3jar    3.Spring3項目配置    4.其他

一、開發環境確認

    1.工具及版本

    jdk我用的是1.6的;jdk的下載安裝和配置就不講了,如果這個還搞不定還談什么spring

    myeclipse用的是6.0(實在太落后啦,還是8.X舒服)不過這里是手工搭建不使用自動生成工具,所以版本無所謂的;使用eclipse for     javaEEok,不過跟myeclipse可能在項目目錄上會有少許的不同,eclipseweb跟目錄是WebContent,而myeclipse通常是WebRoot

    tomcat6

    2.確認

    為了保證開發環境正常請做一下確認,在運行里輸入cmd打開命令行,輸入java -version命令,顯示類似如下內容:

    java version "1.6.0_23"
    Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
    Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)

然后,啟動tomcat6,請確認控制臺沒有報錯信息,控制臺輸出類似如下:

2011-1-19 14:58:27 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2011-1-19 14:58:27 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 255 ms
2011-1-19 14:58:27 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2011-1-19 14:58:28 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.20
2011-1-19 14:58:29 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2011-1-19 14:58:29 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2011-1-19 14:58:29 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/15  config=null
2011-1-19 14:58:29 org.apache.catalina.startup.Catalina start
信息: Server startup in 1401 ms

確認myeclipseeclipseserver視圖下有你的tomcat6且可以正常啟動關閉,如果沒有自行配置,如果不知道自己網上搜

確認你的myeclipseeclipse下的java平臺是剛才確認過的jdk1.6

這一部分最后一步,新建一個webProject,如果你用的是是eclipse for javaEE那么項目類型選擇Static web project

注意,eclipse新建web項目需要選擇target runtime,如果沒有就配上你的tomcat6myeclipse新建項目j2EE Specification Level項要選擇javaEE5.0

 二、Spring3jar

   1.下載Spring3

    先到官網現在吧,上網址:http://www.springsource.org/download 現在最新版本是3.0.5.

后跳轉到文件下載選擇頁面,需要下載兩個文件:

    spring-framework-3.0.5.RELEASE-with-docs.zip    spring-framework-3.0.5.RELEASE-dependencies.zip

但是現在官方已經沒有了 spring-framework-3.0.5.RELEASE-dependencies.zip的下載鏈接(這些依賴我們都可以分別到各自相關的開源項目下載),不知為何,你可以分別網上搜

spring-framework-3.0.5.RELEASE-with-docs.zip  

dependency的目錄結構基本上全是以com.XX org.XX為名字的目錄,太長了就不截圖了。

下面就是導入了,導入前先說明白兩點:

             1. spring3開始jar包不再包含全能的spring.jar了,而是分成20多個jar包了,配置可以按需引入了

             2.項目中使用spring除了引入dist目錄下的jar包,還需要dependencies下的一些依賴包,下面再具體說。

2.引入dist目錄下除了下面三個其余所有包

org.springframework.web.struts-3.0.5.RELEASE.jar

org.springframework.spring-library-3.0.5.RELEASE.libd

org.springframework.web.portlet-3.0.5.RELEASE.jar

如何引入jar包,對項目鼠標右鍵選擇【Build Path】,選擇【Add Extenal Archives,瀏覽到jar包的位置,打開即可

3.接下來,還必須導入日志相關的一個jar---commons logging和一個名為com.springsource.org.aopalliance-1.0.0.jarjar

分別在spring-framework-3.0.5.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1

spring-framework-3.0.5.RELEASE-dependencies\org.aopalliance\com.springsource.org.aopalliance\1.0.0

目錄下。如果不引入部署項目tomcat會報如下錯誤:嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

三、spring3配置

1.web.xml配置

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">
 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>
  </context-param>
 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <!--
對像js,css,gif等靜態文件的訪問,需要映射到默認的servlet -->

 <!-- 這里省去對靜態資源url的配置,當然這樣的話tomcat控制臺就會報警告了,對html的請求、頁面中的圖片及css效果也是無法訪問的

        不過我們這是搭基本環境嘛,就先不要圖片吧,如果想解決這個問題,可以看我另外一篇文章
 -->
 <!--
配置spring核心servlet -->
 <servlet>
  <servlet-name>spring</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>spring</servlet-name>
  <url-pattern>/</url-pattern>
  <!-- url
配置為/,不帶文件后綴,會造成其它靜態文件(jscss)不能訪問。如配為*.do,則不影響靜態文件的訪問 -->
 </servlet-mapping>

</web-app>

2.Spring應用上下文配置,在web.xml中我們配置了springservlet -----<servlet-name>spring</servlet-name>

web.xml里有這一段

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>
    </context-param>

用于開啟基于注解的springMVC功能那么我們需要在跟web.xml同一目錄下新建一個spring-servlet.xml文件,內容為:

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 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.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
     <!--
啟動注解驅動的Spring MVC功能,注冊請求url和注解POJO類方法的映射-->
     <mvc:annotation-driven />

     <!-- 啟動包掃描功能,以便注冊帶有@Controller@Service@repository@Component等注解的類成為springbean -->
     <context:component-scan base-package="com.mvc.rest" />

     <!-- 對模型視圖名稱的解析,在請求時模型視圖名稱添加前后綴 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/view/" p:suffix=".jsp" />
</beans>

配置是不是很清爽?多虧spring3增加的mvccontexttx等幾個命名空間了

四、其他

1.建包

新建一個包,包名就是我們spring-servlet.xml <context:component-scan base-package="com.mvc.rest"></context:component-scan> 
里的com.mvc.rest

2.建立Constroller

com.mvc.rest包下新建一個java類,代碼如下:

package com.mvc.rest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class RestConstroller {
 
 public RestConstroller() {
 }
 
 @RequestMapping(value = "/login/{user}", method = RequestMethod.GET)
 public ModelAndView myMethod(HttpServletRequest request,
   HttpServletResponse response, @PathVariable("user")
   String user, ModelMap modelMap) throws Exception {
  
  modelMap.put("loginUser", user);
  return new ModelAndView("/login/hello", modelMap);
 }

 @RequestMapping(value = "/welcome", method = RequestMethod.GET)
 public String registPost() {
  return "/welcome";
 }
}

3.建視圖

正如spring-servlet.xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/view/" p:suffix=".jsp" />所配置的視圖路徑,我們需要在WEB-INF下建立view目錄,在view下建立jsp文件;

正如RestConstroller里兩個方法的返回語句:return new ModelAndView("/login/hello", modelMap);return "/welcome";所約定,我們需要在view下建立相應的login目錄并在其下建立hello.jsp,在/WEB-INF/view下建立welcome.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">

  </head>
  
  <body>
   
你好:<%=request.getAttribute("loginUser") %>,現在時間是<%= new Date() %>
  </body>
</html>

welcome.jsp就隨意吧,測試嘛.

 4.部署訪問

myeclipse下部署項目并運行

打開瀏覽地址欄輸入:http://localhost:8080/sandDemo001/login/heamer 這里的heamer是自定義的,作為請求參數解析

輸入:http://localhost:8080/sandDemo001/welcome  則顯示你welcome.jsp應該顯示的內容。

整個過程已經完成,需要注意的有幾方面,1.環境一定要是可用的  2.jar包正確的引入到項目中   3.配置文件要小心修改,不要犯括號不配對類似的低級錯誤

 本文由用戶 xiangsuixi 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!