SpringMVC介绍:是一种架构的模型,本身不引入新功能,只是帮助我们将开发的代码结构,组织的更加合理(都是请求驱动,发一次请求进行一次刷新)
Model(模型)
数据模型:提供要展示的数据,包含数据和行为,行为用来处理数据
View(视图)
负责进行模型的展示(jsp)
Controller(控制器)(servlet)
接收用户请求,委托给模型进行处理,将处理完毕的模型数据返回给视图
1.接收数据
2.处理数据
3.页面的显示
4.使用模型渲染视图(给jsp传值)
SpringMVC框架的核心组件
1.DispatcherServlet:前端控制器,用来过滤请求(总控制器,核心servlet对象,所以需要在web.xml中配置)
2.Controller/Handler: 控制器/处理器。(也可以看为servlet,可在里面进行跳转)
3.HandlerMapping: 处理器映射器(系统默认:表示将请求的URL和Bean名字映射,如URL为 "/hello",则Spring配置文件必须有一个名字为"/hello"的Bean.
注意:这里/代表的含义是url中项目名后面的/(服务器中的/:http://ip:port/项目名/)
4.HandlerAdaptor:处理器适配器:(系统默认:表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作为SpringMVC中的处理器).
5.ViewResolver:视图解析器。(系统默认:前缀和后缀都为空)
注意: 对于Spring配置文件中的处理器适配器,处理器映射器,都可以省去不写,springMVC框架中会有默认配置的,视图解析器也可以不配置,
因为在org.springframework.web.servlet.DispatcherServlet这个类的同包下,有一个DispatcherServlet.properties文件,
里面就是SpringMVC默认的配置,是当用户的Spring配置文件中没有指定配置时使用的默认策略(你不配置那么用户默认的,你配置了,那么就使用你的配置)
SpringMVC处理步聚:先前端控制器把请求拦下来,让处理器映射器将对应的url匹配给对应的handler(默认完全匹配),
处理适配器决定handler里的哪个方法,handler返回的视图逻辑名给视图解析器解析成完整的资源路径)
SpringMVC中注意的:
DispatcherServlet中的映射路径
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
1)拦截所有请求 /
<url-pattern>/</url-pattern>
弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。
(/*:控制器返回的资源也会被在此拦截)
解决静态资源的拦截问题:
解决方式一:利用Tomcat的defaultServlet来处理静态文件
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
特点:1.要配置多个,每种文件配置一个。
2.要写在DispatcherServlet的前面(和tomcat版本有关),让defaultServlet先拦截请求,这样请求就不会进入Spring了
3. 高性能。
解决方式二: 使用<mvc:resources>标签,例如:
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
两个*:表示此路径下的所有子路径资源
这样如果有访问/images或者/js或者/css路径下面的资源的时候,spring就不会拦截了
解决方式三: 使用<mvc:default-servlet-handler/>标签
在spring配置文件中加入此标签配置即可(是静态资源,Spring就放行)
2)自定义拦截请求的后缀名
拦截*.do、*.html、*.action, 例如/user/add.do
3)springMVC中的内部跳转:
1.服务器内部跳转:
return "forward:/forward/test1"; 或者
request.getRequestDispatcher(path).forward(request, response);
2.客户端重定向:
return "redirect:/test";或者
response.sendRedirect(location);
SpringMVC 中的其他应用
Controller接口以及其实现类
AbstractController:抽象类提供了可选的会话(session)的串行访问功能
自定义适配器:
通过实现HandlerAdapter,通过判断handler是否实现指定接口来判断,
在指定执行此handler(自定义的处理器)中的方法
拦截器:HandlerInterceptor接口(拦截器适配器:通过对此接口进行空实现)
1)常见应用场景
1、日志记录
2、权限检查
3、性能监控
4、通用行为 例如读取用户cookie
解释(跟aop中的advice/advsior差不多,只是此拦截器是特定对handler进行拦截的)
配置文件:(注意此配置在文件中的配置顺序,要写在配置文件的上面)
<bean name="handlerInterceptor1" class="com.briup.web.interceptor.MyInterceptor1"/>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="handlerInterceptor1"/>
</list>
</property>
</bean>