一、什么是SSM框架?
SSM(Spring+SpringMVC+MyBatis) 框架集由Spring、SpringMVC、MyBatis
三个开源框架整合而成,常作为数据源较简单的web项目的框架。
其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它可以装载bean(也就是我们java中的类,当然也包括service dao里面的),有了这个我们就不用去new来创建对象。
SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制,相当于controller(等价于传统的servlet和struts的action),也就是说可以拦截网站上的请求,调用controller层中相应的方法去处理这个请求,比如说提交一张表单,springMVC就会拦截这个请求,并调用该相应方法去处理(对表单数据的增删查改),然后返回到相应页面或者是返回客户数据。
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架,也就是来管理sql,与数据库打交道的。
二、构建一个SSM项目
(一)环境搭建:Maven项目集成工具
1.用户名/.m2/repository
maven的数据仓库,并添加到环境变量
-
下载maven安装(我的配置是:maven3.6.0)
-
仓库默认地址:
-
进入maven-3.6.0 修改setting文件
找到注释掉的<localRepository>
标签,复制最下面一句,添加你自己的仓库地址;
同理找到<mirror>
标签,添加阿里云镜像,后面用起来速度优势。<mirrors> <mirror> <id>nexus-aliyun</id> <name>nexus-aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror>
2.eclipse-window-preference-maven-installation
-新增自己的maven文件夹地址
3.eclipse-window-preference-maven-user settings
修改地址为自己maven包的conf/settings.xml
(二)创建SpingMVC项目
1.创建maven项目
eclipse-new project-maven project
新建一个maven-artchetype-webapp
tips:有个快捷创建的方式,千万不要选,快捷方式创建不会给你新建src目录,很麻烦的!
添加:ArtifactID为项目名称,GroupID是包命名格式
创建完成会有一个报错,是因为没配置运行环境tomcat,目录如下:(只有src/main/reource目录)
2.eclipse配置tomcat(略过,百度教程)
3.自己的工程的buildpath
添加 server runtime-tomcat
(我的配置是 tomcat9.0)
配置完成,报错解决,并给你自动增加了src/main/resouces和src/test/java,详细目录如下:(是否需要手动添加src/test/resource,我这里暂时未添加)
4. 修改默认2.3的web版本为3.1
打开项目地址 D:\myworkspace\EclipseJeeWorkspace\SpingMVC01.settings 下的org.eclipse.wst.common.project.facet.core.xml
文件
-
修改默认2.3的web版本为3.1
<installed facet="jst.web" version="3.1"/>
-
刷新maven项目-》右键,最好在更改完update project一下
原因:(我们后面配置得web项目版本基于3.1)
5. pom.xml中加入依赖的第三方包的配置(自动引入jar包)
默认pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wang.spingmvc</groupId>
<artifactId>SpingMVC01</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpingMVC01 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>SpingMVC01</finalName>
</build>
</project>
pom.xml补充后:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wang.spingmvc</groupId>
<artifactId>SpingMVC01</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpingMVC01 Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>SpingMVC01</finalName>
</build>
</project-->
<properties>
<!-- Spring版本号 -->
<spring.version>5.1.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring相关包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- AOP相关包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.0</version>
</dependency>
<!-- MyBatis相关包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!-- MySQL相关包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.20</version>
</dependency>
<!-- Spring集成MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<!-- JSP标准标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志相关包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
<!-- 单元测试相关包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>SpingMVC01</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
在运行包时,会自动下载jar包,这一点就是框架的好处:
6.修改web.xml:(这里是项目配置,浏览器url的配置)
web.xml:(系统启动时就会调用的配置)
第一种配置方法:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 配置SpringMVC -->
<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:config/spring-mvc.xml</param-value><!-- 我的config/spring-mvc.xml在resource下 -->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern><!-- java进行/../*.do操作时的url -->
</servlet-mapping>
</web-app>
<!--原本
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
-->
第二种配置方法:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" metadata-complete="true">
<display-name>Archetype Created Web Application</display-name>
<!-- 配置SpringMVC -->
<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:config/spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
<!--原本
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
-->
(三)配置SpringMVC
1、在src/main/resources
目录下创建/config/spring-mvc.xml
目录及文件:
spring-mvc.xml:(项目资源路径配置:声明controller包目录、jsp文件目录)
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 启用注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置SpringMVC -->
<!-- 自动扫描该包(路径要为小写),使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.cungudafa.spingmvc01.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- JSP视图 -->
<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- controller中return时会自动加上前缀和后缀,变成一个完整的url -->
<property name="prefix" value="/WEB-INF/"></property><!--/WEB-INF/后面调用的jsp和js等都放在这个目录下-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
2、自定义Controller
- 在Java Resources->src/main/java->创建Package组包
com.cungudafa.spingmvc01
(小写路径,不然配置中识别不到大写路径)->新建controller类
UserInfoController.java:
package com.cungudafa.spingmvc01.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/*
* 一个控制器
* @author Administrator
*
*/
@Controller
@RequestMapping("/user")
public class UserInfoController {
@RequestMapping(value="/index.do")
public String userIndex(String uname,String upwd){
System.out.println("添加操作的业务逻辑:"+uname+" "+upwd);
return "success";
}
}
- 注意前面配置的sping-mvc.xml中:对应路径
3、在webapp\WEB-INF(取决于sping-mvc.xml你配置的目录)下创建sucess.jsp
修改jsp代码:
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user/index.do" method="get">
<input type="text" name="uname"/><br/>
<input type="text" name="upwd"/><br/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
success.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
success
</body>
</html>
4、输入运行结果:
- 浏览器输入:
http://localhost:8080/SpingMVC01/index.jsp
- 点击添加
这里请求值传过去了,注意路径变化为(
SpingMVC01/user/index
),条件为uname=1&upwd=1
;后面我们可以根据这个条件,然后展现不同的内容,实现按请求分配业务、再展现数据。
例:(当然在后面Controller.java层学习中会讲到,这里仅做个备注)
- 浏览器输入:
http://localhost:8080/SpingMVC01/user/index.do
控制台打印出:
- 我的目的是:点击登录直接跳转,或者和数据库匹配了再跳转!
- index的form里直接添加:user/index.do,效果:
end!
附:
源码下载地址:https://download.csdn.net/download/cungudafa/11184230
参考资料:
https://blog.csdn.net/qq_33236248/article/details/80095397
https://blog.csdn.net/donggua3694857/article/details/51874011