這篇文章已被廢棄。html
如今,Deolin使用Maven構建項目,而不是下載Jar文件,使用Jetty插件調試項目,而不是外部啓動Tomcat。java
SpringMVC比起Servlet/JSP方便了太多 web
Web容器——Tomcatspring
訪問http://tomcat.apache.org/download-90.cgi,apache
根據操做系統,選擇並下載Binary Distributions - Core下的zip文件,解壓。瀏覽器
測試:運行%tomcat%\bin\startup.bat,瀏覽器訪問localhost:8080…spring-mvc
成功。tomcat
下載JAR文件mvc
http://repo.spring.io/release/org/springframework/spring/4.3.7.RELEASE/app
若是想要選擇其餘的版本,改變連接中的4.3.7便可。
選擇*-dist.zip便可。
構建項目
1.在eclipse Java EE中新建一個動態Web項目(Dynamic Web Project)
2.更改配置路徑
3.聲明依賴庫
4.單純在項目中聲明jar文件,只能讓eclipse可以找到這些jar文件,
使代碼中引入這些類時不至於編譯報錯,但僅僅這樣是不足的,
爲了讓Web容器也能訪問到項目所需的jar文件,須要複製一份到WEB-INF/lib目錄下。
5.編寫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">
<display-name>DemoApp</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value><!-- 等完成了SpringMVC的配置文件再來補全 --></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
6.生成並編寫SpringMVC配置文件。
在此以前須要生成一個區別於「src」的全新的代碼文件夾(Source Folder),專門用於存放配置文件。
對於會用到不止一個框架的JavaWeb項目來講,將全部的配置文件統一塊兒來是合適的。
與「src」同樣,「conf」內的文件會輸出到項目的classpath中(與「src」內的java文件先編譯成class文件輸出不一樣的是,xml文件被直接複製到classpth中)。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 註解處理器適配器、處理器映射器 -->
<mvc:annotation-driven />
<!-- 處理器(@controller) -->
<context:component-scan base-package="controller" />
<!-- 視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
7.補全web.xml
<param-value>classpath:springframework/springmvc-servlet.xml</param-value>
8.web.xml已經完成,如今web容器能夠基於web.xml內的<servlet/>和<servlet-mapping/>來將請求URL映射到指定的Servlet類(對於SpringMVC來講,是DispatcherServlet.class)上了。
但在此以前,須要讓tomcat知道DemoApp的存在——指定tomcat的默認應用爲本演示項目。
編輯%tomcat%\conf\server.xml,在最後的「Host」標籤中添加「Context」標籤。
嘗試着啓動tomcat(%tomcat%\bin\startup.bat)...
...結果是啓動失敗,控制檯閃退。
Deolin嘗試了不少次,仍是沒能在閃退前成功地將控制檯窗口截圖。
查看一下日誌文件(%tomcat%\logs\catalina.*.log)
問題在於缺乏了Apache Commons Logging庫(http://commons.apache.org/proper/commons-logging/download_logging.cgi)
下載解壓完畢後,將jar文件複製到WEB-INF/lib
再次啓動tomcat…
啓動成功。
9.編寫個控制器和JSP
/DemoApp/src/controller/ForumController.java
package controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ForumController { @RequestMapping(value="/forum") public String requestMethod(Model m) { m.addAttribute("oneName", "oneValue"); System.out.println("Hey, there"); return "Forum"; } }
/DemoApp/WebContent/WEB-INF/jsp/Forum.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>title</TITLE>
</HEAD>
<BODY> ${oneName} </BODY>
</HTML>
重啓tomcat,瀏覽器訪問 localhost:8080
(因爲在tomcat配置文件的Context標籤中定義了本應用的路徑(path)爲「/」,因此URL中沒有「上下文」部分)
10.聲明靜態資源
比起測試經過,更有趣的事情是出現了一個新的警告。
每次請求時,tomcat會去訪問Web應用根路徑下的favicon.ico做爲網頁的圖標,而這個請求會被DispatcherServlet認爲是一個用來請求控制器的URI而攔截。
因爲控制器中不存在映射了[/favicon.ico]的請求方法,那麼天然會出現noHandlerFound警告
解決方法是爲這個URI單獨添加專門的映射。
/DemoApp/conf/springframework/springmvc-servlet.xml的<beans/>標籤內。
<!-- 爲靜態資源單獨映射 -->
<mvc:resources mapping="/favicon.ico" location="/favicon.ico" />
單純變動SpringMVC的配置文件並不須要重啓tomcat,等應用完成了部署,瀏覽器再次訪問 localhost:8080
警告消失了。
至此,Web項目便搭建和部署完成了。
遠程Debug
1.首先要讓tomcat開放用於Debug的端口。
編輯%tomcat%\bin\startup.bat
全部指令的前面添加一條指令
set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
測試:重啓動tomcat
能夠看到啓動最初的消息中出現了新增配置中的信息。
2.在eclipse中啓動Debug(初次啓動)
Debug View顯示Debug已經開始
添加斷點
瀏覽器再次訪問 localhost:8080。
斷點正常工做。
3.退出Debug
遠程Debug不影響tomcat,須要退出Debug模式僅僅須要在eclipse的Debug View中中斷Debug便可。
4.平常啓動Debug
初次配置過Debug之後,每次啓動debug便不在須要配置,直接啓動便可。