Spring MVC的体系结构
DispatcherServlet(前端控制器)
Spring MVC最核心的类
web.xml中配置
Handler(处理器):对应MVC中C(Controller层)
类型:Object
作用:实际处理请求
标注了@RequestMapping的所有方法都可以看作是一个Handler
ModelAndView
逻辑视图名
模型对象
核心组件
HandlerMapping(处理器映射)
BeanNameUrlHandlerMapping(默认)
将请求URL映射到同名的控制器Bean上
DefaultAnnotationHandlerMapping
将请求映射到标注@RequestMapping注解的控制器和处理方法上
RequestMappingHandlerMapping
HandlerAdapter(适配器)
AnnotationMethodHandlerAdapter
RequestMappingHandlerAdapter
ViewResolver(视图解析器)
InternalResourceView
HelloSpringMVC
1、引入JAR包
在“WEB-INF”目录下,建立“lib”目录,导入 Spring MVC 框架的相关依赖包,同时,在“External Libraries”中也导入相同的 jar 包,其中对于“lib”目录,我们直接把 jar 包复制过来就可以;但是对于“External Libraries”,我们就得通过“Project Structure”进行导入啦。至于需要导入的 jar 包,在我们先前下载的“Spring MVC框架的各种依赖包”中都可以找到,下面附上需要导入的 jar 名称:
spring-aop-3.2.2.jar AOP spring-aspects-3.2.2.jar AOP spring-beans-3.2.2.jar 核心包 spring-context-3.2.2.jar 扩展包 spring-context-support-3.2.2.jar 对扩展包支持 spring-core-3.2.2.jar 核心包 spring-expression-3.2.2.jar spring 表达式 spring-web-3.2.2.jar web b/s spring-webmvc-3.2.2.jar springmvc com.springsource.org.aopalliance-1.0.0.jar AOP com.springsource.org.apache.commons.logging-1.1.1.jar 通用日志
2、配置web.xml
servlet
DispatcherServlet(替代所有的servlet) -->主要就是配置 DispatcherServlet,即核心分发器
init-param: classpath:springmvc-servlet.xml
对应的mapping 指定的url-pattern–> / 【不要用/*,会404】
<?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,启动级别,数字越小级别越高!--> <load-on-startup>1</load-on-startup> </servlet> <!--所有请求都会经过这个DispatcherServlet请求分发器--> <!-- /和/*的区别: < 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>
3、编写SpringMVC的配置文件
1.让IOC的注解生效
2.静态资源过滤 :HTML,JS,CSS,图片 , 视频 …
3.MVC的注解驱动
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="controller"/> <!--静态资源过滤--> <mvc:default-servlet-handler/> <!--annotation-driven:支持MVC注解驱动 --> <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类
需要给类加注解 :@Controller , 可以让IOC容器管理 , 等价于Bean
请求映射的路径 :@RequestMapping (“路径”),如果类上有就先写类的,在写方法的
Model :模型传递参数
return “hello”:它会去视图解析中拼接前缀和后缀来找到对应的视图
@Controller @RequestMapping("/HelloController") public class HelloWorldController { //请求映射("路径") @RequestMapping("/hello") public String hi(Model model){ model.addAttribute("msg","Hello,SpringMVC"); System.out.println("进入HELLO"); return "hello"; // WEB-INF/jsp/hello.jsp } }
5.视图层
注意视图的位置,要和视图解析器对应 web-inf / jsp , 为什么需要在web-inf路径下 , 因为这个路径下的东西用户无法直接访问,更加安全
可以通过EL表达式取出Model中存放的值,或者对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>SpringMVC</title> </head> <body> ${msg} </body> </html>
6.测试
配置Tomcat , 设置项目名 , 开启服务器 , 访问对应的请求路径
流程总结
1.建立web项目
2.导包
3.编写web.xml
4.编写springmvc的配置文件 【servletname】-servlet.xml
5.编写控制类
6.编写视图层
7.测试