现在很多公司用的开源框架很多都是ssm框架的一个结构,这里我自己试着自己搭一个简单的框架,大家共同学习。下面一起跟着我搭建吧,本人菜鸟,有任何不对的地方有望指出。

框架结构:spring(4.3.9.RELEASE)+springmvc(4.3.9.RELEASE)+mybatis(3.4.4)+marven(4.0.0)需要注意的是,自己搭的时候注意mybatis的版本和spring的版本要兼容,具体可以去http://www.mybatis.org/spring/上查看

spring框架:核心是ioc和aop,主要负责bean容器的注入,和mybatis整合之后还负责数据库(连接数据库,sqlsession,事物)相关配置,并且还可以集成其他模块。

springmvc框架:主要处理请求,model,view,controller,一看就主要是controller和view之间的交互,所以主要配置controller和view的配置

mybatis框架:持久层框架,和spring整合之后负责有关sql的配置

软件:eclipse(4.4.1)+jdk1.7+tomcat7

一、创建一个maven项目 目录:

这里面的文件后面都会用到,都会一一说明,因为之前有搭过,后来忘了,现在搭的时候一些也忘了,也是百度了不少,所以有的地方我会啰嗦一点

一、先引入jar包,可以去http://search.maven.org/网站查询自己所需要的jar包 

<!-- spring相关jar包  -->
<!-- spring-context : 为Spring核心提供了大量扩展,
这里marven会自动添加其依赖jar包
spring-aop.jar(使用aop特性时使用的类)
  spring-beans.jar(包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类)
spring-core。jar:spring核心工具包
spring-orm。jar:spring对dao层特性的扩展
spring-expression:Spring表达式语言??这边不能理解?
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- mvc框架相关类 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- aspect -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
<scope>runtime</scope>
</dependency>
<!-- 用于整合orm框架(hibernate,ibatis,)-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.9.RELEASE</version>
</dependency> <!-- mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!-- spring和mybatis整合,通过spring设置bean来管理mybatis的配置 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- oracle连接驱动 -->
<!-- maven没有提供oracle的连接驱动包 -->
<!-- 导入dbcp的jar包,用来在spring-mybatis.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--对Spring 对JDBC 数据访问进行封装的所有类-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>

<!-- 对json的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0.pr4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0.pr4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0.pr4</version>
</dependency>

</dependency>

这里我用的数据库连接是oracle,好像marven上没法下载oracle的驱动jar包就自己下了 ,用mysql的自己添加一下mysql的驱动包

二、配置ApplicationContext.xml  spring的配置文件

oracal.properties   连接oracle相关数据配置

oracle.driverClassName=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@localhost:1521:xe
oracle.username=system
oracle.password=123456
oracle.initialSize=3
oracle.maxActive=300
oracle.maxIdle=2
oracle.minIdle=1

