网上看了很多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. 洛谷P3357 最长k可重线段集问题(费用流)

    传送门 其实和最长k可重区间集问题差不多诶…… 把这条开线段给压成x轴上的一条线段,然后按上面说的那种方法做即可 然而有一个坑点是线段可以垂直于x轴,然后一压变成一个点,连上正权环,求最长路……然后s ...

  2. 2. C语言文件操作经典习题

    1. 统计英文文本文件中,有多少个大写字母.小写字母.数字.空格.换行以及其他字符. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...

  3. uC/OS-II 一些函数简介

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 以前搞硬件的经验,最近突然翻出来了.分享给大家:主要讲解uC/OS-II常用函数:虽说现在转行软件了,但是感觉之前搞硬件的经验还真是很有用对于理解 ...

  4. Unity---动画系统学习(4)---使用混合树(Blend Tree)来实现走、跑、转弯等的动画切换

    1. 介绍 Blend Tree用于多个动画之间的混合,比如走到跑的切换.转弯的切换. 如果用动画学习笔记(3)中的方法,需要新建很多的状态,不仅麻烦,而且切换状态时也很容易不流畅. 而Blend T ...

  5. HDU - 5997 树状数组+set

    和之前一道省选题目很像: (梦幻布丁): 我们维护的时候用树状数组维护,在断电处打上标记: 合并的时候小的合并到大的里面: #include<iostream> #include<c ...

  6. notepad++配置编译运行java

    点击插件->Plugin Manager->show plugin manager : 选择NppExec,选择install,就将这个插件下载下来了. 这个时候会重启notepad++: ...

  7. JSTL的核心标签

    JSTL的核心标签: .if: 语法:<c:if test="" var="" scope=""></c:if> 当 ...

  8. [转] 最简单实现跨域的方法:使用nginx反向代理

    [From] http://blog.jobbole.com/90975/ 什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全 ...

  9. laravel的一些语法

    5.1的一些语法 检索表中的所有行 $users = DB::table('users')->get();因为查询出来的是对象,所以可以直接选择DB::table('users')->ge ...

  10. 转帖 JS的基础语法

    1.变量 1)变量是用来存储信息的容器. 2)在javascript中使用var 运算符(variable 的缩写)加变量名定义的. varx = 10; vary = 10.1; varz = “H ...