springmvc框架简介,第一个demo
2016-05-01 21:51
369 查看
Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。从这样一个角度来说,Spring MVC和Struts、Struts2非常类似。Spring MVC的设计是围绕DispatcherServlet展开的,DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图
原始mvc(b/s)请求处理过程直接上图:springmvc请求处理过程,这一过程,注意,一定要理解,因为开发过程就是根据这个请求过程一步一步开发的
请求流程
1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器查找Handler。 HandlerMapping可以根据xml配置、注解配置进行查询。 3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器 处理器在实际开发中习惯称为controller(另一种说法处理器是后端控制器,最终调用service进行业务处理)。 5、HandlerAdapter调用处理器Handler 6、Handler执行完成返回ModelAndView ModelAndView:是springmvc的封装对象,将模型和视图封装在一个对象中。 7、HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewReslover根据逻辑视图名解析View 逻辑视图名:如果指定具体 的jsp完整地址不方便,将完整的地址简化为逻辑的视图名(串)。 view:是一个接口,接口实现了很多类型的view(比如:jstlView、pdfView、freemarker、报表的view) ViewReslover:不同的视图解析器可以解析出上边不同的view. 9、ViewReslover返回View 10、DispatcherServlet对View进行渲染视图(即将模型数据填充至request域)。 11、DispatcherServlet响应用户(将jsp转发给用户,最终由tomcat解析servlet生成html,最终响应)
springmvc第一个小demo,xml实现:
记得导入:spring-webmvc-4.2.0.RELEASE.jarspringmvc包,第一步首先在在web.xml中配置springmvc的前端控制器,
接收请求、响应结果给用户。它相当于中央调度,作用可以将各各组件之前的耦合性降低了。
DispatcherServlet不需要程序员开发,由springmvc提供了
<!-- springmvc配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 如果不配置contextConfigLocation,默认加载/WEB-INF/servlet名称+"-serlvet.xml"即:springmvc-serlvet.xml, --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <!-- 第一种:*.action或*.do等,请求以.action或.do结尾 的由前端控制器解析 第二种:/,所有的请求全部由前端控制器解析,会把所有的包括静态资源 (css、html、js)也解析,前端控制器无法解析静态资源,特殊处理静态资源访问不通过前端控制器解析 第三种:/*,此方法存在问题,请求需要最终转发到jsp,此方法前端控制器把转发的jsp也解析了,前端控制器无法解析jsp的,所以此方法不能使用。 --> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
第二步开发处理器适配器(handlerAdapter),处理器映射器(handlerMapping)不需要我们开发,注意这里只是简单的设置信息到页面,不做任何处理
package com.leige.domain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; /** * @author * 定义控制器需要实现controler接口 * */ public class StudentControler implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //定义modelandview ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("msg", "磊哥无敌"); modelAndView.setViewName("index"); return modelAndView; } }
springmvc配置:
<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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 3.配置handler --> <bean id="show" name="/show.action" class="com.leige.domain.StudentControler"> </bean> <!-- 2.配置handler适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 配置handlerMapping 所有实现handlerAdapter接口的都可以配置在这里 都是非注解--> <!-- 1.处理器映射器,根据名称来映射 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 2.spring容器根据bean是否实现handler接口来判断是否是处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <!-- 2.HttpRequestHandlerAdapter执行实现HttpRequestHandler接口的Handler 根据是否实现httphandler接口,来判断bean是否是处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> <!-- 1.根据bean的id对应url,可以配置多个--> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/show1.action">show</prop> <prop key="/show2.action">show</prop> </props> </property> </bean> <!-- 4.配置视图解析器 支持jsp--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 视图前缀 和modelandview拼接成一个完整的urlmodelAndView.setViewName("index"); /index.jsp --> <property name="prefix" value="/"/> <!-- 视图后缀 --> <property name="suffix" value=".jsp" ></property> </bean> </beans>
**第一步配置handlermapping处理器映射器,第二步配置处理器适配器,第三步配置处理器
第四步配置所需的视图解析器**
以上是xml实现,如果想使用注解实现,需要配置annotation注解映射和处理器适配器
注意都是springmvc3.1以后的版本 注解使用的handlermapping处理器映射器 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 注解使用的处理器适配器: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 也可以使用注解驱动在xml中配置 以上两项就不必配置了 : <mvc:annotation-driven/>
注解开发controler开发,使用注解开发时,一定要配置注解扫描:
package com.leige.domain; import java.io.IOException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class StudentControler2 { @RequestMapping("/studentgControler_show.action") public ModelAndView show() throws IOException{ ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("msg","注解开发"); modelAndView.setViewName("index"); return modelAndView; } }
视图显示:
<body> ${msg} </body>
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- C# MVC模式下商品抽奖功能实现
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET Mvc开发之查询数据
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC中图表控件的使用方法
- 剖析ASP.NET MVC的DependencyResolver组件
- ASP.NET MVC的四种验证编程方式
- ASP.NET MVC @Helper辅助方法和@functons自定义函数的使用方法