一系列的文章,每一篇完成一个功能或者解决一个问题。每一篇的文章按照 目标--操作流程--存在问题--原理--解决问题 这样的思路进行。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
目标:
搭建Maven+Spring+Spring MVC的JAVAEE项目,也想看清Web开发的本质吧。
开发的平台使用基于Eclipse的STS(Spring Tool Suite)
Maven的版本是自己下载的3.2.3,不是Eclipse自带的Maven
Spring的版本使用最新的发布版本Spring framework 4.1.2release版本(这里标记一下,后面要谈一下对Spring的认识以及自己的学习)
Spring MVC的版本也就是同Spring一样的版本吧,毕竟是属于Spring的框架中的一块
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
流程:
1、新建Maven项目
前面的流程和后面的流程都不需要注意什么,一直按照要求写便可以了,只是在这一步要注意一点
选择项目类型的时候要选择maven-archetype-webapp,这里的主要作用就是生成文件的目录以及定义项目的属性和source文件夹(也就是项目运行时默认的环境目录是什么)classpath
填写完成之后生成的目录结构如图:
这里的java build path 需要加一个 tomcat的server runtime 否则的话jsp是无法解析的
至于jsp的原理或者说是servlet的原理需要深究一下,以后要研究一下这里mark一下。。。。
-------------------------------------------------------------------------------------------------------------------------------------------------
下面就是要向pom.xml中加入相应的依赖,这里我们只加入最小的依赖集,后面每次加入新的功能,需要新的jar包则更改pom文件。
首先加入web依赖
<properties> <!-- GenericProperties --> <java.version>1.8</java.version> <project.buildsourceEncoding>UTF-8</project.buildsourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- Web --> <jsp.version>2.3.1</jsp.version> <jstl.version>1.2</jstl.version> <servlet.version>3.1.0</servlet.version> </properties> <dependencies> <!-- Web Dependencies --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>${jsp.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> </dependencies>
这里加入的servlet-api与jsp-api都是编译时需要的,在我们部署项目到web容器中时web容器一般都会提供这两个jar包,举个例子就是tomcat。
如果不加入这两个jar包那么就会发现jsp文件就会报错,因为找不到相应的class;但是如果buildpath加入tomcat的server runtime报错就会消失,由此可见这两个的关系了。
至于jstl,这个我也不是很明白,这里也标记一下等以后搞清楚
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面加入Sping的依赖,这里我们将Sping和Spring MVC分开加入,因为Spring在很多地方都能够使用而Spring MVC是同Structs相同的分层组件,Spring是管理组件。
<!-- Spring framework --> <spring-framework.version>4.1.2.RELEASE</spring-framework.version> <!-- Spring --> <!-- core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-framework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-framework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- Expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- Transaction --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- Spring AOP --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring-framework.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.4</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <!-- SpringTest --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-framework.version}</version> <scope>test</scope> </dependency> <!-- Spring jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- Spring ORM --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring-framework.version}</version> </dependency>
这里使用了spring jdbc和spring orm两个jar包,暂时使用,最终我们都会把它换成orm,不使用spring自带的jdbc去数据库查询,统一使用其他的orm进行统一查询
这里还有一个注意点就是Spring-core包需要一个依赖的包commons-collection
<!-- spring dependency --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency>
有个很重要的一点就是maven依赖的传递性,很多上面的依赖其实只需要依赖一个其他的便可以都导入进来,但是我们不可能去查询每一个依赖的pom文件所以我们把我们需要的dependency全部加入带我们的pom文件中
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
现在加入Spring MVC的包
<!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framework.version}</version> </dependency> <!-- Spring Web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring-framework.version}</version> </dependency>
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面需要修改project facets
修改的原因呢,是因为maven新建项目时支持的java版本和Dynamic Web Module的版本都是比较低的我们需要进行修改到更高的版本,进入
这里的修改是一个比较蛋疼的事情,网上也没有给出一个比较好的方案,只能到navigator界面寻找org.eclipse.wst.common.project.facet.core.xml文件
直接在里面进行修改
<?xml version="1.0" encoding="UTF-8"?> <faceted-project> <fixed facet="wst.jsdt.web"/> <installed facet="wst.jsdt.web" version="1.0"/> <installed facet="java" version="1.8"/> <installed facet="jst.web" version="3.0"/> </faceted-project>
这种修改时很不人性化的修改,因为不是自动生成啊。。。。。
针对这点,不知道说好还是不好,我也是很犹豫不知道该怎么评论这个东西
还有一个就是web程序的入口web.xml的重写
自动生成的web.xml是这样的
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>
这里明显和我们的web版本不符合,这里是2.3,我们下需要的是3.0所以需要进行修改(这里猜想maven生成的web项目应该都是以java1.5和web2.3为基础,所以我们上一步改的那么吃力)
我们要将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" id="WebApp_ID" version="3.0"> <display-name>Archetype Created Web Application</display-name> </web-app>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
现在这个项目基本就搭好了,可以用tomcat跑这个项目了
存在的问题
1、Spring的jar包很多,不知道引入哪一些,因为maven依赖的传递性,引入一个依赖可能就会引入其他的依赖,所以可能会有一些的依赖不需要进行定义。但是我害怕有的依赖会没有引入,所以
把自己需要的依赖全部引入进来便不会觉得少了。
2、maven自动生成的web项目有一些问题,我们前面提到过,这个我不知道是我的配置问题还是说是本身就是这样,改动还是比较麻烦的,这个要看有没有啥好的解决方法。
现在这个项目基本就搭建完成了,后面我们要陆续添加新的功能