学习使用搭建SSM框架搭建Web项目

前言

在学习SSM框架过程中,自己也参考了很多CSDN上大佬们的配置资料,自己也有总结
spring.xml,目录:放在src根目录下:如src/XXX.xml
springmvc.xml, 同上
mybatis-config.xml, 同上
db.properties, 同上
log4j.properties, 同上
web.xml, 目录:WEB-INF/web.xml

如下所示:
在这里插入图片描述
下面我就将我自己的理解写下来。有不对的地方多多指教,谢谢!

一、spring.xml的配置与概念

Spring像我个人接触到最多的是IOC(控制反转)容器,他可以装在JavaBean(就是我们的Java中的类,当然包括service dao层),有了这个机制,就可以不再在每次使用这个类的时候为他初始化,简单的来说就是不用每次去“new”关键字了。
另外还有AOP(面向切面编程)。最主要就是开发过程中事务的处理。

  1. spring.xml配置:

这个是SSM框架中的spring,但是现在很多公司都在用SpringBoot(微服务框架),之后再学习这个加油

<?xml version="1.0" encoding="UTF-8"?>
<beans 
<!--必有的一个beans(他是根),没有这个就不称为框架了 -->
<!-- 最基本的命名空间 xmlns-->
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"

<!-- 启用自动扫描或者注解装配时的命名空间 -->
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
<!-- 与上述命名空间定义相配套额schema定义文件的装在路径 -->
xsi:schemaLocation="http://www.springframework.org/schema/beans    
                    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
                    http://www.springframework.org/schema/context    
                    http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                    http://www.springframework.org/schema/mvc    
                    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                    http://www.springframework.org/schema/tx 
                    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
                    http://www.springframework.org/schema/aop             
                    http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
                    
<!-- 自动扫描 上面配置了context才能够用这个 -->
<context:component-scan base-package="com.test" />

<!-- 引入配置文件 id:实例名称 class:完整类名 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="classpath:db.properties" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
	destroy-method="close">
	<property name="driverClassName" value="${driver}" />
	<property name="url" value="${url}" />
	<property name="username" value="${username}" />
	<property name="password" value="${password}" />
	<!-- 初始化连接大小 -->
	<property name="initialSize" value="${initialSize}"></property>
	<!-- 连接池最大数量 -->
	<property name="maxActive" value="${maxActive}"></property>
	<!-- 连接池最大空闲 -->
	<property name="maxIdle" value="${maxIdle}"></property>
	<!-- 连接池最小空闲 -->
	<property name="minIdle" value="${minIdle}"></property>
	<!-- 获取连接最大等待时间 -->
	<property name="maxWait" value="${maxWait}"></property>
</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<!-- sring的配置文件 读取mybatis的配置文件 -->
	<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.test.dao.inter" />
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<!-- 配置事务管理器 -->
<bean
	class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
	id="transactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="advice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="*" propagation="REQUIRED" /><!-- *是对所有方法都加 -->
	</tx:attributes>
</tx:advice>
<!-- 用切点把事务切进去 -->
<aop:config>
	<aop:pointcut expression="execution(* com.test.service.impl.*.*(..))"
		id="pointcut" />
	<aop:advisor advice-ref="advice" pointcut-ref="pointcut" />
</aop:config>
</beans>

二、springmvc概念和配置

springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行整合。springMVC是一个基于mvc的web框架。有不对的地方请纠正。
图上应该标的清楚哇~
1.springmvc.xml的配置

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
<!-- 在上下文中扫描组件 -->
<context:component-scan base-package="com.test" />

<!-- 扩充了注解驱动,可以将请求参数绑定到控制器参数 -->
<mvc:annotation-driven/>

<!-- 常用的视图解析器  -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
</bean>

