首页 > 代码库 > 一个未知项目的开始

一个未知项目的开始

一系列的文章,每一篇完成一个功能或者解决一个问题。每一篇的文章按照  目标--操作流程--存在问题--原理--解决问题 这样的思路进行。

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------

目标:

搭建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项目

 

image

前面的流程和后面的流程都不需要注意什么,一直按照要求写便可以了,只是在这一步要注意一点

选择项目类型的时候要选择maven-archetype-webapp,这里的主要作用就是生成文件的目录以及定义项目的属性和source文件夹(也就是项目运行时默认的环境目录是什么)classpath

填写完成之后生成的目录结构如图:

image

这里的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的版本都是比较低的我们需要进行修改到更高的版本,进入

image

 

这里的修改是一个比较蛋疼的事情,网上也没有给出一个比较好的方案,只能到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/javaeehttp://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项目有一些问题,我们前面提到过,这个我不知道是我的配置问题还是说是本身就是这样,改动还是比较麻烦的,这个要看有没有啥好的解决方法。

 

现在这个项目基本就搭建完成了,后面我们要陆续添加新的功能

一个未知项目的开始