• SpringMVC:系统认识一下maven


    网上看了很多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这门语言的优势恐怕就仅仅剩下轮子的数量了。

  • 相关阅读:
    互联网协议
    TCP/IP协议三次握手_四次挥手
    nginx重定向rewrite
    创建第一个django工程
    Anaconda-用conda创建python虚拟环境
    数组
    StringBuilder
    杨辉三角
    数据类型和变量
    .net框架中的一些接口
  • 原文地址:https://www.cnblogs.com/tengqiuyu/p/7660568.html
Copyright © 2020-2023  润新知