首先先简单介绍一下SSM框架。
SSM框架是spring,springmvc,mybatis组成的。1,springmvc应用于web层,用于处理用户的请求,例如用户在地址栏输入地址,springmvc就负责拦截请求,并调用controller层中相应的方法,最终把结果返回给用户。
2,spring则主要是通过IOC(控制反转)技术促进了低耦合。(例如应用了Ioc后,一个对象依赖的其它对象会通过被动的方式传递进来。),还有aop(面向切面)技术,该技术主要用于事务设计以及lo4j日志。还有使用容器去管理项目中的类。
3,Mybatis则负责数据库相关业务,可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO。
之前通过北京尚学堂的教学视频,跟着动手写了一个关于带头像注册的功能,所以打算写这篇博客记载一下个人对于这个项目的一些理解。
首先应该配置上下文参数,对应的文件为applicationContext.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
然后,配置springmvc:
<!-- SpringMVC前端控制器 -->
<servlet>
<!-- 设置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.xml</param-value>
</init-param>
<!-- 设置springmvc的优先级 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置映射,设置拦截范围 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 监听器 -->
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 字符编码过滤器 -->
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置springmvc.xml文件:
配置相应的头文件之后:
<!-- 扫描注解 -->
<context:component-scan base-package="com.bjsxt.controller"></context:component-scan>
<!-- 注解驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 静态资源 -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<mvc:resources location="/files/" mapping="/files/**"></mvc:resources>
<!-- Mutilpart解析器(用于用户头像上传的相关操作。) -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
配置application.xml文件(spring和mybatis的整合配置文件):
也需要配置相关的头文件之后:
default-autowire="byName"
这个表示自动注入,属性名和传入值的名相同时可以不用配置。
<!-- 注解扫描 -->
<context:component-scan base-package="com.bjsxt.service.impl"></context:component-scan>
<!-- 加载属性文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- SqlSessionFactory -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="com.bjsxt.pojo"></property>
</bean>
<!-- 扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bjsxt.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="factory"></property>
</bean>
<!-- 事务管理器 -->
<bean id="txManage" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 声明式事务 -->
<tx:advice id="txAdvice" transaction-manager="txManage">
<tx:attributes>
<tx:method name="ins*"/>
<tx:method name="del*"/>
<tx:method name="upd*"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置aop -->
<aop:config>
<aop:pointcut expression="execution(* com.bjsxt.service.impl.*.*(..))" id="mypoint"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint"/>
</aop:config>
通过上面的代码片段,总结来说,applicationContext.xml文件需要配置的内容有注解扫描,加载属性文件(数据库的),配置数据源(实现连接数据库),配置SqlSessionFactory,配置扫描器,事务管理器,声明式事务,配置aop。通过default-autowire="byName" 这段代码来实现自动注入。
web.xml需要配置上下文参数,监听器,字符编码过滤器,springmvc前端控制器等。
springmvc需要配置的有扫描注解,注解驱动,静态资源,Mutilpart解析器等。
最后的配置文件需要配置log4j日志处理文件还有数据库属性文件。
在完成了基本环境配置后,就可以使用SSM框架来简洁地写业务代码了。
具体的编写代码一般来说分为:controller层,mapper层,pojo层,service层和service.impl层,还有一些jsp文件。
其中pojo层表示的是实体类,也就是数据库中每个表对应着一个类,表的对应列对应着类的属性。
controller层表示的是接受用户的输入并调用模型和视图去完成用户的需求,负责转发请求,对请求进行处理。
mapper层中定义了接口,然后在接口中写需要实现的方法,通过注解的sql语句去实现其功能。
例如:
@Update("update files set count=count+1 where id=#{0}")
int updCountById(int id);
这个方法就实现了修改的功能。
service层中定义了一些用户需求需要实现的方法。
service.impl层中的类对应实现了service层中的接口,并且通过定义一个对应的mapper层中的类,调用该类中对应的方法来实现需求。
还需要编写jsp文件来呈现界面让用户看,jsp界面一般需要导入jstl核心库,然后java部分代码使用el表达式和jstl标签去编写。有时候还需要使用ajax技术来实现异步刷新功能,使用jquery来编写动态效果。
以上结构中,controller层就代表了mvc架构中的C,也即为控制器层。
mapper层,service层和service.impl层代表了mvc架构中的M,也即是模型层。
jsp代表了mvc架构中的V,也即是视图层。
总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
由于此篇文章只是简单介绍了SSM框架和MVC结构对应的基础功能和意义,源代码连接在文章下方。