一个未知项目的开始

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

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

目标:

搭建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项目有一些问题,我们前面提到过,这个我不知道是我的配置问题还是说是本身就是这样,改动还是比较麻烦的,这个要看有没有啥好的解决方法。

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

时间: 2024-10-13 22:47:17

一个未知项目的开始的相关文章

你应该如何学习一个未知的技术领域?- 菜鸟小白篇

一.前言2018年初开始从事线上课程的开发,陆续开发了几门课程,<人工智能产品经理最佳实践请添加链接描述><知识图谱实战开发完全剖析请添加链接描述>和<智能对话机器人实战开发完全剖析>,其中每一个专题都是自己对于这个新兴领域的探索和实践经验的总结.课程制作的过程,同时也是一个学习和反复思考.再学习的过程.有着近20年的一线IT行业技术.产品研发.设计经验的沉淀,尤其是方法论方面总结和沉淀,对于自己快速掌握新兴领域的知识,起到了至关重要的作用:通过提供面向学员的咨询和答疑

Cocos2dx 3.0开发环境搭建--Eclipse上构建一个Android项目

一.前言: 本篇主要介绍Cocos2d-x 3.0的一些基础内容,以及在Eclipse上上编译我们的Cocos2d-x项目,成功把Helloworld运行起来了.看完本篇博客之后,你就会知道Cocos2d-x 3.0竟然发生了如此大的变化,变得如此简单,环境搭建.项目创建.编译的方式更加人性化了. 二.环境准备: 1.下载ADT Bundle(Eclipse捆绑了SDK和ADT),或者是Eclipse安装了ADT插件. 2.安装JDK.NDK.Ant .Python,然后配置环境. 3.Coco

创建一个android项目与创建一个android虚拟设备

创建一个android项目 Navigator面板区点击右键-->New-->Android Application Project,打开New Android Applicaton窗口.输入Application Name(应用程序的名称,就是显示在手机上的名称,比如:微信),Project Name(项目名称,一般显示在eclipse上的项目名称),Package Name(指定它的java包名,比如:com.qq.weixin).Minimum Required SDK表示运行应用程序所

windows系统下跨平台开发环境的搭建(cordova)+创建一个android项目

目的:在windows系统下,搭建跨平台的开发环境(cordova)创建一个安卓项目 前提:安装有java Jdk 1.8以上 Android SDK 23以上 1.安装node.js ,选择对应的版本下载安装,没什么好说的 官方网址:http://nodejs.cn/ 2.测试安装是否成功 win+r 键,打开运行窗口,输入cmd,然后确定,打开命令行窗口 输入node  -v 输出版本号,说明node.js安装成功,否则请查找原因,或者重新安装 输入npm -v 输出版本号说明npm可以使用

[Android Studio 权威教程]离线配置SDK,创建第一个AS项目

前三篇bolg我给大家分享了怎么安装Android Studio,但是我们还没有使用AS创建一个Android 的项目,那么这篇blog我们开始离线配置SDK,并且创建一个Android项目 没有看如何安装Android Studio的童鞋,请先看这里,然后回来我们继续: [Android Studio 权威教程]Mac下安装Android Studio [Android Studio 权威教程]Linux下安装Android Studio [Android Studio 权威教程]Window

Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)

一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 下载地址:Eclipse:http://www.eclipse.org/downloads/ JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html Android SDK:http://developer.android.com/sdk/index.html ADT:

eclipes创建一个web项目web.xml不能自动更新的原因(web.xml和@WebServlet的作用)

在eclipse中创建一个Web项目的时候,虽然有web.xml生成,但是再添加Servlet类文件的时候总是看不见web.xml的更新,所以异常的郁闷!上网查了查,原来我们在创建Web项目的时候,会弹出一个对话框,“Dynamic web module version”这个选项默认成了3.0,按照老规范,应该是在eclipse的WebContent \ WEB-INF \ 目录下创建web.xml的.而新规范是可以不用web.xml的,如tomcat 7.0就支持新规范,这样相关的servle

【读书札记】建立第一个Web项目

安装配置好jdk,tomcat,我用的版本是7.0.54,我放在C:\server\apache-tomcat-7.0.54下, CATALINA_BASE:C:\server\apache-tomcat-7.0.54 CATALINA_HOME:C:\server\apache-tomcat-7.0.54 也可以在Path下面添加配置  ;C:\server\apache-tomcat-7.0.54\bin ,这样就可以在cmd下直接输入startup启动服务器了. 背景:运用web容器tom

对一个“失败”项目的审视—前言

总说自己牛B的人-狂妄自大 总笑自己傻B的人-妄自菲薄. 我相信任何一位牛B的人都曾做过傻B的事, 所以得出的结论是:一位牛人的诞生,是由N多傻B的人.傻B的事所磨练出来的. 我并非牛人,却已经做过很多傻B的项目.有的项目初期设计非常牛B,但是随着时间的推移.人员的更迭.预算的缩水,到头来变成了一款鸡肋的产品--食之无味弃之可惜. 以下几篇文章,我会从架构设计.实际编码.人员管理等诸多方面来分析一款我设想得很牛B,最后却做得很傻B的项目.当然,我这里所谓"傻B",指的是一种主观上的失败