步骤:

  • IDEA新建Spring MVC项目
  • 运行、调试相关配置
  • 配置 component-scan
  • Model 向 View 传值

一 通过IDEA新建Spring MVC项目

idea 运行 spring项目 idea运行springmvc_MVC


点击next ,输入项目名及保存位置,finish后 IDEA会帮你下载需要的类库

idea 运行 spring项目 idea运行springmvc_java_02


idea生成的文件如3个xml 和一些jar

现在先了解下这些lib 的jar包吧:(大概搜索总结下)

  • Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现
  • Spring Aspects:Spring提供的对AspectJ框架的整合 Spring Beans:
  • Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
  • Spring Context:在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
  • Spring Context Support:Spring context的扩展支持,用于MVC方面。
  • Spring Core:Spring的核心工具包
  • Spring expression:Spring表达式语言
  • Spring Instrument:Spring对服务器的代理接口
  • Spring JDBC:对JDBC 的简单封装
  • Spring JMS:为简化jms
  • Spring orm:整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现
  • Spring oxm:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
  • Spring test:对JUNIT等测试框架的简单封装
  • Spring tx:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
    -Spring web:包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
  • spring webmvc:包含SpringMVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、
    Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。

在了解下applicationContext.xml这个xml,它通过xml文件将配置加载到IOC容器中(还有两种是java注解的方式将配置加载到IOC容器和隐式的bean发现机制和自动装配


idea 运行 spring项目 idea运行springmvc_spring_03


再看下web.xml(注释自己注释)

idea 运行 spring项目 idea运行springmvc_idea 运行 spring项目_04


已经配置好了前端控制器(

作用:

拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是spring MVC的第一步)

二 设置运行、调试相关配置

配置tomcat

idea 运行 spring项目 idea运行springmvc_xml_05


idea 运行 spring项目 idea运行springmvc_spring_06


运行http://localhost:8080/index.jsp 发现不能访问,后台 确是对的

idea 运行 spring项目 idea运行springmvc_MVC_07


找到tomcat log日志

idea 运行 spring项目 idea运行springmvc_idea 运行 spring项目_08


找不到ContextLoaderListener这个类,这个就找了很久。。。。这个是配置在web.xml中,第一件事找包,第二打开Project Structure,跟项目相关配置基本都在个菜单里边

idea 运行 spring项目 idea运行springmvc_idea 运行 spring项目_09


左下角出现问题,提醒配置有误报错为:

idea 运行 spring项目 idea运行springmvc_xml_10

让程序部署的时候,把Spring MVC相关类库复制到lib文件夹中

idea 运行 spring项目 idea运行springmvc_MVC_11


把两个类库 添加进去,然后重新运行,tomcat log 不再报错,访问成功

idea 运行 spring项目 idea运行springmvc_xml_12


添加Controller

@Controller
@RequestMapping("/hello")
public class Helloworld
{
    @RequestMapping("/say")
    public String say()
    {
        return "/WEB-INF/jsp/say.jsp";
    }

}

此时地址为http://localhost:8080/hello/say.form 因为:
在web.xml前端控制器是这样的

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

修改为

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

然后继续访问http://localhost:8080/hello/say

并打断点发现,没有进入controller

idea 运行 spring项目 idea运行springmvc_spring_13


为啥呢,因为没修改另外一个配置文件,dispatcher-servlet.xml(前面说DispatcherServlet作用,DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点)

三 配置 component-scan(dispatcher-servlet.xml)
告诉Servlet去哪里找到相应的Controller

打开 dispatcher-servlet.xml
在已经存在的中间加上
<context:component-scan base-package=“cn.cj.hello”/>
 base-package指定的就是存放Controller的包
 并在文件头绑定:
 xmlns:context=“http://www.springframework.org/schema/context”

配置 ViewResolver(dispatcher-servlet.xml)

<!--指定视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 视图的路径 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 视图名称后缀  -->
        <property name="suffix" value=".jsp"/>
    </bean>

添加视图文件(.jsp)

idea 运行 spring项目 idea运行springmvc_idea 运行 spring项目_14

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>hello world</body>
</html>

再次访问http://localhost:8080/hello/say

报错为

idea 运行 spring项目 idea运行springmvc_idea 运行 spring项目_15


为什么呢? 原来在dispatcher-servlet中xmlns有问题,这bean还是复制吧,下面是修改后的xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.2.xsd
           ">
       <context:component-scan base-package="cn.cj.hello"/>
       <!--指定视图解析器-->
       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <!-- 视图的路径 -->
              <property name="prefix" value="/WEB-INF/jsp/"/>
              <!-- 视图名称后缀  -->
              <property name="suffix" value=".jsp"/>
       </bean>
</beans>

到此运行 http://localhost:8080/hello/say成功

idea 运行 spring项目 idea运行springmvc_java_16


四 现在通过 Model 向 View 传值

已经完成了MVC中的(V和C),M还写,继续修改

package cn.cj.hello;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/hello")
public class Helloworld
{
    @RequestMapping("/say")
    public String say(Model model)
    {
//        视图对象传值
         model.addAttribute("name","wormday"); // 指定Model的值
          model.addAttribute("url",""); // 指定Model的值
        return "say";
    }

}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
hello world,${name}
<br/>${url}</body>
</html>

运行后

idea 运行 spring项目 idea运行springmvc_java_17


最后总结下mvc原理

idea 运行 spring项目 idea运行springmvc_java_18