从零开始spring-mvc到hello-world

jdk: 1.8
eclipse java ee: 4.6
tomcat: 8.5
spring 4.3.6

想用spring-mvc开发web应用有两种方式:
1. new project->Dynamic Web Project
2. new project->Maven Project

两种有什么区别呢?
主要就再于处理依赖方面,一种是手动自己搞定,一种是自动搞定而且还可以复用,网上的多数文章都是第一种。

第一种 创建工程后 要自己去 spring.io 官网 去下载 spring-framework 这个zip 包,解压后(自己看文档或者看别人的文章或者自己瞎琢磨),在一堆 jar 包中找到那些用于 spring-mvc web 开发的 jar 包 ,复制-〉粘贴到 项目目录

WEB-INF/lib

这个目录下。spring-mvc 这个东西是没有单独的可下载的 都在 spring-framework 这个主包中。相省点事的可以直接下载 spring-boot 这个是个独立的 project 可单独下载这个是专门用于 web 开发的。是不是挺麻烦,就是嘛!

第二种 用maven 来自动管理依赖

which mvn

运行一下这个命令 没有自己去安装

brew install maven  其它的系统自己的脑补吧

File->Maven Project

开发webapp就不要去勾选上面的 create a simple project 因为勾选的话创造的就是普通java类项目会缺少用于webapp开发的一些比如 特定的文件夹 webapp WEB-INF web.xml 等等 当然如果你要说你要自已动手丰衣足食也可以,不过 一些内容 一些设置你也要自己动手搞了,搞不明白的还要去网上搜文章,不累吗?

点击 next

这里写图片描述
在这个界面选择 结尾是 -webapp 这个选项,就是创建的 web项目。

点击 next

这里写图片描述

在这个界面有三个选项需要添写
Group id(包名): com.example.demo
Artifact id(项目名):app02
Version 默认就好
Package: 会随着 Group id 变化 当然也可以自己设定

设定好就可以 finish

这里写图片描述
生成的目录结构

这个红叉 不要紧,为工程 添加 tomcat类库 即可 在项目右键

这里写图片描述

library 这个选项卡 点击 add library 选择 Server runtime

这里写图片描述

选择你本机安装的tomcat 博主安装的是最新版 8.5 ok

这里写图片描述

此时的目录结构 红叉已消失

这里写图片描述

现在需要 maven 来帮助搞定spring-mvc 框架依赖 修改 pom.xml

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

如果你官网狂了半天,找了半天肯定是找不到 因为 spring-mvc 不是独立 project 存在的。官网 spring-framework 工程给出的 maven 依赖包的设置是
........
<artifactId>spring-context</artifactId>
.......

spring-context.jar
  这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。

  
spring-context.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,commons-collections.jar,aopalliance.jar

官方给的这个maven依赖包设置主要是针对 spring framework 基本核心 jar 包。

嗯 所以无所谓 spring-mvc 是不是独产工程 ,spring 整个框架都是模块化的,spring-mvc也是一个独立的模块,maven会自动帮你处理好所需其它它依赖的模块。

接下来需要配置 部署描述符(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>
  <servlet>
    <servlet-name>app02</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
        /WEB-INF/config/app02-servlet.xml
      </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>app02</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

这里此时主要是配置 org.springframework.web.servlet.DispatcherServlet
servlet调度器,其实就相当动态语言框架单入口一样,根据 url 中的地址去调用并实例化相应的类,spring中的 DispatcherServlet 开箱即用相当方便

<servlet-name>app02</servlet-name> servlet-name 随便命名
<load-on-startup>1</load-on-startup> 值为 1 确定在加载时
初始化 org.springframework.web.servlet.DispatcherServlet servlet调度器
当初始时会调用 DispatcherServlet init方法 然后去默认的目录 /WEB-INF 中查找一个 <servlet-name> 命名的xml文件 这里是 app02-servlet.xml 这个形式的文件名是 约定的 xx-servlet.xml
如果配置了 <init-param> 这个参数 DispatcherServlet 调度器会去 <param-value> 配置的路径中查找。

<servlet-mapping> 这里配置是把url地址路径 映射到 <servlet-name>app02</servlet-name> 只对没有反缀名的url路径 http://xx/xx/xx/xx/ 起作用, 如果是有后缀名的url路径 http://xx/xx/xx/xx.css|js|png 等等将不会起作用 其实本就不应该起作用,不然你怎么看 css js png 这些文件。

配置 app02-servlet.xml 文件

<?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"
       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">

  <context:component-scan base-package="org.example.controller"></context:component-scan>
  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"></property>
    <property name="suffix" value=".jsp"></property>
  </bean>
</beans>

这个配置文件是需要被 DispatcherServlet 读取调用的 并告诉 servlet调度器 如何查找你的 控制器类
beans xmlns 这些属性是必需加的,日后会随着需要 xmlns 也会跟着再多加几条。
<context:component-scan base-package="org.example.controller"> 这个配置就是告诉 spring 里哪个包里找你自己编写的控制器类,mvc嘛 model controller 肯定是分包存储的。

bean id="viewResolver" 这个配置主要是减少编写代码时读取 view 时的工作量 比如 一个view文件是 hello.jsp 在控制器类中 直接 return hello 返回view就可以了。

新建一个控制器类 HelloWorld.java

package org.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/hello")
public class HelloWorld {
    @RequestMapping(method = RequestMethod.GET)
    public String say(){
        System.out.println("hello world!!! running");
        return "hello";
    }
}

这是注解方式。

展示一下完整的项目结构:
这里写图片描述

运行:
项目右键 Run As->Run on Server 选择你已经配置好的tomcat服务器,在eclipse中就可以看到 服务器启动状况与程序运行情况,hello world 即刻出现在了你的眼前.

这里写图片描述

eclipse 自带的浏览器或者你本机浏览器
http://localhost:8080/app02/hello/

这里写图片描述

注1:tomcat 下载安装完后,eclipse 设置 server->runtime environments 配置添加你已经安装的 tomcat ,把eclipse 与 tomcat 关联起来,编写与调试程序会非常方便 你的代码文件有任何改 eclipse 都会让 tomcat 自动 reload.

终于写完了,这篇文章应该是网络最直白最明了的 spring-mvc 入门文章了吧.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值