开始第一步,上结构图:

一个最基本的SSM框架的搭建_spring

几点说明:第一 ,oracle目前没出免费的maven版本,所以采用添加jar包的方式,放在lib里面,如果是mysql,则不需要,只在maven下pom里配置就可以了

第二,此项目读写数据采用map来做,没用JavaBean,个人觉得有时候方便一点

第三,项目的原始结构,自己去找,我上一篇文章好像也有,如果搭建maven项目,包括maven下怎么出现WebContent(myeclipse是WebRoot),包括如何生成web.xml,以及红叉的解决,搭建好了,继续看下面各个文件的配置:

第一个,项目最下方的pom.xml



  1. ​<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"​
  2. ​xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">​
  3. ​<modelVersion>4.0.0</modelVersion>​
  4. ​<groupId>ali77</groupId>​
  5. ​<artifactId>ssm_sample</artifactId>​
  6. ​<packaging>war</packaging>​
  7. ​<version>0.0.1-SNAPSHOT</version>​
  8. ​<name>ssm_sample Maven Webapp</name>​
  9. ​<url>http://maven.apache.org</url>​
  10. ​<dependencies>​
  11. ​<dependency>​
  12. ​<groupId>junit</groupId>​
  13. ​<artifactId>junit</artifactId>​
  14. ​<version>3.8.1</version>​
  15. ​<scope>test</scope>​
  16. ​</dependency>​
  17. ​<dependency>​
  18. ​<groupId>javax.servlet</groupId>​
  19. ​<artifactId>jstl</artifactId>​
  20. ​<version>1.2</version>​
  21. ​</dependency>​
  22. ​<dependency>​
  23. ​<groupId>org.springframework</groupId>​
  24. ​<artifactId>spring-web</artifactId>​
  25. ​<version>4.0.6.RELEASE</version>​
  26. ​</dependency>​
  27. ​<dependency>​
  28. ​<groupId>org.springframework</groupId>​
  29. ​<artifactId>spring-webmvc</artifactId>​
  30. ​<version>4.0.6.RELEASE</version>​
  31. ​</dependency>​
  32. ​<dependency>​
  33. ​<groupId>commons-dbcp</groupId>​
  34. ​<artifactId>commons-dbcp</artifactId>​
  35. ​<version>1.4</version>​
  36. ​</dependency>​
  37. ​<dependency>​
  38. ​<groupId>commons-pool</groupId>​
  39. ​<artifactId>commons-pool</artifactId>​
  40. ​<version>1.4</version>​
  41. ​</dependency>​
  42. ​<dependency>​
  43. ​<groupId>org.mybatis</groupId>​
  44. ​<artifactId>mybatis-spring</artifactId>​
  45. ​<version>1.1.1</version>​
  46. ​</dependency>​
  47. ​<dependency>​
  48. ​<groupId>org.aspectj</groupId>​
  49. ​<artifactId>aspectjweaver</artifactId>​
  50. ​<version>1.7.1</version>​
  51. ​</dependency>​
  52. ​<dependency>​
  53. ​<groupId>javax.servlet</groupId>​
  54. ​<artifactId>servlet-api</artifactId>​
  55. ​<version>3.0-alpha-1</version>​
  56. ​</dependency>​
  57. ​</dependencies>​
  58. ​<build>​
  59. ​<finalName>ssm_sample</finalName>​
  60. ​</build>​
  61. ​</project>​

这些都是很基本的,就不要再做删减了,可以根据功能新增,添加完记得maven-install一下,然后检查一下,是否添加成功


一个最基本的SSM框架的搭建_xml_02


下一步:几个文件就依次给了,按照结构图从下到上的顺序吧

##----index.jsp



  1. ​<%@ page language="java" contentType="text/html; charset=UTF-8"​
  2. ​pageEncoding="UTF-8"%>​
  3. ​<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">​
  4. ​<html>​
  5. ​<head>​
  6. ​<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">​
  7. ​<title>欢迎页</title>​
  8. ​</head>​
  9. ​<body>​
  10. ​(这是一个maven下搭建的一个最基本的ssm框架) <br/>​
  11. ​<a href="${pageContext.request.contextPath}/user/show_user.do">进入主页面</a>​
  12. ​</body>​
  13. ​</html>​

