一、个人编写步奏,容易上手。分享一下,觉得实用的话可以收藏
1.创建maven项目选择模板
2.创建好后导入jar包
3.创建java、resources、webapp包 没有就创建
4.然后在resources包下创建applicationContent.xml
按照我给的applicationContext.xml文件的步奏写下去
需要什么去补什么
例如:
4.1 需要配置文件 然后去创建文件
<!-- 1.1 引入配置文件--> <context:property-placeholder location="classpath:jdbc.properties"/>
4.2 需要 com.yangyu.entity 包则去创建包
需要 mybatis-config.xml 则去创建
需要 classpath:mapper/**.xml 则去创建mapper包和 **.xml文件 classpath指的是resources的路径
<!-- 1.3 sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 1.3.1 注入数据源--> <property name="dataSource" ref="dataSource"/> <!-- 1.3.2 配置类别名 mapper.xml文件 不必写实体类全路径--> <property name="typeAliasesPackage" value="com.yangyu.entity"/> <!-- 1.3.3 引入mybatis-config.xml 配置文件--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 1.3.3 注入mapper.xml文件--> <property name="mapperLocations" value="classpath:mapper/**.xml"/> </bean> 4.3 等等等等...... 4.4 是不是觉得很简单 只需要记住applicationContext.xml的配置步奏 就差不多把这个项目搭建完了 5.配置web.xml 6.需要什么补齐什么,就差不多完了
二、实现
1.jar包导入 配置pom.xml
<properties> <!-- 控制spring的版本--> <spring.version>5.1.8.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- Spring --> <!-- 1)包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- 2)这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- 3)这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- 4) 这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- 5) 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- 6)Spring web 包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- 7)包含SpringMVC框架相关的所有类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- 8)Spring test 对JUNIT等测试框架的简单封装 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!-- DAO: MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.1</version> </dependency> <!-- Mysql 数据库 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- jdbc连接池 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.4</version> </dependency> <!--servlet-api 使用HttpServletRequest等对象--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <!--jstl--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- json解析 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> </dependency> <!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <!-- 日志文件 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies>
2.创建相对应的目录
2.1 在src/main下主要有以下几个文件夹
2.1.1 java用来存放java代码
2.1.2 resources 用来存放配置文件
2.1.3 webapp 用来存放jsp/html页面 和 静态文件(也可以放在resources下,路径配置不同,个人习惯放在webapp下),
里面还有个很重要的文件web.xml 项目启动就会运行该文件,在里面配置applicationContext.xml才可以在项目启动的时候加载
2.2 java 存放java代码
2.2.1 com.yangyu.entity 存放实体类 也就是和数据库字段对应的类 用于操作数据库
2.2.2 com.yangyu.dao 存放dao接口 放置操作数据库的方法 在mapper.xml中实现(后面有讲解)
2.2.3 com.yangyu.service 存放service接口 主要用来做一些事务处理
2.2.4 com.yangyu.service.impl 自然是实现service的方法啦
2.2.5 com.yangyu.controller http请求处理,访问网站会进入这里
2.2.6 com.yangyu.interceptors 用来处理拦截器拦截后的操作
包名:
entity:存放实体类 也就是和数据库字段对应的类 javaBean
dao:
@Repository 持久层组件,用于标注数据访问组件,即DAO组件
service: 存放service接口 主要用来做一些事务处理(简单配置不做事务,操作数据才做事务处理)
service.impl
@Service 标识该层为业务逻辑层
controller:
@Controller 标记该类是一个SpringMvc Controller对象
@RequestMapping注解的方法是处理请求的处理器。 可以简单的理解为是访问地址的配置
interceptors :
extends HandlerInterceptorAdapter 拦截器需要基础的类
preHandle() 方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用。
简单实现一下,相关的还有postHandle afterCompletion,有意的可以去找度娘
2.3 resources 用来存放配置文件
2.3.1 mapper包:存放mapper.xml文件 操作数据库
2.3.2 applicationContext.xml:配置全局属性,项目启动时就需去加载
2.3.3 jdbc.properties: 存放连接数据库的属性
2.3.4 logback.xml: 日志文件(随便配置一下,需要详细说明的话,评论区留言,内容有点多)
2.3.5 mybatis-config.xml:mybatis全局属性配置(有需要就配啦,看情况来)
mapper.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.yangyu.dao.UserMapper">
<!--由于在applicationContext.xml中配置了typeAliasesPackage 所以 resultType不需要写全路径-->
<select id="queryUserAll" resultType="User"> select * from user </select> </mapper>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- DAO--> <!-- 1.1 引入配置文件--> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 1.2 配置datasource--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 1.2.1 配置数据库连接属性--> <property name="driverClass" value="${jdbc_driver}"/> <property name="jdbcUrl" value="${jdbc_url}"/> <property name="user" value="${jdbc_user}"/> <property name="password" value="${jdbc_password}"/> <!-- 1.2.2 配置c3p0私有属性--> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!-- 关闭连接后不自动commit --> <property name="autoCommitOnClose" value="false"/> <!-- 获取连接超时时间 --> <property name="checkoutTimeout" value="10000"/> <!-- 当获取连接失败重试次数 --> <property name="acquireRetryAttempts" value="5"/> <!-- 每30秒检查一次空闲连接,加快释放连接。--> <property name="idleConnectionTestPeriod" value="30"/> </bean> <!-- 1.3 sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 1.3.1 注入数据源--> <property name="dataSource" ref="dataSource"/> <!-- 1.3.2 配置类别名 mapper.xml文件 不必写实体类全路径--> <property name="typeAliasesPackage" value="com.yangyu.entity"/> <!-- 1.3.3 引入mybatis-config.xml 配置文件--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 1.3.3 注入mapper.xml文件--> <property name="mapperLocations" value="classpath:mapper/**.xml"/> </bean> <!-- 1.4 配置Dao接口和mapper.xml的关系--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 1.4.1指定Dao接口--> <property name="basePackage" value="com.yangyu.dao"/> <!-- 1.4.2注入sqlSessionFactory--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <!-- Service--> <!-- 2.1 注解扫描--> <context:component-scan base-package="com.yangyu.service"/> <!-- 2.2 事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 2.3 注解式事务管理--> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- Controller--> <!-- 3.1 注解扫描--> <context:component-scan base-package="com.yangyu.controller"/> <!-- 3.2 静态资源引入--> <mvc:resources mapping="/statics/**" location="/statics/"/> <!-- 3.3 自动装载--> <mvc:annotation-driven/> <mvc:default-servlet-handler/> <!-- 3.4 视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 3.5 文件上传管理器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <!-- 1024 * 1024 * 20 = 20M --> <property name="maxUploadSize" value="20971520"></property> <property name="maxInMemorySize" value="20971520"></property> </bean> <!-- 3.6 拦截器(不做这方面的讲解)--> <mvc:interceptors> <mvc:interceptor> <!-- 3.6.1拦截的路径--> <mvc:mapping path="/user/**"/> <!-- 3.6.2不需要拦截的内容,直接通过 个人随意写的,让你们了解一下--> <mvc:exclude-mapping path="/user/asd" /> <!-- 3.6.3拦截后给什么类去处理 class:类的全路径--> <bean class="com.yangyu.interceptors.UserInterceptors"/> </mvc:interceptor> </mvc:interceptors> </beans>
jdbc.properties
jdbc_driver=com.mysql.jdbc.Driver jdbc_url=jdbc:mysql://127.0.0.1:3306/demo jdbc_user=root jdbc_password=root
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 定义参数常量 --> <!-- TRACE<DEBUG<INFO<WARN<ERROR --> <!-- logger.trace("msg") logger.debug... --> <property name="log.level" value="debug" /> <property name="log.maxHistory" value="30" /> <!-- 日志存放位置--> <property name="log.filePath" value="D:/logs/"/> <property name="log.pattern" value="%d{MM-dd-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /> <!-- 控制台输出日志格式 --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!-- DEBUG --> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/debug.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- INFO --> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- ERROR --> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${log.filePath}/erorr.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!-- 文件最大保存历史数量 --> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="com.yangyu.o2o" level="${log.level}" additivity="true"> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="errorAppender"/> </logger> <root level="info"> <appender-ref ref="consoleAppender"/> </root> </configuration>
mybatis-config.xml
<?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"> <configuration> <settings> <!-- 获取自增主键 当进行数据插入时可以通过在mapper.xml的insert方法中设置 useGeneratedKeys="true",在数据插入成功,传入的对象会自动获取自增ID值--> <setting name="useGeneratedKeys" value="true"/> <!-- 驼峰命名 列 数据库字段user_id 对应 实体类属性userId--> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 列标签替换别名--> <setting name="useColumnLabel" value="true"/> </settings> </configuration>
2.3 webapp 放静态文件
2.3.1 statics 下存放的就是一些css/js文件啦
2.3.2 WEB-INF 存放页面啦 由于放置在WEB-INF里不能直接访问 所以要配置视图解析(applicationContext.xml 已经配置)
web.xml
可以用来配置字符编码过滤器
也可以用来配置Kaptcha图片验证码(在网上找到不合心就可以用这个哦,自己配置属性,这里不做介绍 ?乛?乛?)
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>Archetype Created Web Application</display-name> <!-- 字符编码过滤器--> <filter> <filter-name>characterEncodingFilter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
<filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<!-- 拦截匹配的请求,Servlet拦截匹配规则要自己定义(“/”代表所有请求),把拦截下来的请求分发到目标Controller(需要把applicationContext.xml配置进来否则没有效果) -->
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
</web-app>
userdata.jsp
使用EL表达式 需要配置page指令(也可以在web.xml中配置全局的就不用每个jsp文件都配置一遍啦) isELIgnored="false"使用标签库需要配置 taglib指令 prefix声明前缀(可以任意声明) 通过该声明去调用标签库 uri 指定要引入的标签库
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <table> <rt> <td>姓名</td> <td>年龄</td> <td>性别</td> </rt> <c:forEach items="${userList}" var="user"> <tr> <rd>${user.name}</rd> <rd>${user.age}</rd> <rd>${user.sex}</rd> </tr> </c:forEach> </table> </body> </html>
使用的是mysql
最后配置tomcat 就可以启动项目了
结果如下:
1.先被拦截才访问的controller
(洋洋 花花 海洋 的输出是在UserController中定义的 )
2.游览器展示效果
原文地址:https://www.cnblogs.com/yangyufu/p/maven-ssm.html