SpringMVC介绍
SpringMVC是属于SPring中web模块的支持一部分
实现了web mvc的设计模式 进行web层的解耦
请求驱动类型的web框架:请求-响应的模型
SPringMVC的运行原理
运行步骤:
1、用户发起请求URL到达前端控制器
2、前端控制器请求处理器映射器查询Handler
3、处理器映射器返回给前端控制器,返回处理器执行链(HanderExecutionChain)(包含多个处理拦截器和一个Handler实例)
4、前端控制器请求处理器适配器执行Handler。
5、处理器适配器根据适配规则找到特定的处理器(后端controller层URL所绑定的方法),由处理器来执行Handler
6、处理器执行结束后返回给处理器适配器一个ModelAndView对象,该对象包含数据(Model)和逻辑视图名
7、处理器适配器将ModelAndView对象返回给前端控制器
8、前端控制器请求视图解析器解析视图地址,找到真正的视图
9、视图解析器将真正视图对象返回到前端控制器
10、将数据渲染到视图上
11、将渲染的页面响应给请求用户
各组件介绍
前端控制器
前端控制器为DispatcherServlet
不需要进行开发
前端控制器是整个用户请求的入口和完成各组件业务转发
所有组件都是直接和前端控制器交互,减少组件间的耦合性
处理器映射器
处理器映射为HandlerMapping
不需要进行开发
来存储URL和Handler之间的映射关系,
由前端控制器来判断请求URL是否存在,并返回包含Handler的处理器执行链
处理器适配器
处理器适配器为HadlerAdapter
不需要进行开发
按照特定的规则(HandlerAdapter要求的规则)去执行,Handler通过适配器找到真正的执行器,是适配器模式的使用
处理器
按照HandlerAdapter的要求开发,Handler是针对用户具体的业务逻辑做响应的处理,Handler涉及到就用户的具体的业务逻辑需要自行开发Handler
视图解析器
视图解析器为ViewResolver
不需要进行开发
解析视图,根据逻辑视图名找到真正的视图,视图解析器负责解析View视图即页面的具体的地址位置,jsp、pdf、freeMark等都能完成解析
视图
视图为View
需要进行开发
View是一个接口,支持不同的View类型(jsp、pdf、freeMark…),例如jsp是提供了一个jstl
视图是展示给用户的页面,不同的业务展示不同的页面
SpringMVC的使用
web项目需要放在容器里执行(Tomcat/jetty)
目录结构:
1.引入jar依赖
springMVC中web依赖:
<!--web依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--Spring 基本核心jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!--log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--注解相关jar包-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
2.在web.xml中配置前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<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-liangcheng</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-liangcheng</servlet-name>
<url-pattern>/</url-pattern>
<!--http://www.baidu.com/index-->
</servlet-mapping>
</web-app>
需要在web.xml配置文件中引入前端控制器的实现类:org.springframework.web.servlet.DispatcherServlet
将SPringMVC的配置添加在web.xml文件中
3、创建SpringMVC的配置文件
创建一个spring-mvc.xml文件,放在资源文件路径下resource下,配置映射器,适配器和解析器
<?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-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!--配置SpringMVC的需要扫描的包路径-->
<context:component-scan base-package="com.liangcheng.controller"/>
<!--配置映射器、适配器:使用默认的处理器处理,不用显性配置映射器、适配器-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
4.将spring-mvc.xml配置文件加载到web.xml配置文件中
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
5.编写controller层
public class TestController {
@RequestMapping("/liangcheng")
public String liangcheng(){
//返回的页面
return "index.jsp";
}
}
6.编写jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>success</title>
</head>
<body>
<h1>你好呀!</h1>
</body>
</html>
7.部署服务
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.24</version>
<configuration>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>30000</maxIdleTime>
</connector>
</connectors>
<contextPath>/</contextPath>
</configuration>
</plugin>
8.Tomcat启动服务
运行结果:
遇到的问题及解决方法
Error running ‘Tomcat 9.0.50’: Address localhost:8080 is already in use
运行Tomcat 9.0.50错误:地址localhost:8080已经被使用
解决方法 :
换一个端口就可以了
访问页面报错404源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示
解决方法:
1.找到你自己所要运行的项目,看WEB-INF下面是否有lib目录,如果没有的话,新建一个lib目录,然后选择lib目录,点击那个加号,选择第一个就会把里面的包全部导进lib目录了
2.在部署的Tomcat的Deployment中添加上面运行项目
其他可能存在的问题解决方法请参考如下文章:
http://www.10qianwan.com/articledetail/754772.html