SpringMVC框架知识点详解
官⽅的下载⽹址是:
⼀、Spring MVC简介
1.1Spring MVC⼯作流程
映射器:主要是根据浏览器上输⼊的url来映射所有满⾜要求的Handle(控制器类)
适配器:主要是决定调⽤哪个Handler来实现具体的业务逻辑
1.2Spring MVC VS Struts2
1)springmvc的⼊⼝是⼀个servlet,即前端控制器;
struts2⼊⼝是⼀个filter过虑器,即前端过滤器,
2)springmvc是基于⽅法开发(控制器类是单例的,不可能维护实体变量),传递参数是通过⽅法形参,可以设计为单例;
struts2是基于类开发(维护⼀个实体变量),传递参数是通过类的属性,只能设计为多例
3)springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据通过request对象传输到页⾯;
struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据
4)springmvc开发运⾏速度快于struts2
⼆、Spring MVC⼯程搭建(xml)
2.1导⼊springioc,springweb , springmvc相关的jar包
2.2在/WEB-INF/ l⽂件配置SpringMVC的前端控制器DispatcherServlet(前端控制器)
<!-- 注册springmvc核⼼控制器 -->
<servlet>
<!-- servlet-name名字随便写 -->
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通知DispatcherServlet去指定的⽬录下加载l配置⽂件
classpath:是在⼯程的src路径下寻
如果不配置init-param的话,控制器会⾃动寻/WEB-INF/<servlet-name>-l⽂件-->
<init-param>
<!-- 值是固定的,相当于键值对 -->
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>//拦截请求
</servlet-mapping>
注:在默认情况下:springmvc框架的配置⽂件必须叫<servlet-name>-l
且必须放在/WEB-INF/⽬录下,我们可以在l⽂件中,为DispatcherServlet配置⼀个初始化参数,让它去我们指定的⽬录下加载l配置⽂件
2.3配置l
注:该配置⽂件的命名规则遵循l⽂件中核⼼控制器配置。
<!-- 控制器(程序员) -->
<bean name="/hello.action" class="cn.itcast.javaee.springmvc.base.HelloAction"></bean>
<!-- 映射器(框架) 如果不写,默认是将bean标签的name属性当做URL-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 适配器(框架),如果不写,默认是⽤于寻实现了Controller接⼝的类 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 视图解析器(框架),默认是通过ModelAndView对象中封装的视图名称(真实路径)到真正的页⾯-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
</beans>
2.4创建HelloAction.java控制器类
/**
* 控制器
* @author AdminTC
*/
public class HelloAction implements Controller{
/**
* 业务⽅法,controller接⼝中的⽅法handleRequest,必须实现
*/
public ModelAndView handleRequest(HttpServletRequest requqest,HttpServletResponse response) throws Exception { // ModelAndView现在不⽤了
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message","这是我的第⼀个springmvc应⽤程序");
modelAndView.setViewName("/jsp/success.jsp");
return modelAndView;
}
}
2.5写jsp
在/WebRoot/下创建jsp/success.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>这是我的第⼀个springmvc应⽤程序</title>
</head>
<body>
success.jsp<br/>
${message}
</body>
</html>
部署web应⽤到tomcat中,通过浏览器访问如下URL:
localhost:8080/springmvc-day01/hello.action
三、springmcv组件讲解(在springmvc中配置)
3.1概念讲解
1)DispatcherServlet:前端控制器
⽤户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中⼼,由它调⽤其它组件处理⽤户的请
求,dispatcherServlet的存在降低了组件之间的耦合性。
2)HandlerMapping:处理器映射器
HandlerMapping负责根据⽤户请求url到Handler即处理器,springmvc提供了不同的映射器实现不同的映射⽅式,例如:配置⽂件⽅式,实现接⼝(controller)⽅式,注解⽅式等。
3)HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进⾏执⾏,这是适配器模式的应⽤,通过扩展适配器可以对更多类型的处理器进⾏执⾏。
4)Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的⽤户请求进⾏处理。
由于Handler涉及到具体的⽤户业务请求,所以⼀般情况需要程序员根据业务需求开发Handler。
5)ViewResolver:视图解析器
View Resolver负责将处理结果⽣成View视图,View Resolver⾸先根据逻辑视图名解析成物理视图名即具体的页⾯地址,再⽣成View视图对象,最后对View进⾏渲染将处理结果通过页⾯展⽰给⽤户。
6)View:视图
springmvc框架提供了很多的View视图类型的⽀持,包括:jstlView、freemarkerView、pdfView等。我们最常⽤的视图就是jsp。
⼀般情况下需要通过页⾯标签或页⾯模版技术将模型数据通过页⾯展⽰给⽤户,需要由程序员根据业务需求开发具体的页⾯。
说明:
在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三⼤组件。
需要⽤户开发的组件有handler(控制器)、view(视图)
3.2组件⽤法注意事项
1)视图解析器InternalResourceViewResolver【解析视图逻辑名对应的真实路径】
ModelAndView对象中即可以封装真实视图路径名,也可以封装视图路径的逻辑名。在springmvc中,如果是真实名称,可以不配置,如果不是,要配置前缀和后缀。逻辑视图名需要在controller中返回ModelAndView指定,⽐如逻辑视图名为success,则最终返回的jsp视图地址为::
“/jsp/itemList.jsp”
最终jsp物理地址:前缀+逻辑视图名+后缀
代码如下:
<!-- 视图解析器(框架) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
Action类代码如下:
modelAndView.setViewName("success");
2)映射器BeanNameUrlHandlerMapping
该映射器适合⼀个请求访问⼀个控制器
将程序员定义的Action所对应的<bean>标签的name属性作为请求路径
<!-- 注册控制器(程序员) -->
<bean name="/add.action" class="cn.itcast.javaee.springmvc.mapping.UserAction"></bean>
<!-- 注册映射器(handler包)(框架) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
,访问到UserAction类
3)映射器SimpleUrlHandlerMapping
多个路径对应同⼀个Action
/delete.action和/update.action和/find.action请求路径都交由<bean>标签为id的Action,
<!-- 注册控制器(程序员) -->
<bean id="userActionID" class="cn.itcast.javaee.springmvc.mapping.UserAction"></bean>
<!-- 注册映射器(handler包)(框架) -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/delete.action">userActionID</prop>
<prop key="/update.action">userActionID</prop>
<prop key="/find.action">userActionID</prop>
</props>
</property>
</bean>
,
,
,三个地址都访问到UserAction类
4)适配器SimpleControllerHandlerAdapter
spring ioc注解适配器 :帮你到实现controler接⼝的类-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
5)控制器ParameterizableViewController
直接将请求跳转到jsp页⾯,不经过程序员写的控制器
<!-- /index.action请求,直接转发到WEB-INF/index.jsp页⾯ -->
<bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <property name="viewName" value="/index.jsp"/>
</bean>
3.3⾃定义⽇期转换器和编码过滤器
1)在默认情况下,springmvc不能将String类型转成Date类型,必须⾃定义类型转换器public class AdminAction extends Controller{
@Override
protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
}
2)spring提供的,专⽤于解决POST提交中⽂乱码问题,需要在l⽂件中配置
<!-- 编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
四、Spring MVC⼯程搭建(注解)
4.1创建⼯程导⼊jar包
导⼊springioc,springweb和springmvc相关的jar包
4.2在/WEB-INF/下创建l⽂件
<servlet>
<servlet-name>DispatcherServlet</servlet-name> <;前端控制器>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value> <;配置路径名称>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern> <!--拦截.action请求-->
</servlet-mapping>
4.3配置l
SpringMVC本⾝就是Spring的⼦项⽬,对Spring兼容性很好,不需要做很多配置。配置⼀个Controller扫描就可以了,让Spring对页⾯控制层Controller进⾏管理。
1)组件扫描器
省去在spring容器配置每个Controller类的繁琐。使⽤<context:component-scan>⾃动扫描标记@Controller的控制器类,
2)注解式映射器
对类中标记了@ResquestMapping的⽅法进⾏映射。根据@ResquestMapping定义的url匹配@ResquestMapping标记的⽅法,匹配成功返回HandlerMethod对象给前端控制器。
HandlerMethod(处理器⽅法)对象中封装url对应的⽅法Method。从spring3.1版本开始,废除了DefaultAnnotationHandlerMapping 的使⽤,推荐使⽤RequestMappingHandlerMapping完成注解式处理器映射。
3)注解式适配器
对标记@ResquestMapping的⽅法进⾏适配。从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使⽤,推荐使⽤RequestMappingHandlerAdapter完成注解式处理器适配。
4)注解驱动
为了省事,直接受⽤注解驱动。因为直接配置处理器映射器和处理器适配器⽐较⿇烦。 SpringMVC使⽤<mvc:annotation-driven>⾃动加载 RequestMappingHandlerMapping和RequestMappingHandlerAdapter
可以在l配置⽂件中使⽤<mvc:annotation-driven>替代注解处理器和适配器的配置。
<!-- 注解驱动 -->
<mvc:annotation-driven />
springmvc配置如下:
<!-- Action控制器 -->
<context:component-scan base-package="cn.itcast.javaee.springmvc.helloannotation"/> //controller类所在的包
<!-- 基于注解的映射器(可选) -->
<bean class=" org.springframework.web.hod.annotation.RequestMappingHandlerMapping "/>
<!-- 基于注解的适配器(可选) -->
<bean class=" org.springframework.web.hod.annotation.RequestMappingHandlerAdapter "/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4.4创建HelloAction.java控制器类
1)HelloAction是⼀个普通的java类,不需要实现任何接⼝。
2)需要在类上添加@Controller注解,把Controller交由Spring管理
3)在⽅法上⾯添加@RequestMapping注解,⾥⾯指定请求的url。其中“.action”可以加也可以不加。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论