##环境搭建
1、开发环境搭建
jdk8、tomcat8、eclipse-mars
2、项目环境搭建
创建项目、添加jar包依赖(spring核心包、springMVC包、mybatis包、数据库驱动包、连接池包、Apache包、commons包、log4j、语法包jstl等)
2.1 maven添加依赖(搭建仓库、引入依赖地址pom.xml中配置)
2.2手动添加本地jar包
##SSM整合基础配置
SSM单独开发的时候:单独使用Spring 需要applicationContext.xml;单独使用springMVC时要配置springMVC.xml;单独使用mybatis需要配置mybatis.xml;
所以整合的时候我们还是需要这三个配置文件。
创建配置文件:applicationContext.xml、springMVC.xml、mybatis.xml,配置文件的头部,约束和命名空间。如果是第一次配置,每一个配置文件的官方文档中都有配置好的,下载就行。(下附)
附applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 配置数据源:spring容器装配bean -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 5.+找对应的驱动包,8+可以使用专门的驱动包 -->
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- 后面是附属的约束条件,由于环境问题可能需要;
连接协议:数据库类型://主机地址:端口号/数据名字?约束条件 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/shop" />
<property name="user" value="root" />
<property name="password" value="123456" />
</bean>
<!-- 配置sql对话 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!-- 指定扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.eikken.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<bean id="categoryService" class="com.eikken.service.CategoryService"></bean>
</beans>
附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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>
</beans>
附mybatis.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>
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
ssm框架中
spring的作用是:通过注解产生一个对象,是一种粘合剂,起到对其他框架以及类的管理和粘合:对象的管理、事物的管理等以及一些其他的开发模式。主要思想:注解、反射、面向切面编程。
springMVC的作用是:基于Servlet的,代替Servlet进行前后端的交互,MVC模式进行控制。
mybatis:主要是数据库操作,动态sql语句,二级缓存等。
##在web.xml中进行配置,配置springMVC和applicationContext.xml。
附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>GouWu</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- 加载spring容器 其实就是加载spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置spring的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载springMVC -->
<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:springMVC.xml</param-value>
</init-param>
</servlet>
<!-- url是网络访问路径,上下两个servlet-name必须一致 -->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- 配置filter过滤器,处理中文乱码问题。 -->
<!-- servlet和filter关系:就是两层关卡,配置一样 -->
<filter>
<filter-name>characterFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
## 访问
##访问界面
把jsp文件放在了webContent下面的web-INF下的jsp文件夹中,其他的静态资源文件放在webContent下。webContent文件夹下,除了给定的两个文件夹,其余都是开放的
### 访问界面
实现功能:一级目录和二级目录的展示。
1、controller和请求路径匹配方法的创建:当界面被加载的时候,数据也得加载上,所以我们依然使用和界面同一个访问请求(不需要重新写一个controller和对应方法)
2、pojo类:和要使用的数据库表对应起来即可,如果有级联需要添加关联属性(直接用外键也可以)。
3、创建mapper的接口
public interface CategoryMapper {
//定义泛型
//创建和数据库对应的
public List<Category> selectAll();
}
4、创建自定义的结果集
<?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.eikken.mapper.CategoryMapper">
<!-- select * from category where cid=1 or 1=1;
-->
<!-- 自定义结果集 -->
<resultMap type="com.eikken.pojo.Category" id="findAllCategory">
<!-- id的标签使用来说明主键,column中填数据库表的字段名,property中填对应的pojo类属性 -->
<id column="cid" property="cId"></id>
<!-- result代表普通标签 -->
<result column="cname" property="cName"></result>
<collection property="list" ofType="com.eikken.pojo.CategorySecond">
<id column="csid" property="csId" />
<result column="csname" property="csName" />
<result column="cid" property="cId" />
</collection>
</resultMap>
<!-- 查询所有目录,返回查询结果集,结果集存在级联的问题
级联存在一对一,一对多,多对多等关系。
一对一:
一对多:collection
多对多:
-->
<select id="selectAll" resultMap="findAllCategory">
select category.*,categorysecond.* from category,categorysecond
where category.cid = categorysecond.cid
</select>
</mapper>
5、在applicationContext中配置mapper的扫描器(第一次的话),以后不用配。
6、service业务逻辑层的创建与编写
public class CategoryService {
@Autowired
public CategoryMapper categoryMapper;
/*
* 查询所有的目录
*/
public List<Category> selectAllCategory(){
//调用mapper中方法,获取数据库操作结果
List<Category> list=categoryMapper.selectAll();
if(list!=null&&list.size()>0){
return list;
}else{
return null;
}
}
}
7、在applicationContext中配置service的bean
8、回到controller中的方法里,向前端返回结果
可以用Model进行返回,也可以使用对话返回,还可以打包成json串,用response返回。
### 验证码的实现
使用验证码的目的是防止智能识别,就是确定是人工操作,不是机器人;
核心:随机的内容和一定程度的混淆
实现思路:
1、创建一个图片底片 2、生成随机内容 3、在图片上绘制内容 4、绘制混淆 5、输出图片