网上看了很多springMVC helloworld的教程,非常不满意;首先,maven构建的就很少,再者,绝大部分都是断章取义,让人不明就里。其中有几篇讲的好的,我摘录了一些,自己试着构建了一下项目,发现里面还是有很多需要注意的地方,就记录在这里吧。

我是一个喜欢刨根问底的人,所以我打算从手动maven搭建项目开始,然后导入IDEA,一直到配置并且运行起Helloworld

1 . 安装maven,并配置环境变量

这个就不说了,网上一搜一大把。使用mvn -v检查maven是否安装
安装完成后建议修改一下仓库为国内,要不然速度就呵呵了,这里推荐一个速度杠杠的国内镜像(阿里云),看见这篇文章你就偷着乐吧,不知道哪天就不能用了

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

2 . 使用maven archetype 构建项目脚手架

//随便找个文件夹运行以下命令
mvn archetype:generate -DarchetypeCatalog=internal

mvn archetype:generate根据项目脚手架建立相对应的java项目,运行完这个命令以后将搭建起springMVC项目雏形。
-DarchetypeCatalog=internal这个说一下,还是那句话,谢谢伟大的墙,谢谢方校长,让我们中国程序员获得了这么多黑技能...不加这个的话,你的mvn必然会卡死在Generating project in Interactive mode...这一步,以下是完整解释:

archetype是一个插件名称,generate是一个目标名称.mvn archetype:generate 命令会从远程拉取所有的原型(大约1575个)供你选择,使用-DarchetypeArtifavtId=[archetype]参数可以指定archetype类型。如果卡在Generating project in Interactive mode这一步,是因为maven在从远程拉取信息,使用 -DarchetypeCatalog=internal 参数让它不要从远程服务器上取catalog。 添加这句话之后,就不会卡死了.就会进入交互阶段,一步步询问.每一步如果有默认选项直接按enter即可。

然后根据命令行提示填写groupId,artifactId,version,package。这样在当前目录下就生成了一个项目。
另:附上一键生成项目命令:

mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT -DarchetypeCatalog=internal

不管怎么样,我们最终生成了标准的基于maven的Springmvc项目。其实也可以不用archetype,我们自己建立文件夹遵守maven规定即可:

//建立工程目录
src/main/java/com/monodev/mvcstudy
//建立test目录
src/test/java/com/monodev/mvcstudy
//建立resources文件夹
src/main/resources
//建立webapp目录和配置文件(名字可随意)
src/main/webapp/WEB-INF/web.xml
src/main/webapp/index.jsp

2. 添加pom依赖

打开pom.xml,添加:

    <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>

是的,你没有看错,就一个依赖。
这个地方我也绕了很久,手动加各种依赖,然后各种编译期出错。。。各种头大。最后上了spring官网,发现就这一个依赖就够了。。。

另外,在IDEA中有一个炒鸡好用的maven面板,我们稍后说

3.maven安装依赖

项目根目录运行mvn clean installmaven会自动下载所有依赖并编译项目,完成后会在根目录下生成target文件夹。

4. 是时候导入IDEA了

其实个人觉得idea好用是真的,慢也是真的。。。我打算研究下用sublime3写java,试试行不行,idea太笨重了。什么?为什么不用eclipse?我只能说颜值太差好么?一个一看就像上个世纪的IDE,怎么让人提起使用他的兴趣...

打开idea,import项目,没啥好说的,导入以后要做这几件事:

  1. 右键单击src文件夹,Mark Directory as->Source Root,否则写代码时找不到引用
  2. 右键单击resources文件夹,Mark Directory as->Resource Root
  3. 右键工程设置SDK为你安装的java sdk
  4. 配置tom猫:

    运行配置

    这里选择打开面板,点+号,从左侧列表选择Tomcat server - local

tom

然后选择你的tomcat安装位置,设置如下:

tom

这里没有tomcat server?

File-settings-Plugins,搜索tomcat,并启用:

tom

5. 配置

到了这里,你以为就能开始写controller了?呵呵,太naive,这是java,没那么容易的。
首先,在resources下建立config文件夹,下建立spring-mvc-config.xml文件,也就是mvc的配置文件,它长这个熊样:

<?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"> <!--规定组件bean扫描的基础包位置-->
<context:component-scan base-package="com.monodev.mvc.controller"/>
<!-- 静态资源(js、image等)的访问 -->
<mvc:default-servlet-handler/>
<!--启用注解-->
<mvc:annotation-driven/>
<!--ViewResolver 视图解析器-->
<!--用于支持Servlet、JSP视图解析-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

继续打开WEB-INF下的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 version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>springmvc-app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--使用刚才的配置文件,classpath就是resources目录-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring-mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!--这个不用解释了,数字越小越靠前,DispatcherServlet是SpringMVC的基础,必然是第一个处理的-->
</servlet> <servlet-mapping>
<servlet-name>springmvc-app</servlet-name>
<url-pattern>/</url-pattern><!--映射根路径-->
</servlet-mapping>
</web-app>

5. helloworld

终于可以写代码了!
终于可以写代码了!
终于可以写代码了!
终于可以写代码了!
终于可以写代码了!

web开发我用过c#的.net,javascript的express,python的flask,现在写java,我感受最深的就是这句话,配置配到死,基本上,你学会了各种配置方法,就学会了spring

以下是我的其他体会:

1 .Spring的精髓不是IoC,也不是AOP,而是xml

2. 我深深的体会到 spring boot是一项伟大的创举,是java世界里的未来之星,将拯救无数java程序员于水火之中!

src下建包、建文件:

first controller
@Controller
public class HelloworldController {
@RequestMapping("/index")
public String test(){
return "index";
}
}

