文章目录
SSM项目开发基于XML步骤(使用maven)
前提,已经设计好了数据库表以及业务逻辑
1、引入jar包
引入Spring、SpringMVC、MyBatis、Spring与MyBatis的整合、数据库驱动、Servlet、数据库连接池、Junit等。此处主要根据自己业务需求导入jar包
2、创建Maven工程
可以基于webapp模板快速创建maven工程
主要项目结构:
3、配置web.xml文件
3、1 配置CharacterEncodingFilter过滤器,主要是为了解决中文乱码问题
<!--配置乱码过滤-->
<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>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、2 配置ContextLoaderListener,加载Spring
<!--配置Spring的监听器,加载Spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
3、3 配置SpringMVC的核心控制器DispatcherServlet
<!--配置SpringMVC的核心控制器 DispatcherServlet-->
<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:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--拦截设置-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--此处也可以配置成*.do这种模式-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--defaultServlet来处理静态文件 根据需求自行配置-->
<!--<servlet-mapping>-->
<!-- <servlet-name>default</servlet-name>-->
<!-- <url-pattern>/static/*</url-pattern>-->
<!--</servlet-mapping>-->
<!--配置session时间-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4、创建包结构与对应的pojo(实体类)、接口、实现类等
创建对应的controller、service、dao(mapper)、pojo、utils等【此处为了方便,只定义简单的方法、类等,请根据需求自定义包结构】
4、1 创建学生实体类【此处借用lombok开发】
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
private String sex;
}
4、2 创建dao层【StudentDao】
package com.ali.dao;
import com.ali.pojo.Student;
import java.util.List;
public interface StudentDao {
//添加学生
int addStudent(Student student);
//查询学生
List<Student> getAll();
}
4、3 根据业务逻辑创建service接口层以及实现类
①接口:
public interface StudentService {
//添加学生
int addStudent(Student student);
//查询所有学生
List<Student> getAll();
}
②实现类:
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentDao studentDao;
@Override
public int addStudent(Student student) {
return studentDao.addStudent(student);
}
@Override
public List<Student> getAll() {
return studentDao.getAll();
}
}
5、在resources下创建对应的配置文件并配置
5、1 创建MyBatis的mapper映射文件(StudentDao.xml)【根据StudentDao】
<?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.ali.dao.StudentDao">
<insert id="addStudent">
insert into tbl_student values(#{id},#{name},#{age},#{sex});
</insert>
<select id="getAll" resultType="Student">
select id,name,age,sex from tbl_student;
</select>
</mapper>
5、2 创建MyBatis的配置文件(mybatis-confi.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="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<package name="com.ali.pojo"/>
</typeAliases>
<!--<mappers>-->
<!-- <package name="com.ali.dao.StudentDao"/>-->
<!--</mappers>-->
</configuration>
5、2 创建SpringMVC对应的配置文件:spring-mvc.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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置组件扫描-->
<context:component-scan base-package="com.ali.controller"/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置注解驱动-->
<mvc:annotation-driven/>
</beans>
5、3 创建jdbc.properties配置文件,配置与数据库相关的信息
此处以MySQL8为例:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=true&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123
5、4 配置Spring的核心配置文件applicationContext.xml
配置组件扫描(service层)、创建数据源(此处引入外部jdbc.properties)、创建SqlSessionFactory对象
配置dao的扫描包等,还可以根据自己的业务需求配置事务等一系列操作。
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--1、加载properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--2、配置组件扫描-->
<context:component-scan base-package="com.ali.service"/>
<!--3、创建数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--4、创建SqlSessionFactory对象-->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--5、配置dao接口扫描包,动态的实现Dao接口可以注入到Spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="factory"/>
<!--要扫描的dao包-->
<property name="basePackage" value="com.ali.dao"/>
</bean>
<!--6、事务配置-->
</beans>
6、创建显示页面等(此处以jsp为例)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/student/toAdd">添加学生</a>
<a href="${pageContext.request.contextPath}/student/getAll">查询学生</a>
</body>
</html>
此处以超链接实现页面跳转,完成从客户端向服务端发起请求。
7、编写controller层,实现具体业务逻辑
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
//跳转到添加页面
@RequestMapping("/toAdd")
public String toAddStudent(){
return "add";
}
//添加学生
@RequestMapping("/add")
public String addStudent(Student student){
System.out.println("student=>>>>:"+student);
studentService.addStudent(student);
// return "test";
return "success";
}
@RequestMapping("/getAll")
public String getAll(HttpSession session){
List<Student> list = studentService.getAll();
session.setAttribute("list",list);
return "allStu";
}
}
8、编写需要跳转的页面以及展示数据的逻辑
8、1 add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/student/add" method="post">
id:<input type="text" name="id"><br/>
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
性别:<input type="text" name="sex"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
8、2 allStu.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:forEach items="${list}" var="student">
<tr>
<td>${student.name}</td><br/>
</tr>
</c:forEach>
</body>
</html>
8、3 success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>添加成功....</h2>
<a href="${pageContext.request.contextPath}/student/getAll">点击查询所有</a>
</body>
</html>
注意点:
①项目所有的配置文件名称并不是固定的,此处只是以主流名称为例
②该项目,只是完成了最最基本的几个操作,目的是为了了解SSM项目开发步骤,大家可以根据自己业务需求对页面进行渲染以及逻辑增强
③web.xml的工作:1、启动Spring容器;2、DispatcherServlet的声明;3、session过期,字符串编码等
④web.xml启动Spring容器的加载过程:
A、容器(tomcat、JBoss等服务器)启动后,会先去读取<context-param>、<listener>这两个节点;
【<context-param>】:<context-param>是web应用的资源配置,是web应用的上下文参数,数据库连接方式,Spring的配置文件路径(applicationContext.xml)等,这些键值对都会加入到servletContext对象。
【<listener>】:<listener>可以获取当前servletContext对象,在web应用启动前操作,获取context-param值,进而获取资源,listener中的ContextLoaderListener监听器的作用就是启动Web容器时,监听servletContext对象的变化,获取servletContext对象的<context-param>,从而自动装配ApplicationContext的配置信息。
<!--配置Spring的监听器,加载Spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
B、DispatcherServlet的声明 DispatcherServlet是前端控制器设置模式的实现,提供Spring Web MVC的集中访问点【类似于中转站,把前端的请求分发到目标controller】主要职责:
1)文件上传解析
2)通过HandlerMapping,将请求映射到处理器
3)通过HandlerAdapter支持多种类型的处理
4)通过ViewResolver解析逻辑视图名到具体视图的实现
5)本地化解析
6)渲染具体视图
7)执行过程中的异常交由HandlerExeceptionResolver来解析等
<!--配置SpringMVC的核心控制器 DispatcherServlet-->
<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:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--拦截设置-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--此处也可以配置成*.do这种模式-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--defaultServlet来处理静态文件 根据需求自行配置-->
<!--<servlet-mapping>-->
<!-- <servlet-name>default</servlet-name>-->
<!-- <url-pattern>/static/*</url-pattern>-->
<!--</servlet-mapping>-->
详情见:
深入讲解web.xml的配置