前言
花了兩週時間去學習研究的,雖然網上有各種教程可以照着做,但是在實踐過程中總會出現一些教程上沒有出現的錯誤。然後又花時間去了解錯誤,尋找解決方法,以至於時間很久。本文除了講述怎麼搭建項目,還講述我在搭建項目過程中遇到的問題,發生該問題的原因,以及我怎麼解決的問題。
準備工作:
1.安裝好Maven
2.在eclipse中配置好Maven
關於安裝和配置,請網上查找教程自行安裝配置。
一.新建Maven web工程
打開eclipse(這裏我使用的是eclipse mars),點擊File-new-Maven project
彈出如下窗口,填寫Maven工程放置的位置,圖中圈出的地方。選好放置的地方,點擊next.
然後出現該方框,選擇Maven工程的類型,我們要建的是一web工程,所以,選擇圈出工程類型。
彈出如下窗口,紅色打叉提示我們要填寫工程的Group Id和Artifact Id。在這裏插幾句,Group Id和Artifact Id是幹嗎用的。這裏Group Id和Artifact Id叫做座標,是工程的座標,Maven就像一個座標空間,通過座標去查找相應的文件。簡單說就是給文件一個標誌。
填寫好座標以後,點擊finish。
新建好工程之後,發現工程報了一個錯
打開報錯的文件,查看報錯原因。
打開,報錯文件提示缺少這個類javax.servlet.http.HttpServlet,我們可以在pom.xml文件裏引入這個包。
選中pom文件,點右鍵-Maven-add dependency
彈出下邊的窗口,在第一個紅色方框中輸入,ser ,下邊的紅色方框會進行模糊查詢,顯示查詢結果,然後選擇第一個,finish。然後錯誤就會消失。
二.配置文件
1.pom.xml(最終版,pom裏引入依賴的方式就像上邊引入servlet一樣,這裏不再贅述,只把最終結果貼出來)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springMVC3</groupId>
<artifactId>springMVC3</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>springMVC3 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>springMVC3</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
</plugins>
</build>
</project>
spring-core.jar
這個jar 文件包含Spring框架基本的核心工具類。Spring其它組件要都要使用到這個包裏的類,是其它組件的基本核心,當然你也可以在自己的應用系統中使用這些工具類。
外部依賴Commons Logging,(Log4J)。
spring-context:這個jar 文件爲Spring 核心提供了大量擴展。可以找到使用Spring ApplicationContext特性時所需的全部類,JDNI所需的全部類,instrumentation組件以及校驗Validation方面的相關類。
外部依賴spring-beans, (spring-aop)。
spring-webmvc.jar
這個jar 文件包含Spring MVC框架相關的所有類。包括框架的Servlets,Web MVC框架,控制器和視圖支持。當然,如果你的應用使用了獨立的MVC框架,則無需這個JAR文件裏的任何類。
外部依賴spring-web, (spring-support,Tiles,iText,POI)。
spring-web.jar
這個jar 文件包含Web應用開發時,用到Spring框架時所需的核心類,包括自動載入Web Application Context特性的類、Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類。
外部依賴spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。
maven-assembly-plugin
這是一個插件,Maven在將工程打包的時候,所打包的東西是不包括依賴包的,要想將依賴包也包含進去,必須引入這個插件。如果既不引入這個插件,也沒有另外在WEB-INF文件夾下新建lib文件夾引入依賴的jar包,再在自動部署中進行設置(如下圖),工程就會一直報錯,提示找不到包,找不到類,找不到xml文件什麼的。我當時就在這裏卡了好久,請教了別人,查閱了一些資料。
2.mvc-dispatcher-servlet.xml
在WEB-INF文件夾下建立文件夾configs,spring,和文件mvc-dispatcher-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: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.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-dispatcher的DispatcherServlet使用, 提供其相關的Spring MVC配置 -->
<!-- 啓用Spring基於annotation的DI, 使用戶可以在Spring MVC中使用Spring的強大功能。 激活 @Required
@Autowired,JSR 250's @PostConstruct, @PreDestroy and @Resource 等標註 -->
<context:annotation-config/>
<!-- DispatcherServlet上下文, 只管理@Controller類型的bean, 忽略其他型的bean, 如@Service -->
<context:component-scan base-package="com">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- HandlerMapping, 無需配置, Spring MVC可以默認啓動。 DefaultAnnotationHandlerMapping
annotation-driven HandlerMapping -->
<!-- 擴充了註解驅動,可以將請求參數綁定到控制器參數 -->
<mvc:annotation-driven/>
<!-- 靜態資源處理, css, js, imgs -->
<mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
3.web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_2_4.xsd"
version="2.4">
<display-name>Archetype Created Web Application</display-name>
<!-- DispatcherServlet, Spring MVC的核心 -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- DispatcherServlet對應的上下文配置, 默認爲/WEB-INF/$servlet-name$-servlet.xml
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<!-- mvc-dispatcher攔截所有的請求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
這裏文件已經有解釋了,不過多說明,只是注意引入的上邊的
mvc-dispatcher-servlet.xml文件的引入路徑要對。
其次
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_2_4.xsd"
version="2.4"
web-app標籤裏的這串東西在新建工程的時候,web.xml裏是沒有的,是自己加進去的,它的作用是拿來規範xml文件引入的標籤,對xml文件進行規定,哪些標籤可以引入。
三.java類
在下圖位置新建包和java類
TestController.java
package com;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/Test")
public class TestController {
@RequestMapping("/mvc")
public String helloMvc() {
return "Test";
}
}
@RequestMapping("/mvc")
public String helloMvc() {
return "Test";
}
}
四.jsp頁面,css文件,js文件
新建css文件夾和Test.css文件,新建js文件夾和Test.js文件,新建jsps文件夾和Test.jsp,位置如下。
Test.css
body{
background:red;
}
Test.js
$(function() {
alert("123!");
})
這裏注意,想以美元符號去獲取html元素,對其進行操作。也就是想使用jquery就要在jsp頁面引入jquery.min.js,並且在jsp頁面中要放在所有js文件之前。否則或報錯說$未定義undefined。
Test.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>
<link rel="stylesheet" type="text/css" href="../css/Test.css">
<script src="../js/jquery.min.js"></script>
<script src="../js/Test.js"></script>
</head>
<body>
hello ,this is a test.
</body>
</html>
這樣子,就可以把工程部署到tomcat裏,然後啓動tomcat,打開瀏覽器輸入http://localhost:8080/工程名/Test/mvc
就可以訪問了。
此過程中遇到的問題
1.在使用eclipse引入依賴的時候,eclipse出現了問題
我引入依賴時,都是選中工程的pom.xml點右鍵-Maven-add Maven
彈出下邊的窗口進行引入的
但是,有幾次我在下圖中的方框1輸入搜索的artifactId字符時,方框2並沒有得出模糊查詢的結果
我網上搜索的解決辦法是,打開Maven repositories如下圖,選中圈出紅線部分,點右鍵,選擇rebuild index。然後去重新引入依賴就可以了。
2.關於訪問Test.jsp路徑的問題
我是按照慕課的spring mvc教程來學習的,慕課上訪問jsp頁面的路徑直接是不加工程名的,形如:http://localhost:8080/Test/mvc。而我在實踐過程中,怎麼也訪問不到我的頁面。後來請教了別人才知道,這是根項目和非根項目的區別。tomcat根項目的頁面訪問時,訪問路徑中不用加項目名稱,,而非根項目的頁面訪問路徑中一定要有項目名稱。
3.其他問題
如依賴包未被Maven打包,還有jquery文件引入位置不當的問題在上邊已經說明了,這裏不再說明。
好了,花了兩週的時間去搭了這個項目,再花一早上的時間寫這篇博文,因爲網絡的原因,寫幾個字就停一下,卡住了。希望對你有幫助.