1.Spring web mvc介绍
Struts2属于表现层框架,它是Spring框架的一部分,从Spring的整体结构可以看出:
1.Web mvc
1、用户发起request请求(Controller)
控制接收用户请求的数据,委托模型处理
2、通过模型控制器(Model)处理数据并获得处理结果
业务逻辑模型通常是指业务逻辑
3、视图控制器将模型数据放在视图上(View)中展示
web模型不能直接在视图上显示数据,需要通过控制器完成。如果模型可以在C/S应用程序中显示视图中的数据。
4、控制器将视图response响应给用户
将数据或处理结果通过视图显示给用户。
1.Spring web mvc 架构架构图流程
1、用户向前端控制器Dispatcherseleter发送请求
2、dispatcherservlet收到Handlermaping处理器映射器的请求。
3、Handlermaping处理器映射器找到特定的处理器,生成处理器对象和处理器拦截器(如果有,则生成),并返回到Dispatcherservlet。
4、dispatcherservlet调用Handleradapter处理器适配器
5、HandlerAdapter适应调用特定的处理器(Controller,也叫后端控制器)。
6、Controler执行返回Modelandviewer
7、Handleradapter将controller执行结果modelandview返回Dispatcherservleteter
8、dispatcherservlet将modelandview传送到viewrslover视图解析器
9、Viewreslover分析后返回特定Viewew
10、根据View渲染Dispatcherservlet的视图(即将模型数据填充到视图中)。
11、Dispatcherservlet响应用户
组件说明:通常使用框架实现以下组件:
DispatcherServlet:整个过程控制中心作为前端控制器,控制其他组件的执行,统一调度,减少组件之间的耦合,提高各组件的可扩展性。
HandlerMapping:不同的映射方法,如配置文件、实现接口、注释等,都是通过扩展处理器映射器实现的。
HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。
ViewResolver:通过扩展视图分析器,支持更多类型的视图分析,如:jsp、freemarker、pdf、excel等。
通常需要开发以下两个组件:
Handler:后端控制器用controller表示处理器。
View:视图,即显示给用户的界面,通常需要标签语言来显示模型数据。
1.第一个springmvc工程第一步:建立Web项目
在eclipse下创建动态web工程springmvc_01。
第二步:导入spring3.1.4的jar包
第三步:前端控制器配置:
在WEB-INF\web.前端控制器配置在xml中
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <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> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
load-on-startup:表示servlet随服务启动;
url-pattern:*.请将action交给Dispatcherservlet处理。
contextConfigLocation:指定springmvc配置的加载位置,默认加载
载WEB-INF/[DispatcherServlet Servlet 名字]-servlet.xml。
第四步:springmvc配置文件
WEBB默认加载Springmvc-INF/[前端控制器的名称]-servlet.xml,还可以在前端控制器定义处指定加载的配置文件,如下:
<init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value></init-param>
如上代码,classpath下的springmvc通过contextconfiglocation加载-servlet.xml配置文件,配置文件名称不能限制[前端控制器名称]-servlet.xml。
第五步:配置处理器映射器
在springmvc中-servlet.xml文件配置如下:
<?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" 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.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "><!-- HandlerMapping --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
BeanNameUrlHandlerMapping:这意味着将定义的bean名称作为请求的url需要在spring容器中配置编写的controler,并指定bean的name作为请求的url,并且必须使用.action结束。
第六步:配置处理器适配器在springmvc中-servlet.xml文件配置如下:
<!-- HandlerAdapter --><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
SimpleControllerHandlerAdapter:也就是说,简单控制器处理适配器,所有org都实现了.springframework.web.servlet.mvc.Controller Bean作为Springmvc的后端控制器。
第七步:配置视图分析器在springmvc中-servlet.xml文件配置如下:
<!-- ViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>
InternalResourceViewResolver:支持JSP视图分析
viewClass:Jstlview表示JSP模板页面需要JSTL标签库,因此相关jarr必须包含在claspath中 包;
prefix 还有suffix:查找视图页面的前缀和后缀,最终视图地址为:
前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回modelandview指定。例如,如果逻辑视图被称为hello,则最终返回jsp视图地址 “WEB-INF/jsp/hello.jsp”
第八步:后端控制器开发
后端控制器即controller,又称action。
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class HelloWorldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception { ModelAndView mv = new ModelAndView(); ///添加模型数据 mv.addObject("message", "Hello World!"); //设置逻辑视图名,最终视图地址=前缀+逻辑视图名+后缀 mv.setViewName("hello"); return mv; }}