是时候总结下了,基础才是精华!
步骤:
- IDEA新建Spring MVC项目
- 运行、调试相关配置
- 配置 component-scan
- Model 向 View 传值
一 通过IDEA新建Spring MVC项目
点击next ,输入项目名及保存位置,finish后 IDEA会帮你下载需要的类库
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发现机制和自动装配
这里我自己看了下这篇文章
https://blog.csdn.net/u010871004/article/details/53589642
)
再看下web.xml(注释自己注释)
已经配置好了前端控制器(
作用:
拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是spring MVC的第一步)
二 设置运行、调试相关配置
配置tomcat
运行http://localhost:8080/index.jsp 发现不能访问,后台 确是对的
找到tomcat log日志
找不到ContextLoaderListener这个类,这个就找了很久。。。。这个是配置在web.xml中,第一件事找包,第二打开Project Structure,跟项目相关配置基本都在个菜单里边
左下角出现问题,提醒配置有误报错为:
让程序部署的时候,把Spring MVC相关类库复制到lib文件夹中
把两个类库 添加进去,然后重新运行,tomcat log 不再报错,访问成功
添加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
为啥呢,因为没修改另外一个配置文件,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)
<%@ 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
报错为
为什么呢? 原来在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成功
四 现在通过 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","http://www.cnblogs.com/wormday/p/8435617.html"); // 指定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>
运行后
最后总结下mvc原理
感谢小墨的童鞋博主:参考学习的博客https://www.cnblogs.com/wormday/p/8435617.html