##----web.xml




  1. ​<?xml version="1.0" encoding="UTF-8"?>​
  2. ​<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"​
  3. ​xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"​
  4. ​xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ​
  5. ​http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">​
  6. ​<display-name>ssm_sample</display-name>​
  7. ​<welcome-file-list>​
  8. ​<welcome-file>index.jsp</welcome-file>​
  9. ​</welcome-file-list>​
  10. ​<!-- 指定spring bean 的配置文件所在目录 -->​
  11. ​<context-param>​
  12. ​<param-name>contextConfigLocation</param-name>​
  13. ​<param-value>classpath*:applicationContext.xml</param-value>​
  14. ​</context-param>​
  15. ​<!-- 配置监听spring -->​
  16. ​<listener>​
  17. ​<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>​
  18. ​</listener>​
  19. ​<!-- 配置spring字符编码为utf-8 -->​
  20. ​<filter>​
  21. ​<filter-name>encodingFilter</filter-name>​
  22. ​<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>​
  23. ​<init-param>​
  24. ​<param-name>encoding</param-name>​
  25. ​<param-value>UTF-8</param-value>​
  26. ​</init-param>​
  27. ​<init-param>​
  28. ​<param-name>forceEncoding</param-name>​
  29. ​<param-value>true</param-value>​
  30. ​</init-param>​
  31. ​</filter>​
  32. ​<filter-mapping>​
  33. ​<filter-name>encodingFilter</filter-name>​
  34. ​<url-pattern>/*</url-pattern>​
  35. ​</filter-mapping>​

  36. ​<servlet-mapping>​
  37. ​<servlet-name>spring</servlet-name>​
  38. ​<url-pattern>*.do</url-pattern>​
  39. ​</servlet-mapping>​
  40. ​<!-- springMVC的配置 -->​
  41. ​<servlet>​
  42. ​<servlet-name>spring</servlet-name>​
  43. ​<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>​
  44. ​<init-param>​
  45. ​<param-name>contextConfigLocation</param-name>​
  46. ​<param-value>classpath:springmvc.xml</param-value>​
  47. ​</init-param>​
  48. ​<load-on-startup>1</load-on-startup>​
  49. ​</servlet>​
  50. ​</web-app>​

##----main.jsp




  1. ​<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>​
  2. ​<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">​
  3. ​<html>​
  4. ​<head>​
  5. ​<title>主页面</title> ​
  6. ​<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">​
  7. ​</head>​
  8. ​<body>​
  9. ​用户名: ${requestScope.user_name } (这是来自数据库的数据) <br/>​
  10. ​密 码: ${requestScope.user_password } (这是经过Sevice层处理过的密码) <br/>​
  11. ​(made by capricornce)​
  12. ​</body>​
  13. ​</html>​

##----showUser-mapper.xml




  1. ​<?xml version="1.0" encoding="UTF-8" ?>​
  2. ​<!DOCTYPE mapper​
  3. ​PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"​
  4. ​"http://mybatis.org/dtd/mybatis-3-mapper.dtd">​

  5. ​<mapper namespace="com.ali77.mapper.UserMapper">​
  6. ​<select id="listUsers" resultType="java.util.Map">​
  7. ​select​
  8. ​user_id,user_name,user_password from user_info​
  9. ​</select>​
  10. ​</mapper>​

##----applicationContext.xml




  1. ​<beans xmlns="http://www.springframework.org/schema/beans"​
  2. ​xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"​
  3. ​xmlns:context="http://www.springframework.org/schema/context"​
  4. ​xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"​
  5. ​xsi:schemaLocation="http://www.springframework.org/schema/beans ​
  6. ​http://www.springframework.org/schema/beans/spring-beans-3.2.xsd ​
  7. ​http://www.springframework.org/schema/mvc ​
  8. ​http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd ​
  9. ​http://www.springframework.org/schema/context ​
  10. ​http://www.springframework.org/schema/context/spring-context-3.2.xsd ​
  11. ​http://www.springframework.org/schema/aop ​
  12. ​http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ​
  13. ​http://www.springframework.org/schema/tx ​
  14. ​http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">​

  15. ​<mvc:annotation-driven />​
  16. ​<!-- 支持注解Aspectj --> ​
  17. ​<aop:aspectj-autoproxy /> ​
  18. ​<!-- 支持注解配置bean --> ​
  19. ​<context:annotation-config /> ​
  20. ​<!--使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入base-package为需要扫描的包(含所有子包) --> ​
  21. ​<context:component-scan base-package="com.ali77.controller"/>​
  22. ​<context:component-scan base-package="com.ali77.service"/>​
  23. ​<!-- 加载jdbc.properties文件中的内容,jdbc.properties文件中key命名要有一定的特殊规则 -->​
  24. ​<context:property-placeholder location="classpath:jdbc.properties"/>​
  25. ​<!-- 配置数据源,dbcp -->​
  26. ​<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"​
  27. ​destroy-method="close">​
  28. ​<property name="driverClassName" value="${jdbc.driverClass}" />​
  29. ​<property name="url" value="${jdbc.url}" />​
  30. ​<property name="username" value="${jdbc.username}" />​
  31. ​<property name="password" value="${jdbc.password}" />​
  32. ​<property name="initialSize" value="${jdbc.initialSize}" />​
  33. ​<property name="maxActive" value="${jdbc.maxActive}" />​
  34. ​<property name="maxIdle" value="${jdbc.maxIdle}" />​
  35. ​<property name="minIdle" value="${jdbc.minIdle}" />​
  36. ​<!-- 连接被泄露时是否打印 --> ​
  37. ​<property name="logAbandoned" value="true"/> ​
  38. ​<!--removeAbandoned: 是否自动回收超时连接--> ​
  39. ​<property name="removeAbandoned" value="true"/> ​
  40. ​<!--removeAbandonedTimeout: 超时时间(以秒数为单位)--> ​
  41. ​<property name="removeAbandonedTimeout" value="180"/> ​
  42. ​<!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒--> ​
  43. ​<property name="maxWait" value="60000"/> ​
  44. ​<!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. --> ​
  45. ​<property name="timeBetweenEvictionRunsMillis" value="10000"/> ​
  46. ​<!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 --> ​
  47. ​<property name="numTestsPerEvictionRun" value="10"/> ​
  48. ​<!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程--> ​
  49. ​<property name="minEvictableIdleTimeMillis" value="10000"/> ​
  50. ​<property name="validationQuery" value="SELECT SYSDATE FROM DUAL"/>​
  51. ​</bean>​

  52. ​<!-- sqlSessionFactory -->​
  53. ​<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">​
  54. ​<!-- 数据库连接池 -->​
  55. ​<property name="dataSource" ref="dataSource" />​
  56. ​<!-- 加载mybatis的全局配置文件 -->​
  57. ​<!-- <property name="configLocation" value="classpath:sqlMapConfig.xml" /> -->​
  58. ​<property name="mapperLocations">​
  59. ​<list>​
  60. ​<!-- 自动匹配Mapper映射文件 -->​
  61. ​<value>classpath*:mybatis/*-mapper.xml</value>​
  62. ​</list>​
  63. ​</property>​
  64. ​</bean>​

  65. ​<!-- mapper扫描器 -->​
  66. ​<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">​
  67. ​<!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->​
  68. ​<property name="basePackage" value="com.ali77.mapper"></property>​
  69. ​<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>​
  70. ​</bean>​

  71. ​</beans>​

##----jdbc.properties




  1. ​#数据库属性配置​
  2. ​jdbc.driverClass=oracle.jdbc.driver.OracleDriver​
  3. ​#jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl​
  4. ​jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl​
  5. ​jdbc.username=capricornce​
  6. ​jdbc.password=xxxxxxxx​
  7. ​jdbc.initialSize=30​
  8. ​jdbc.maxActive=150​
  9. ​jdbc.maxIdle=20​
  10. ​jdbc.minIdle=5​
  11. ​jdbc.minPoolSize=2​
  12. ​jdbc.maxPoolSize=20​
  13. ​jdbc.checkoutTimeout=3000​
  14. ​jdbc.maxStatements=50​
  15. ​jdbc.testConnectionOnCheckin=true​
  16. ​jdbc.idleConnectionTestPeriod=18000​

##----springmvc.xml




  1. ​<?xml version="1.0" encoding="UTF-8"?>​
  2. ​<beans xmlns="http://www.springframework.org/schema/beans"​
  3. ​xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"​
  4. ​xmlns:context="http://www.springframework.org/schema/context"​
  5. ​xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"​
  6. ​xsi:schemaLocation="http://www.springframework.org/schema/beans ​
  7. ​http://www.springframework.org/schema/beans/spring-beans-3.2.xsd ​
  8. ​http://www.springframework.org/schema/mvc ​
  9. ​http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd ​
  10. ​http://www.springframework.org/schema/context ​
  11. ​http://www.springframework.org/schema/context/spring-context-3.2.xsd ​
  12. ​http://www.springframework.org/schema/aop ​
  13. ​http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ​
  14. ​http://www.springframework.org/schema/tx ​
  15. ​http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "​
  16. ​>​
  17. ​<!-- 配置处理器,决定了Controller的实现方式 -->​
  18. ​<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>​
  19. ​<!-- 配置映射器,决定了如何将客户端的请求映射到对应的Controller -->​
  20. ​<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>​
  21. ​<!-- 配置视图解析器,控制如何生成响应给客户端 -->​
  22. ​<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">​
  23. ​<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>​
  24. ​<property name="prefix" value="/WEB-INF/jsp/"></property>​
  25. ​<property name="suffix" value=".jsp"></property>​
  26. ​</bean>​
  27. ​<!-- 配置default-servlet-handler,避免controller本该跳转的页面又当做请求发出-->​
  28. ​<mvc:default-servlet-handler/>​
  29. ​</beans>​

继续,java代码。。。


##----UserActionController



  1. ​package com.ali77.controller;​

  2. ​import java.util.List;​
  3. ​import java.util.Map;​

  4. ​import javax.servlet.http.HttpServletRequest;​

  5. ​import org.springframework.beans.factory.annotation.Autowired;​
  6. ​import org.springframework.stereotype.Controller;​
  7. ​import org.springframework.web.bind.annotation.RequestMapping;​

  8. ​import com.ali77.service.UserService;​


  9. ​@Controller​
  10. ​@RequestMapping("user")​
  11. ​public class UserActionController {​
  12. ​//自动注入​
  13. ​@Autowired​
  14. ​private UserService userService;​
  15. ​@RequestMapping("show_user")​
  16. ​public String showUser(HttpServletRequest req) {​
  17. ​//获取所有用户信息,这里偷懒,下一行只取一个​
  18. ​List<Map<String, Object>> list = userService.listUsers();​
  19. ​//获取第一个用户信息​
  20. ​Map<String, Object> map = list.get(0);​
  21. ​req.setAttribute("user_name", map.get("USER_NAME"));​
  22. ​req.setAttribute("user_password", map.get("USER_PASSWORD"));​
  23. ​return "main";​
  24. ​}​
  25. ​}​

##----UserMapper




  1. ​package com.ali77.mapper;​

  2. ​import java.util.List;​
  3. ​import java.util.Map;​

  4. ​import org.springframework.stereotype.Repository;​
  5. ​@Repository​
  6. ​public interface UserMapper {​
  7. ​List<Map<String, Object>> listUsers();​
  8. ​}​

##----UserService




  1. ​package com.ali77.service;​

  2. ​import java.util.List;​
  3. ​import java.util.Map;​

  4. ​public interface UserService {​
  5. ​List<Map<String, Object>> listUsers();​
  6. ​}​

##----UserServiceImpl




  1. ​package com.ali77.service.impl;​

  2. ​import java.util.List;​
  3. ​import java.util.Map;​

  4. ​import org.springframework.beans.factory.annotation.Autowired;​
  5. ​import org.springframework.stereotype.Service;​

  6. ​import com.ali77.mapper.UserMapper;​
  7. ​import com.ali77.service.UserService;​
  8. ​@Service​
  9. ​public class UserServiceImpl implements UserService {​
  10. ​@Autowired​
  11. ​UserMapper userMapper;​
  12. ​@Override​
  13. ​public List<Map<String, Object>> listUsers() {​
  14. ​List<Map<String, Object>> users = userMapper.listUsers();​
  15. ​for (Map<String, Object> user : users) {​
  16. ​String password = user.get("USER_PASSWORD").toString();​
  17. ​//给密码“加密”,返回给页面​
  18. ​if(password.length() > 6) {​
  19. ​//密码大于6位,除去首尾字符外,全部替换成*​
  20. ​String star = "";​
  21. ​for (int i = 0; i < password.length() - 2; i++) {​
  22. ​star += "*";​
  23. ​}​
  24. ​password = password.charAt(0) + star + password.charAt(password.length() - 1);​
  25. ​} else {​
  26. ​//密码小于6位,全部替换成*​
  27. ​password = password.replaceAll(".", "*");​
  28. ​}​
  29. ​user.put("USER_PASSWORD", password);​
  30. ​}​
  31. ​return users;​
  32. ​}​

  33. ​}​

至此代码部分全部完成,剩下的数据库结构非常简单:第一个字段是number,后面是varchar2


一个最基本的SSM框架的搭建_xml_03


最终效果图:

一个最基本的SSM框架的搭建_spring_04

点击超链接:

一个最基本的SSM框架的搭建_xml_05


好了,项目至此完成。

特别说明:写程序要灵活,不要全部抄过去,结果发现不行,一看,数据库用户名密码还是作者本人的,没有改。。。或者说,这个项目一点没改去跑mysql数据库,都是不可取的。如果遇到一般性报错多百度,谁也不能保证程序在哪儿里能都跑通,鬼知道我搭建项目的时候,百度了多少问题,报错,说明我还是比较菜的。。。

下面放上项目的链接

​javascript:void(0)​​,里面内容如下:

一个最基本的SSM框架的搭建_spring_06

可以把ssm_sample,直接导入到eclipse里面,如果报错,这样改一下,就是重新配置一下环境,包括换jdk啊,换tomcat版本啊

一个最基本的SSM框架的搭建_spring_07

一个最基本的SSM框架的搭建_xml_08