返回的是index视图名称,所以根据spring-mvc-config.xml中的配置,在webapp下建立views/jsp目录,并建立index.jsp文件:

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

点击运行,idea将把项目deploy到tomcat容器的ROOT文件夹下,浏览器中运行就可以看到helloworld了。

7. 补充

前面提到idea的maven面板。就在右上角,点击Maven Projects打开

maven projects

依赖的库

dependency detail

这个工具可以让我们很好的看到依赖的关系,此处就能看到,虽然我们只引了一个spring-webmvc依赖,但其实一环套一环,有很多。
使用spring boot起的项目,这里的依赖多到惊人
总之,这个面板是一个很强大的依赖管理面板

后记:
写了一段时间java,最大的感觉就是像极了八股文。繁文缛节颇多。这样一个helloworld不管用任何其它语言都是分分钟的事,到java这里就难了。
不过java的开源库也是巨量的,这个又是.net没法比的,其实现在docker的出现,java的“一次编写,处处运行”也就不是什么优势了。以后java这门语言的优势恐怕就仅仅剩下轮子的数量了。

SpringMVC:系统认识一下maven的更多相关文章

  1. Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)

    摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决 ...

  2. 如何在Linuxt系统下运行maven项目

    如何在Linuxt系统下运行maven项目 我们知道现在利用MAVEN来管理JAVA项目是非常常见的.比如公司一般都有一个自己的MAVEN仓库,通过MAVEN仓库来解决我们的项目依赖,更加方便的构建项 ...

  3. 捷易拍与springMVC系统结合

    1. 捷易拍高拍仪在jsp页面的调用 使用ActiveX插件的方式处理解决此问题,捷易拍公司提供了支持IE8以上的32位浏览器的插件,安装插件后,我们可以使用Object标签,使用高拍仪 注意: 1. ...

  4. dubbo+zookeeper+jsp+springmvc+spring+mybatis+mysql+maven完整示例

    项目分为三部分,这里分为三个maven项目(基于web,所以最后一个为maven创建的web项目) 1.接口定义以及实体类定义(api+pojo) --- maven创建java项目,打包成jar 2 ...

  5. maven学习日记(三)-------开发环境搭建(springmvc+hibernate4)各种maven错误汇总

    1.maven编码 gbk 的不可映射字符 解决这个问题的思路: 在maven的编译插件中声明正确的字符集编码编码——编译使用的字符集编码与代码文件使用的字符集编码一致!! 安装系统之后,一般中文系统 ...

  6. spring + springMVC + spring Data + jpa + maven 项目框架搭建

    首先看一下项目结构: 所用到的jar(pom.xml): <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...

  7. 搭建SpringMVC+Hibernate4+Spring3+Ajax+Maven项目

    首先新建一个Maven项目.百度一下会有非常多实例,这里就不介绍了,直接奔主题. 如题:这里使用的是Hibernate4和Spring3,使用的JPA和Spring注解,然后JDK版本号是1.7 以下 ...

  8. spring+springmvc+hibernate架构、maven分模块开发样例小项目案例

    maven分模块开发样例小项目案例 spring+springmvc+hibernate架构 以用户管理做測试,分dao,sevices,web层,分模块开发測试!因时间关系.仅仅測查询成功.其它的准 ...

  9. java web课程设计(简单商城的前后端双系统,基于maven三模块开发)

    1.系统分析 1.1需求分析 实现一个简单但功能完整的商城项目,从设计到实现,规范化完成该项目,锻炼javaweb项目的编写能力,理解软件工程的软件设计思想 1.2编程技术简介 本次课程主要使用的软件 ...

随机推荐

  1. Java面向对象之异常(异常处理方式)

    一.基础概念 (1)异常:Java程序在运行时期发生的不正常情况. Java就按照面向对象的思想对不正常情况进行描述和对象的封装. (2)异常问题分类: (Throwable:定义对于问题共性的功能. ...

  2. MongDB集群部署

    http://blog.csdn.net/luonanqin/article/details/8497860 参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepat ...

  3. 16、OpenCV Python 腐蚀和彭胀

    __author__ = "WSX" import cv2 as cv import numpy as np def erode_demo(image): print(image. ...

  4. [HAOI2011]Problem b BZOJ2301 数学

    题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...

  5. 2、Numpy常用函数

    创建单位矩阵和读写文件使用eye()创建单位矩阵 # -*- coding: utf-8 -*- import numpy as np i = np.eye(3) print(i) 结果: [[ 1. ...

  6. bzoj1004 [HNOI2008]Cards Burnside定理+背包

    题目传送门 思路:首先是Burnside引理,要先学会这个博客. Burnside引理我们总结一下,就是 每种置换下不动点的数量之和除以置换的总数,得到染色方案的数量.        这道题,显然每种 ...

  7. CodeChef - RIN 最小割应用 规划问题

    题意:给定\(n\)门课和\(m\)个学期,每门课在每个学期有不同的得分,需要选定一个学期去完成,但存在约束条件,共有\(k\)对课程需要\(a\)在\(b\)开始学前学会,求最大得分(原问题是求最高 ...

  8. Aop之使用Castle动态代理实现对方法的拦截

    using System; using System.Linq; using Castle.DynamicProxy; namespace AopTest { class AopTest { stat ...

  9. JS禁用浏览器退格键实现思路及代码

    [From] http://www.jb51.net/article/42562.htm 上周提交了一个项目(内部使用的),一同事提出个BUG,说要禁用退格键(backspace或者叫后退键),因为这 ...

  10. 完美的js继承

    //完美的js继承 少了类管理器 Object.extend=function(){ var fnTest = /\b_super\b/; //继承父类 var _super = arguments[ ...