项目搭建实操
项目文件结构:
整个项目分为三个层次:controller层、service层、mapper层,分别放在三个单独的文件夹中
除此之外还有pojo(Plain Old Java Object),也就是一般来说的对象,防止在pojo文件夹中
所有配置文件放在resource文件夹中
整体看起来的样子:

由于只是一个简单的demo,所以看起来并不复杂 ,开发中有需要的话还可以放置vo、util等文件夹。
然后分别展开:

resource文件夹:

可以看出,如果不使用注解的话,整个SpringMVC环境的搭建基本都是在围绕着配置配置文件的工作展开的,出错的几率非常高,使用起来非常的麻烦,这也是为什么人称 “配置地狱”了,也是因为这样才有后来的SpringBoot。
创建maven项目
添加依赖
- Spring-webmvc
- junit
- c3p0
- Mysql-java
- Servlet-api
- jsp-api
- mybatis
- Mybatis-spring
- aop
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lin</groupId>
<artifactId>PersonalPage</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- spring框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.5</version>
</dependency>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- 数据库连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- mysql-java数据库连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!-- servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!-- mybaitis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- spring整合mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!-- spring-aop编织-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
</dependencies>
</project>
过滤静态资源文件
在pom.xml文件的依赖后面加入,防止打包的时候静态资源文件不被识别
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
项目右击,添加web框架支持


在项目中多出的web文件加中找到WEB-INF/web.xml文件