<!-- 访问静态资源 -->
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/uploads/**" location="/uploads/"/>
<mvc:resources mapping="/admin/**" location="/admin/"/>
<mvc:default-servlet-handler/>

<bean id="multipartResolver"  
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <!-- 上传文件大小上限,单位为字节(10MB) -->
    <property name="maxUploadSize">  
        <value>10485760</value>
    </property>  
    <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
    <property name="defaultEncoding">
        <value>UTF-8</value>
    </property>
</bean>
</beans>

三、mybatis-config.xml配置与理解

对于这个来说,它就像个手电筒,可以使黑暗的地方变得明亮,话说回来,是对jdbc的封装,是数据库底层变得透明,它的核心关键是围绕sqlsessionFactory展开的,实现与数据库进行数据交互。
通过配置文件关联到各个实体类中的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令比如:
在dao层中有“实现(implement)”和“接口(interface)”,有的项目中只有接口与xml配置sql语句。
这里的xml配置的sql语句就是需要框架去调用它了,用到spring.xml

1.mybatis-config配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<!-- 配置文件中的节点,往往都有对应的java类 -->
<!-- 框架会利用dom4j等解析xml,然后利用反射创建对应的对象 -->
<!-- 并且设置好其中的property -->
<configuration>
 <environments default="development">
	<environment id="development">
 	 <transactionManager type="JDBC"/>
	 <dataSource type="POOLED">
   	 	<property name="driver" value="com.mysql.jdbc.Driver"/>
    	<property name="url" value="jdbc:mysql://localhost:3306/db_bdsp?useUnicode=true&amp;characterEncoding=utf-8"/>
    	<property name="username" value="root"/>
    	<property name="password" value="932430410"/>
 	 </dataSource>
 	</environment>
 </environments>
 <!-- 读取包下的所有映射文件 -->
<mappers>
	<package name="com.test.dao.inter"/>
</mappers>
</configuration>

四、web.xml的配置与理解

web.xml文件是用来初始化工程配置信息的,比如说welcome页面,filter,listener,servlet,servlet-mapping,启动加载级别等等,当你的web工程中没用到这些当然也就不需要这个xml文件来配置你的apllication了

1.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>springmvc</display-name>

<!-- 监听器 启动spring容器 -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring和mybatis的配置文件 -->  
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:spring.xml</param-value>  
</context-param>

<!-- 编码过滤器 -->  
<filter>  
    <filter-name>encodingFilter</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>encodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  

<!-- 启动springmvc的入口 配置前端控制器 -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <!-- 指定springmvc配置文件的路径。如果不指定,默认为:/WEB-INF/${servlet-name}-servlet.xml -->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!-- 启动tomcat就加载servlet,而不是第一次访问之后才加载 -->
    <load-on-startup>1</load-on-startup>  
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 这么配置的意思,就是当用户访问http://localhost:8080/工程名的时候,会根据welcome-file-list配置的页面列表,从项目的根目录开始找页面:
1、第一个配置的index.html能找到,就展示index.html
2、找不到index.html,则去找第二个index.htm,index.htm能找到就展示index.htm,
3、以此类推,如果所有的页面都找不到则报HTTP Status 404即页面找不到
-->
<welcome-file-list>
 	<welcome-file>index.html</welcome-file>
	<welcome-file>index.htm</welcome-file>
	 <welcome-file>index.jsp</welcome-file>
	<welcome-file>default.html</welcome-file>
	<welcome-file>default.htm</welcome-file>
	<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

五、JDBC的proerties的配置文档

JDBC是Java DataBaes Connectivity(Java数据库连接)配置上这个让spring调用,这样就不用在代码中实现连接数据库,并且也解耦合,方便后期的维护作用。

1.db.properties配置

<!--  加载驱动 -->
driver=com.mysql.jdbc.Driver
<!-- 地址 -->
url=jdbc:mysql://localhost:3306/db_bdsp?useUnicode=true&characterEncoding=utf8
<!-- 连接的数据库名字 -->
username=root
<!-- 连接的数据库密码 -->
password=932430410

#datasouce database pool config
<!-- 初始化连接大小 -->
#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570  
initialSize=0  
<!-- 连接池最大数量 -->
#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570  
maxActive=20  
<!-- 连接池最大空闲 -->
#\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2  
maxIdle=20  
<!-- 连接池最小空闲 -->
#\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2  
minIdle=1  
<!-- 获取连接最大等待时间 -->
#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4  
maxWait=60000

六、Log4j的配置与概念(耐心看)

他的作用是在记录项目运行的情况,其中一方面:比如在项目有问题的情况下,可以通过查看记录日志的方式,查找到出现的错误并改正。
另外,还有其他的作用:
(1)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候;我们的应用出现了问题,我们分析、定位、解决问题的时候;我们想将某些日志信息作为离线的业务数据分析的时候等等
(2)最简单的打印日志的方式就是使用系统本身的输出语句,不过对于大多数需求这种方式都是不能满足的
(3)于是我们的目光可能会向编写一个专门打印日志信息的工具类转移,不过有人更近了一步,写出了一个日志框架供我们使用
(4)使用日志框架的好处显而易见,方便、自在、功能强大能够满足各种需求,不好的地方也是有的,比如:如果你也进行了试验你会发现,程序变慢了,需要一定的时间和精力作为学习的成本
(5)日志框架都是能控制什么哪?那我们需要打印的日志都能满足什么样的需求哪?通常我们希望一个日志框架能够灵活的做到以下三点:
5-1:能够控制日志信息想往哪里打就往哪里打,比如:控制台、文件、邮箱、数据库等等
5-2:能够控制日志信息想怎么打就怎么打,比如:我想要打印时间、程序的名称、程序的方法名、程序的行号、线程的名称等等
5-3:能够控制日志信息想打什么打什么,不想打的就不打,日志信息是分级别的,有时候我只想看错误的信息或者警告的信息,有时候我想看到所有的信息我想调试程序等等

1.log4j.properties的配置
复杂版本1,网上找的:

#priority  :debug<info<warn<error
#you cannot specify every priority with different file for log4j 
log4j.rootLogger=debug,stdout,info,debug,warn,error 

#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
#info log
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.info.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.info.File=./src/com/hp/log/info.log
log4j.appender.info.Append=true
log4j.appender.info.Threshold=INFO
log4j.appender.info.layout=org.apache.log4j.PatternLayout 
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#debug log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.debug.File=./src/com/hp/log/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.layout=org.apache.log4j.PatternLayout 
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#warn log
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.warn.File=./src/com/hp/log/warn.log
log4j.appender.warn.Append=true
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.layout=org.apache.log4j.PatternLayout 
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#error
log4j.logger.error=error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.error.File = ./src/com/hp/log/error.log 
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR 
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n

自己弄得版本2:

log4j.rootLogger=INFO,Console,File  
#\u5B9A\u4E49\u65E5\u5FD7\u8F93\u51FA\u76EE\u7684\u5730\u4E3A\u63A7\u5236\u53F0  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  

#\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55  
log4j.appender.File.File = logs/ssm.log  
#\u5B9A\u4E49\u6587\u4EF6\u6700\u5927\u5927\u5C0F  
log4j.appender.File.MaxFileSize = 10MB  
#\u8F93\u51FA\u6240\u4EE5\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7  
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

总结

总的来说,自己也花时间去理解框架,写了一些项目,尤其是个人写的项目,他们的框架都带有自己的个性,但是万变不离其宗,把框架的核心配置看懂事做什么的,就学习、写项目就快多了,以上是我对SSM的一个理解,不保证全对理解的,这个框架是我目前使用的一个框架,有错误尽管提,虚心接受,多多指教。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值