SpringMVC-简介和执行原理分析(一)
mvc : 模型、视图、控制器 , 是一种软件设计规范,说明不是设计模式;
本质:将业务逻辑 , 数据 , 显示 分离的方式来编写代码; 前后端分离;
model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来 , 数据dao,服务层service。
view :负责进行数据的渲染和展示;客户端想要看到的东西
springmvc的执行原理
1、dispatcherservlet表示前置控制器,是整个springmvc的控制中心。用户发出请求,dispatcherservlet接收请求并拦截请求。
我们假设请求的url为:
http://localhost:8080/springmvc/hello
如上url拆分成三部分:
http://localhost:8080服务器域名
springmvc部署在服务器上的web站点
hello表示控制器
通过分析,如上url表示为:请求位于服务器localhost:8080上的springmvc站点的hello控制器。
2、handlermapping为处理器映射。dispatcherservlet调用handlermapping,handlermapping根据请求url查找handler。
3、handlerexecution表示具体的handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
4、handlerexecution将解析后的信息传递给dispatcherservlet,如解析控制器映射等。
5、handleradapter表示处理器适配器,其按照特定的规则去执行handler。
6、handler让具体的controller执行。
7、controller将具体的执行信息返回给handleradapter,如modelandview。
8、handleradapter将视图逻辑名或模型传递给dispatcherservlet。
9、dispatcherservlet调用视图解析器(viewresolver)来解析handleradapter传递的逻辑视图名。
10、视图解析器将解析的逻辑视图名传给dispatcherservlet。
11、dispatcherservlet根据视图解析器解析的视图结果,调用具体的视图。
12.最终视图呈现给用户。
hello,springmvc
1.导包
配置tomcat
<dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.11</version> <scope>test</scope> </dependency> <!-- spring mvc 及 spring系列包 --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>4.3.24.release</version> </dependency> <!--servlet核心--> <dependency> <groupid>javax.servlet</groupid> <artifactid>javax.servlet-api</artifactid> <version>4.0.1</version> </dependency> <!-- jstl --> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> <version>1.2</version> </dependency> </dependencies>
注意资源导出问题:
<!--解决资源导出问题--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
2.编写web.xml
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="webapp_id" version="3.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <!--关联springmvc配置文件--> <init-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- /和/*的区别: < url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求; 即:.jsp不会进入spring的 dispatcherservlet类 。 < url-pattern > /* </ url-pattern > 会匹配*.jsp, 会出现返回jsp视图时再次进入spring的dispatcherservlet 类,导致找不到对应的controller所以报404错。 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
注意点:
servlet-mapping 中的url-pattern
/和/*的
区别: / 只针对我们编写的请求,即.jsp不会进入spring的dispatcherservlet类中.
/* 会匹配*.jsp会出现返回jsp视图时再次进入spring的dispatcherservlet类,导致找不到对应的controller所以报404的错误.
3.编写springmvc的核心配置文件
在springmvc的核心配置文件中只用编写4个部分:
1.扫描指定包的注解
2.配置资源过滤
3.支持注解驱动
4.配置视图解析器
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--扫描指定包下的注解,让指定的类能够被ioc容器管理--> <context:component-scan base-package="org.west.controller"/> <!--静态资源过滤--> <mvc:default-servlet-handler/> <!--支持注解驱动--> <mvc:annotation-driven/> <!--配置视图解析器--> <bean id="internalresourceviewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/web-inf/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
注意点:要导入对应的文件约束.
4.编写controller类
package org.west.controller; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.requestmapping; @controller @requestmapping("h1") public class hellocontroller { @requestmapping("hello") public string hello(model model){ model.addattribute("msg","hello,springmvc"); return "hello"; } }
5.编写.jsp文件
<%@ page contenttype="text/html;charset=utf-8" language="java" %> <html> <head> <title>springmvc</title> </head> <body> ${msg} </body> </html>
6.运行结果
上一篇: Android之使用Android-query框架开发实战(二)
下一篇: 麻辣花菜的做法大介绍