配置web.xml
未配置的样子:
<?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_4_0.xsd"
version="4.0">
</web-app>
配置DispatcherServlet
每一个请求都会从这个Servlet经过,然后进行匹配处理,最终找到对应的controller分发出去。
<!-- 配置DispatcherServlet 每个请求都要从这里经过,再分发出去-->
<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:ApplicationContext.xml</param-value>
</init-param>
<!--将加载顺序设置为最先加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--路径为/,表示所有servlet请求都会从这里经过-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注意:不要讲路径/误写为/*,会导致出错
/会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
/ *会匹配所有url:路径型的和后缀型的url(包括/login,.jsp,.js和.html)等
配置CharacterEncodingFilter
<!-- 配置字符过滤处理器,处理关于乱码的问题(spring自带Filter)-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
配置好的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<?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_4_0.xsd"
version="4.0">
<!-- 配置DispatcherServlet 每个请求都要从这里经过,再分发出去-->
<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:ApplicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置字符过滤处理器,处理关于乱码的问题(spring自带Filter)-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置ApplicationContext.xml文件
在src/main/resource文件夹下创建ApplicationContext.xml文件。resource文件主要用于存放一些静态资源(如,图片、jsp等) 和配置文件。
未配置的ApplicationContext.xml
可以用来注册bean,主要用于汇总其他配置文件。
其他配置文件最终都会导入这个文件中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
创建数据库
先登陆自己的数据库,然后创建自己需要的数据库。
数据库中按照自己的需要去创建表
CREATE DATABASE personalPage;
IntelliJ Idea连接数据库

选择自己的数据库类型

输入配置信息,输入完成后复制下面的URL,点击Apply 然后 OK

连接成功,因为暂时还没有数据,所以没有显示太多东西

配置database.properties文件
同样在resource文件夹下创建database.properties文件.
用于放置连接数据库所必须的配置信息。
基本配置总共四种:
-
Driver:驱动
-
url:数据库地址 就是刚刚连接数据库时候复制的URL
后面需要拼接一些参数:
useSSL=false 不使用安全连接
useUnicode=true 使用unicode编码
characterEncoding=utf8 字符编码使用utf-8
-
Username:登陆数据库的用户名
-
password:登陆数据库的密码
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/personalPage?useSSl=false&useUnicode=true&characterEncoding=utf8;
jdbc.username=root
jdbc.password=199803040.0
配置spring-dao.xml文件
在resource下创建spring-dao.xml文件
未配置的spring-dao.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"
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">
</beans>
在这个配置文件中,我们主要需要做一下几点事情:
- 关联数据库文件
- 配置数据库连接池,我们选择使用c3p0,还可以使用druid等
- 注册SqlSessionFactoy对象
- 配置自动扫瞄dao层对象
下面我们来逐一实现
- 关联数据库文件,就是刚刚的database.properties配置文件
<context:property-placeholder location="database.properties"/>
- 配置c3p0数据库连接池
<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}"/>
<!--设置连接池的最大最小限制-->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!--设置是否关闭时自动提交事务-->
<property name="autoCommitOnClose" value="false"/>
<!--设置超时-->
<property name="checkoutTimeout" value="10000"/>
<!--重新尝试连接的次数-->
<property name="acquireRetryAttempts" value="3"/>
</bean>
- 注册SqlSessionFactory对象
获取sqlSessionFactory对象通常是构造SqlSession对象的重要一步,而Sqlsession又是使用Mybatis最重要的对象。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--将刚才配置的数据源注入进来-->
<property name="dataSource" ref="dataSource"/>
<!--标明相关配置文件的位置-->
<property name="configLocation" value="classpath:mybatis-config"/>
</bean>
配置mybatis-config.xml文件
在resource文件夹下创建mybatis-config.xml文件,主要用于配置mybaitis
未配置的文件:
<?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>
</configuration>
这个文件中要做两件事情
- 将mapper文件注册进来
- 配置需要的日志、别名等设置
在没有和spring整合之前,mybatis所有配置都需要在这个文件中进行,基本上写的是满满当当,和spring整合之后,由于注解等开发方式的介入,极大程度的减轻了配置文件的内容!
OK!我们现在还没有Mapper文件,那么我们需要去完善一下数据库和实体类!
创建数据表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username` varchar(30) NOT NULL,
`id` int NOT NULL,
`password` varchar(30) NOT NULL,
`age` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
SET FOREIGN_KEY_CHECKS = 1;
插入数据
INSERT INTO `personalPage`.`user` (`username`, `id`, `password`, `age`) VALUES ('小明', 1, 'woshixm', 23);
INSERT INTO `personalPage`.`user` (`username`, `id`, `password`, `age`) VALUES ('小红', 2, 'woshixh', 18);
INSERT INTO `personalPage`.`user` (`username`, `id`, `password`, `age`) VALUES ('小亮', 3, 'woshixl', 20);
INSERT INTO `personalPage`.`user` (`username`, `id`, `password`, `age`) VALUES ('小白', 4, 'woshixb', 18);
修改id为自增
ALTER TABLE user CHANGE id id INT( 10 ) NOT NULL AUTO_INCREMENT;
在src/main/java路径下创建文件夹com.** 这里的 ** 随便起,然后在其下创建结构如下的目录

controller主要负责程序逻辑的控制,
service和mapper主要负责业务和数据的处理
pojo主要放置实体类。
创建实体类
在pojo文件夹中创建User实体类,注意属性字段和数据库中的字段名一一对应
package com.lin.pojo;
public class User {
private int id ;
private int age;
private String username;
private String password;
public User() {
}
public User(int id, int age, String username, String password) {
this.id = id;
this.age = age;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", age=" + age +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
创建mapper层
在mapper文件夹中创建接口 UserMapper
package com.lin.mapper;
import com.lin.pojo.User;
import java.util.List;
public interface UserMapper {
//增加一个用户
int addUser(User user);
//通过id删除一个用户
int deleteUserById(int id);
//修改用户信息
int updateUser(User user);
//通过id查询一个用户
User queryUserById(int id);
//查询所有用户
List<User> queryAllUser();
}
在mapper文件夹中创建UserMapper.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接口
<?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.lin.mapper.UserMapper">
<insert id="addUser" parameterType="com.lin.pojo.User">
insert into personalPage.user (username, id, password, age)
VALUES (#{username},#{id},#{password},#{age})
</insert>
<delete id="deleteUserById" parameterType="int" >
delete from personalPage.user
where id = #{id}
</delete>
<update id="updateUserById" parameterType="com.lin.pojo.User">
update personalPage.user
set username = #{username},
age = #{age},
password = #{password}
where id = #{id};
</update>
<select id="queryUserById" resultType="com.lin.pojo.User">
select * from personalPage.user
where id = #{id};
</select>
<select id="queryAllUser" resultType="com.lin.pojo.User">
select * from personalPage.user;
</select>
</mapper>
然后我们返回去将这个mapper.xml文件注册进 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>
<mappers>
<mapper class="com.lin.mapper.UserMapper"/>
</mappers>
</configuration>
再将spring-dao.xml文件完善,加入自动扫描mapper的配置
将下面的bean加入spring-dao.xml文件
<!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.lin.mapper"/>
</bean>
创建service层
在service文件夹下创建UserService接口和UserServiceImpl.java
分别编写接口和实现类如下:
package com.lin.service;
import com.lin.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserService {
//增加一个用户
int addUser(User user);
//通过id删除一个用户
int deleteUserById(@Param("id") int id);
//修改用户信息
int updateUser(User user);
//通过id查询一个用户
User queryUserById(@Param("id") int id);
//查询所有用户
List<User> queryAllUser();
}
package com.lin.service;
import com.lin.mapper.UserMapper;
import com.lin.pojo.User;
import java.util.List;
public class UserServiceImpl implements UserService{
UserMapper userMapper;
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public int addUser(User user) {
return userMapper.addUser(user);
}
public int deleteUserById(int id) {
return userMapper.deleteUserById(id);
}
public int updateUser(User user) {
return userMapper.updateUser(user);
}
public User queryUserById(int id) {
return queryUserById(id);
}
public List<User> queryAllUser() {
return userMapper.queryAllUser();
}
}
配置spring-service.xml文件
在resource文件夹下创建spring-service.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
主要需要配置的功能有:
- 自动扫描service包,将其中的组建注册到容器中
- 将需要注册的业务注册到spring中,可以通过xml也可以通过注解
- 声明事务
- 通过AOP切入事务的支持
-
自动扫描service包
<context:component-scan base-package="com.lin.service"/>
-
将UserServiceImpl注册到Spring中进行托管
<bean id="bookServiceImpl" class="com.lin.service.UserServiceImpl"> <property name="userMapper" ref="userMapper"/> </bean>
-
声明事务
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
-
AOP实现事务支持
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="txPointCut" expression="execution(* com.lin.mapper.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/> </aop:config>
配置springmvc-servlet.xml文件
最后 我们需要为整个项目配置springmvc-servlet.xml文件,保证整个项目在运行过程中,可以按照springmvc设计的流程正常运转
同样,我们将此文件创建在resource文件夹下
未配置的pringmvc-servlet文件
<?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-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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
</beans>
我们需要做的事情有:
- 自动扫描controller,将其进行注册
- 实现静态资源的过滤
- 实现视图解析器
- 实现servlet映射和适配
我们开始吧:
- 配置自动扫描目录
<context:component-scan base-package="com.lin.controller"/>
- 实现静态资源过滤
<mvc:default-servlet-handler/>
- 实现servlet映射和适配
<mvc:annotation-driven/>
- 实现servlet映射和适配
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
最后把spring-dao、spring-service、springmvc-servlet三个配置全部导入ApplicationContext.xml文件中
```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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="classpath:spring-dao.xml" />
<import resource="classpath:spring-service.xml" />
<import resource="classpath:springmvc-servlet.xml" />
</beans>
创建controller层
package com.lin.controller;
import com.lin.pojo.User;
import com.lin.service.UserServiceImpl;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("user")
public class UserController {
UserServiceImpl userService;
@RequestMapping("/getUser")
public String getUserById(int id, Model model){
User user = userService.queryUserById(id);
model.addAttribute("user",user);
return "userInfo";
}
}
设置jsp页面
设置默认页面index.jsp,输入id进行查询一个用户
<%--
Created by IntelliJ IDEA.
User: liushanlin
Date: 2021/6/27
Time: 1:17 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/getUser" name="id" method="post">
<span><input type="text"/></span>
<input type="submit" value="查询">
</form>
</body>
</html>
设置查询结果页面 userInfo.jsp
<%--
Created by IntelliJ IDEA.
User: liushanlin
Date: 2021/6/27
Time: 4:56 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>${user.id}</h1>
<h1>${user.username}</h1>
<h1>${user.age}</h1>
<h1>${user.password}</h1>
</body>
</html>
配置Tomcat服务器

将maven依赖中的包添加到artifact中对应的文件夹下
配置context
在file–>project structure ---->module里面点击项目
可以看到配置文件的context设置
测试
service-dao层测试
首先测试业务层查询逻辑
建立在test/java文件夹下建立test类
import com.lin.pojo.User;
import com.lin.service.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserServiceImpl userServiceImpl = context.getBean("userServiceImpl", UserServiceImpl.class);
User user = userServiceImpl.queryUserById(2);
System.out.println(user);
}
}
控制台输出:
User{id=2, age=18, username=‘小红’, password=‘woshixh’}
Process finished with exit code 0
整体测试
启动Tomcat 在浏览器中方案http://localhost:8080/

不出意外应该得到上图所示的结果,输入查询的用户编号,点击查询


得到查询结果。
整个项目的前端页面只是为了验证项目的逻辑和环境的搭建是否成果,没有添加其他样式,看起来非常美观,但只要逻辑跑的通,前端的样式慢慢调整成自己喜欢的样子就好了!
BUG:
tx命名空间爆红
解决:其中tx命名空间爆红是因为缺少maven依赖,导入后恢复正常
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.5</version>
</dependency>
org.springframeworl.jdbc.dataSource.DataSourceTranssactionManager不会提示,但直接全限定名输入,也不会报错。
太坑了!我一直以为自己哪里做的不对,反复检查对比!太坑爹了!
找不到CharacterEncodingFilter
java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
解决方法:maven reload 然后吧包重新添加到项目的artifact的lib里面
找不到applicationContext.xml /接口无效绑定
IOException parsing XML document from class path resource [ApplicationContext.xml];
!!!
解决方案!
之前在项目中创建了一个子模块,然后项目的自动升级为父模块,项目的pom.xml文件中自动多了一行
《packaging》pom《/packaging》
pom ---------> 父类型都为pom类型
jar ---------> 内部调用或者是作服务使用
war ---------> 需要部署的项目
打包为pom没有代码需要编译,也没有资源需要处理!
也就是说!
打包的文件里面没有xml,properties等配置文件!
当调用mapper查询数据的时候,接口找不到绑定的mapper.xml文件!
就会报错:绑定未生效!坑!!!!!!!