SSM框架简单介绍
1背景介绍
SSM框架,是Spring + Spring MVC + MyBatis的缩写,Spring依赖注⼊DI来管理各层的组件,使⽤⾯向切⾯编程AOP管理事物、⽇志、权限等。SpringMVC代表了Model(模型)View(视图)Controller(控制)接收外部请求,进⾏分发和处理。Mybatis是基于jdbc的框架,主要⽤来操作数据库,并且将业务实体和数据表联系起来。
2知识剖析
SSM整合思路
spring在进⾏管理时,是很有条理的,每个层都由spring管理,然后不同的层可以调⽤其它层,Handler调⽤service,service调⽤mapper等。
1整合dao层。mybatis和spring整合,通过spring管理mapper接⼝。使⽤mapper的扫描器⾃动扫描mapper接⼝在spring中进⾏注册。
2整合service层。通过spring管理 service接⼝。使⽤配置⽅式将service接⼝配置在spring配置⽂件中。实现事务控制。
param name3整合springmvc。由于springmvc是spring的模块,不需要整合。
<bean class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:db.properties"></property>
</bean>
<bean id="dataSource" class="org.apachemons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="initialSize" value="${InitialPoolSize}"></property>
<property name="maxActive" value="${MaxActive}"></property>
<property name="maxIdle" value="${MaxIdleTime}"></property>
<property name="defaultAutoCommit" value="false"></property>
<!--最后⼀个属性设置为defaultAutoCommit为false,这样数据库进⾏操作时就不会每进⾏⼀个数据库操作就⾃动提交⼀次事务了。-->
</bean>
<bean id="sqlSessionFactory" class="batis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="com.task2.pojo"></property>
<!--l⽂件与mapper接⼝在同⼀个包下时可以不⽤注⼊-->
<!--<property name="mapperLocations" value="classpath*:com/task2/l"></property>-->
</bean>
<!--指定扫描的包名,如果有多个包就⽤逗号隔开-->
<bean class="batis.spring.mapper.MapperScannerConfigurer">
<!--扫描映射⽂件mapper-->
<property name="basePackage" value="com.task2.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<bean id="page" class="com.task2.pojo.Page">
</bean>
<bean id="userServiceImpl" class="com.task2.service.UserServiceImpl">
</bean>
<!--扫描controller层-->
<context:component-scan base-package="ller"></context:component-scan>
<!-- Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler/>
<!-- ⼀个配置解决映射器和适配器的配置注解配置 -->
<mvc:annotation-driven enable-matrix-variables="true"></mvc:annotation-driven>
<!--对模型视图添加前后缀-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
>
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
<!--p:prefix="WEB-INF/pages/" p:suffix=".jsp"-->
</bean>
<bean id="timeInterceptor" class="com.task2.aspectJ.TimeInterceptor"></bean>
<aop:config>
<aop:aspect id="aspect" ref="timeInterceptor">
<aop:pointcut id="point2" expression="execution(* ller.UserController.*(..))"/>
<aop:around method="doAroundCT" pointcut-ref="point2"  ></aop:around>
</aop:aspect>
</aop:config>
SpringMVC流程:
服务器发送Http request请求,请求被前端控制器(DispatcherServlet)捕获。
前端控制器根据xml⽂件中的配置(或者注解)对请求的URL进⾏解析,得到请求资源标识符(URI)。然后根据该URI,调⽤处理器映射器(HandlerMapping)获得处理该请求的Handler以及Handler对应的,最后以 HandlerExecutionChain 对象的形式返回。前端控制器根据获得的Handler,选择⼀个合适的处理器适配器(HandlerAdapter)去执⾏该Handler。处理器适配器提取request中的模型数据,填充Handler⼊参,执⾏处理器(Handler)(也称之为Controller)。Handler(Controller)执⾏完成后,向处理器适配器返回⼀个ModelAndView对象,处理器适配器再向前端控制器返回该ModelAndView对象(ModelAndView只是⼀个逻辑视图)。
根据返回的ModelAndView,前端控制器请求⼀个适合的视图解析器(ViewResolver)(必须是已经注册到Spring容器中的ViewResolver)去进⾏视图解析,然后视图解析器向前端控制器返回⼀个真正的视图View(jsp)。
前端控制器通过Model解析出ModelAndView中的参数进⾏解析,最终展现出完整的View并通过Http response返回给客户端。
3常见问题
3.1put和delete⽅法不⽀持
3.2静态资源⽆法访问
3.3怎么将后端的数据传到jsp界⾯?
4解决⽅案
4.1配置rest风格的过滤器
<!--配置rest风格过滤器-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
<init-param>
<param-name>methodParam</param-name>
<param-value>_method</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.2
<!-- Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler/>
4.3使⽤ModelAndView.
modelandview的实例需要⾃⼰创建。包含了模型和视图两部分。使⽤addObject传递,同时返回model和view。使⽤ModelMap.
由mvc框架⾃动创建,使⽤addAttribute的⽅法来传递参数。并且只包含模型,再返回view。
5参考⽂献

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。