ApplicationContext.xml    spring的配置文件

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 扫描除了controller之外的bean 和springmvc的功能区分开 -->
<context:component-scan base-package="com.lyj">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- 加载连接oracle的配置文件 -->
<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:oracle.properties</value>
</list>
</property>
</bean>
<!-- 数据库 连接 采用dbcp方式,我这边用的是oracle数据库-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${oracle.driverClassName}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.username}"/>
<property name="password" value="${oracle.password}"/>
<!-- 配置连接池相关属性 -->
<property name="initialSize" value="${oracle.initialSize}"/><!-- 启动时的连接数 -->
<property name="maxActive" value="${oracle.maxActive}"/><!-- 最大连接数 -->
<property name="maxIdle" value="${oracle.maxIdle}"/><!-- 最大空闲数,经过高峰之后 ,将连接渐渐释放直到释放到最大空闲值-->
<property name="minIdle" value="${oracle.minIdle}"/><!-- 最小空闲值,当空闲的连接数少于此值,连接池会申请连接 -->
</bean> <!-- 数据库连接已经建好,那么就要访问数据库,进行数据库操作 ,spring提供了sessionFactory 来建立与数据库的会话-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:sql-map-config.xml"/>
<property name="mapperLocations">
<list>
<value>classpath:mybatis/*/*-mapper.xml</value>
</list>
</property>
</bean> <!-- 通过注入sqlsessionFactory的方式来获取一个SqlsessionTemplate -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 通过构造函数注入 -->
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean> <!-- 扫描 basePackage下所有的接口,根据对应的mapper.xml为其生成代理类,实现dao曾的注入 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lyj.*.mapper" /> </bean> <!-- 相关事务配置 -->
<!-- 可以理解为切面 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- transaction-manager:事务管理器,管理之前配置的数据库 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- name:配置用到事务的方法名(相当于切点) propagation:如何使用事务 read-only:是否只读 rollback-for:回滚(注意:代码中不能try..catch..如果catch了就不会抛出异常,spring接受不到异常,事务就不会回滚) -->
<tx:method name="*add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="*delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="*update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice> <aop:config>
<!-- 切点集 这里配置在service层 ,在service层上面配置事物-->
<aop:pointcut expression="execution(* com.lyj.*.service..*(..))" id="pc"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config> </beans>

 三、dispatcher-servlet.xml    springmvc配置文件

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
<!-- springmvc主要处理view和controller之间的交互,所以这边将view和controller单独放在springmvc的配置--> <!-- 定义 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理
-->
<!-- <mvc:default-servlet-handler /> --> <!-- 会自动注入DefaultAnnotationHandlerMapping处理@requestMapping,将请求路径放在请求映射表上 和AnnotationMethordHandlerAdpter:根据前台请求地址决定调用哪个方法 两个bean是用于springmvc分发请求用到的
并默认配置HttpMessageConverter:@responsebody返回某种格式,默认应该是json吧,是吗?哈哈,我这边出来就是json的
-->
<mvc:annotation-driven />
<!-- 扫描controller注解的类 -->
<context:component-scan base-package="com.lyj">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- springMVC访问静态资源将/WEB-INF/resources路径通过ResourceHttpRequestHandler 映射成/resources/** 可以直接访问 -->
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" /> <!-- 相关视图配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean> </beans>

三、mybatis的配置文件  sql-map-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- mybatis的事情都让spring去做了,自己做啥呢,mybatis还有配置一些类的简写啊,全局配置啊,哈哈,万恶的spring -->
<!-- 可以用来配置类的别名 -->
<!-- <typeAliases></typeAliases> --> <!-- mybatis的一个插口,可以理解为拦截器拦截器,可以用来做基于mybatis的分页 -->
<!-- <plugins>
<plugin interceptor=""></plugin>
</plugins> -->
</configuration>

四、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SSM</display-name> <!-- 加载spring配置 -->
<!--上下文,相当于全局的变量 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <context-param>
<param-name>xhlbqlhlog4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param> <!-- 监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!--过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 匹配所有的路径包括有后缀的如。jsp,.html,.js等等 -->
</filter-mapping> <!-- 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:dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
<!-- 注意:这里是/ 不适用/*的原因:如访问student/queryStudednt路径时返回一个页面student/queryStudent.jsp
这是这个路径又被拦截,dispatcher-servlet去寻找@requestMapping("student/queryStudent.jsp")的controller,此时没有这个controller,就报404
换成/就直接返回页面了
-->
</servlet-mapping> <!-- 默认首页 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- tomcat启动时首先加载WEB-INF下的web.xml,里面标签加载顺序 context-param》listener》filter》servlet ,spring的bean默认在起服务的时候就已经注入了--> </web-app>

五、测试

Student.java

package com.lyj.student.model;

import org.springframework.stereotype.Component;

@Component
public class Student {
private String id; private String name; private String age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

StudentMapper.java(dao层)

package com.lyj.student.mapper;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.lyj.student.model.Student;

@Repository
public interface StudentMapper { public List<Student> queryStudent();
}

studentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lyj.student.mapper.StudentMapper">
<select id="queryStudent" resultType="com.lyj.student.model.Student">
select * from student
</select>
</mapper>

studentService.java

package com.lyj.student.service;

import java.util.List;

import com.lyj.student.model.Student;

public interface StudentService {

    public List<Student> queryStudent();
}

studentServiceImpl.java

package com.lyj.student.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.lyj.student.mapper.StudentMapper;
import com.lyj.student.model.Student;
import com.lyj.student.service.StudentService; @Service
public class StudentServiceImpl implements StudentService { @Autowired
StudentMapper mapper;
@Override
public List<Student> queryStudent() { return mapper.queryStudent(); } }

StudentController.java

package com.lyj.student.controller;

import java.util.List;
import java.util.Map; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.lyj.student.model.Student;
import com.lyj.student.service.StudentService; @Controller
public class StudentController { @Autowired
private StudentService studentService; @RequestMapping("student/queryStudent")
public ModelAndView queryStudent(){ ModelMap map=new ModelMap();
List<Student> list=studentService.queryStudent();
System.out.println(list.toString());
map.put("studentList", list);
return new ModelAndView("student/queryStudent"); } @RequestMapping("student/queryStudentJson")
@ResponseBody
public Map insertStudent(){
ModelMap map=new ModelMap();
List<Student> list=studentService.queryStudent();
System.out.println(list.toString());
map.put("studentList", list);
return map; }
}

访问:http://localhost:8081/SSM/student/queryStudent

控制台输出:[Student [id=1, name=小明, age=10], Student [id=2, name=小红, age=11], Student [id=3, name=小蓝, age=12]],页面也访问到了

六、注意:

1.jar包版本可能互相不支持,需注意,或者是不是少jar包了

2.eclipse配置方面,project facets的配置,jdk版本,web版本是不是对应的

3.配置文件中扫描bean的路劲,还有一些其他路径是否配置正确

等等。。。

好了就到这里。。。对于框架部分还是很浅的认知,目前只知道如何使用,哎。。。太菜。。。

动手搭建ssm框架的更多相关文章

  1. Maven项目搭建(二):Maven搭建SSM框架

    上一章给大家讲解了如何使用Maven搭建web项目. 这次给大家介绍一下怎么使用Maven搭建SSM框架项目. 首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. p ...

  2. 快速搭建ssm框架

    快速搭建SSM框架 因为最近有很多朋友问我自己的项目搭建的不够完善,并且经常出现一些小问题,那么今天我又整理了一下文档教大家如何快速搭建SSM框架我是用 eclipse搭建的,如果想用idear的话我 ...

  3. Eclipse中使用Maven搭建SSM框架

    Eclipse中不使用Maven搭建SSM框架:https://www.cnblogs.com/xuyiqing/p/9569459.html IDEA中使用Maven搭建SSM框架:https:// ...

  4. 第n次搭建 SSM 框架

    什么说第 N 次搭建SSM框架呢? 刚学习java的时候,搭建 SSM 框架想做一个个人项目之类的,后来没搭起来,也就拖延了,进入公司之后,接触的第一个项目就是SSM的,模仿了一下,也能搭个简简单单的 ...

  5. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(下)

    在上一篇(详解intellij idea 搭建SSM框架(spring+maven+mybatis+mysql+junit)(上))博文中已经介绍了关于SSM框架的各种基础配置,(对于SSM配置不熟悉 ...

  6. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  7. 使用Springboot快速搭建SSM框架

    Spring Boot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 一.环境准备 Idea 2017 或 201 ...

  8. IDEA搭建ssm框架测试衍生出的问题The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Develop\jdk7\jdk1.7.0_79\bin;

    最近玩起IDEA这开发工具,搭建ssm框架测试时,部署项目出现如下问题: 信息: The APR based Apache Tomcat Native library which allows opt ...

  9. 2018用IDEA搭建SSM框架(Spring+SpringMVC+Mybatis)

    使用IDEA搭建ssm框架 环境 工具:IDEA 2018.1 jdk版本:jdk1.8.0_171 Maven版本:apache-maven-3.5.3 Tomcat版本:apache-tomcat ...

  10. 使用maven搭建ssm框架的javaweb项目

    目前主流的javaweb项目,常会用到ssm(Spring+Spring MVC+Mybatis)框架来搭建项目的主体框架,本篇介绍搭建SSM框架的maven项目的实施流程.记之共享! 一.SSM框架 ...

随机推荐

  1. acl规则问题

    在acl规则中网络地址与广播地址包含在规则范围内

  2. QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection(QueryDet:用于加速高分辨率小目标检测的级联稀疏查询)

    QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection(QueryDet:用于加 ...

  3. NSQ(7)-nsq存在的问题

    nsq存在的缺陷 部署的难度 ​ nsq提供了一种消费者端进行服务发现的模型,所以无需告诉消费者去哪寻找对于的主题(Topic)在哪个nsqd实例上. ​ 然而,它并没有提供一种方案去解决一个生产者应 ...

  4. SparkRDD所有算子操作,建议全部手敲一遍

    说明: 1.以下方法全部来自这个RDD.scala,可以自己看源码 2.使用$SPARK_HOME/bin/spark-shell运行代码 3.注释部分是运行结果 //org.apache.spark ...

  5. 混淆css类名

    使用vite:

  6. 冷冻法快速还原Oracle数据库

    1.重新装完系统之后,把D:\app\Administrator\oradata拷贝出来,app目录. 2.安装Oracle数据库,创建一个和oradata目录内同名的实例. 3.通过停止服务的方式关 ...

  7. 为什么常用Formdata对象来上传图片

    一.上传的数据体格式Content-Type 1.application/x-www-form-urlencoded 2.application/json 3.multipart/form-data ...

  8. 设置Redhat终端显示中文

    修改.bash_profile,增加: export LC_ALL= export LANG=C source .bash_profile

  9. WebService 客户端上传图片,服务器端接收图片并保存到本地

    需求:如题,C#本地要调用Webservice接口,上传本地的照片到服务器中: 参考:客户端: https://blog.csdn.net/tiegenZ/article/details/799276 ...

  10. mariadb数据库查询(select)

    查询基本使用(条件,排序,聚合函数,分组,分页) 示例:--创建学生表 create table students ( id int unsigned not null auto_increment ...