Spring從入門到深入研究之搭建MVC
spring3 MVC手工搭建Spring3項目demo
步驟: 1.開發環境確認 2.Spring3的jar包
3.Spring3項目配置 4.其他
一、開發環境確認
1.工具及版本
jdk我用的是1.6的;jdk的下載安裝和配置就不講了,如果這個還搞不定還談什么spring啊
myeclipse用的是6.0(實在太落后啦,還是8.X舒服)不過這里是手工搭建不使用自動生成工具,所以版本無所謂的;使用eclipse
for javaEE也ok,不過跟myeclipse可能在項目目錄上會有少許的不同,eclipse的web跟目錄是WebContent,而myeclipse通常是WebRoot
tomcat是6的
2.確認
為了保證開發環境正常請做一下確認,在運行里輸入cmd打開命令行,輸入java -version命令,顯示類似如下內容:
java version "
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/
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
確認myeclipse或eclipse下server視圖下有你的tomcat6且可以正常啟動關閉,如果沒有自行配置,如果不知道自己網上搜
確認你的myeclipse或eclipse下的java平臺是剛才確認過的jdk1.6
這一部分最后一步,新建一個webProject,如果你用的是是eclipse for javaEE那么項目類型選擇Static web project
注意,eclipse新建web項目需要選擇target
runtime,如果沒有就配上你的tomcat6,myeclipse新建項目j2EE
Specification Level項要選擇javaEE5.0
二、Spring3的jar包
1.下載Spring3
先到官網現在吧,上網址:http://www.springsource.org/download 現在最新版本是
后跳轉到文件下載選擇頁面,需要下載兩個文件:
spring-framework-
但是現在官方已經沒有了 spring-framework-
spring-framework-
dependency的目錄結構基本上全是以com.XX org.XX為名字的目錄,太長了就不截圖了。
下面就是導入了,導入前先說明白兩點:
1. spring3開始jar包不再包含全能的spring.jar了,而是分成20多個jar包了,配置可以按需引入了
2.項目中使用spring除了引入dist目錄下的jar包,還需要dependencies下的一些依賴包,下面再具體說。
2.引入dist目錄下除了下面三個其余所有包
org.springframework.web.struts-
org.springframework.spring-library-
org.springframework.web.portlet-
如何引入jar包,對項目鼠標右鍵選擇【Build Path】,選擇【Add Extenal Archives】,瀏覽到jar包的位置,打開即可
3.接下來,還必須導入日志相關的一個jar包---commons logging和一個名為com.springsource.org.aopalliance-
分別在spring-framework-
及spring-framework-
目錄下。如果不引入部署項目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配置為/,不帶文件后綴,會造成其它靜態文件(js,css等)不能訪問。如配為*.do,則不影響靜態文件的訪問 -->
</servlet-mapping>
</web-app>
2.Spring應用上下文配置,在web.xml中我們配置了spring的servlet -----<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等注解的類成為spring的bean -->
<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增加的mvc、context、tx等幾個命名空間了
四、其他
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.配置文件要小心修改,不要犯括號不配對類似的低級錯誤