SpringMVC初步
一、SpringMVC简介
SpringMVC也叫Spring Web mvc,属于表现层的框架。Spring MVC是Spring框架的一部分,是在Spring3.0后发布的
二、Spring结构图
三、SpringMVC架构图
四、SpringMVC请求流程图
五、SpringMVC请求流程文字描述:
request-------->DispatcherServler(中央调度器/前端控制器)-----> HandlerMapping(处理器映射器)------>返回一个执行链----->将执行链转交给HandlerAdaptor(处理器适配器)----->调度Handler(处理器)-----> ModelAndView----->先将结果交给HandlerAdaptor,然后再由HandlerAdaptor转交给 DispatcherServler--------->DispatcherServler调度ViewResolver(视图解析器)---->交给DispatcherServler-------> 寻找View---->View做出响应(response)
六、第一个入门案例:
案例:用户提交一个请求,服务器端处理器在接收到这个请求后,给出一条欢迎信息,在页面中显示。
步骤:
①在web.xml中配置前端控制器
②处理器映射器(HandlerMapping)
③处理器适配器 (HandlerAdaptor)
④处理器
⑤视图解析器(ViewResolver)
1、引入jar文件
2、注册中央调度器[Web.xml]
3、控制器
4、applicationContext.xml配置文件。配置视图解析器以及注册处理器
5、jsp页面
实现效果:
七、关于urlpattern
最好配成*.do
不能配成/* ===[无法访问*.jsp等动态资源]
最好也不要配成/ === [无法访问静态资源]
不得不配成/
如果url-pattern配成/*,则无法访问动态资源,出现404. 如果配成/ ,则无法访问静态资源,图片无法显示。
不能配成/*缘由:
DispatcherServlet会将向动态页面请求,即向jsp页面的跳转请求也当做是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然是找不到的。jsp页面会报404错误
结论:/*会拦截动态资源
不能配成/:
方案一:使用Tomcat默认的Servlet解决
方案二:使用MVC的default-servlet-handler
会将对静态资源的访问请求通过HandlerMapping映射到默认Servlet请求处理器DefaultServletRequestHandler对象。而该处理器调用了Tomcat的DefaultServlet来处理静态资源的访问请求。当然需要引入mvc约束
方式三:使用MVC的resource解决
在Spring3.0.4之后,Spring定义了专门用于处理静态资源请求的处理器ResourceHttpRequestHandler。并且添加了<mvc:resources/>标签,专门用于解决静态资源无法访问问题。
Location:静态资源所在目录
mapping: 对资源的请求
注意:需要Tomcat7支持
效果图:
八、配置式开发--BeanNameUrlHandlerMapping
1
2
|
<!-- 配置处理器映射器 --> <bean class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" ></bean> |
配置式开发--SimpleUrlHandlerMapping
1
2
3
4
5
6
7
8
9
|
<bean class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > <property name= "mappings" > <props> <prop key= "/hello.do" >firstController</prop> <prop key= "/sayhello.do" >firstController</prop> </props> </property> </bean> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<bean class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > <property name= "urlMap" > <map> <entry key= "/hello.do" > <value>firstController</value> </entry> <entry key= "/sayhello.do" > <value>firstController</value> </entry> </map> </property> </bean> |