SpringMVC
SpringMVC
ssm : mybatis + Spring + SpringMVC MVC三层架构
JavaSE:
JavaWeb:
SSM框架: 研究官方文档,锻炼自学能力,笔记能力,项目能力
SpringMVC + Vue + SpringBoot + SpringCloud + Linux
SSM = javaWeb做项目
Spring:IOC 和 AOP
SpringMVC:SpringMVC的执行流程!!
SpringMVC:SSM框架整合!!
1、回顾MVC
MVC:模型(dao,service),视图(jsp),控制器(Servlet),是一种软件设计规范;是一种架构模式。
-
dao层:连接数据库
-
service层:执行具体业务(只管业务)
-
servlet层:转发,重定向( 接收前端数据(jsp/html),转交给service处理,接收service返回结果,控制前端界面)
最典型的MVC:JSP + service+ javabean 模式
2、回顾Servlet
- 创建项目,父工程
在父工程的pom.xml文件导入依赖
<!--导入依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
- 创建普通maven模块,右击点add framework support,勾选web,变成web项目

- 导入子模块pom.xml的依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
- 编写一个Servlet类,处理用户请求
MVC框架要做的事情:
-
将url 映射到java类或者java类的方法
-
封装用户提交的数据
-
处理请求-----调用相关业务处理------封装响应数据
-
将响应数据进行渲染.jsp/html 等表示层数据
常见服务器端MVC框架:Struts, SpringMVC....
前端三大MVC框架:vue ,angularjs, react
3、什么是SpringMVC
基于java实现MVC的轻量级的web框架。
特点:
-
轻量级,简单易学
-
高效,基于响应的MVC框架
-
与spring无缝结合
-
约定大于配置
-
功能强大:RESTful,数据校验,格式化,本地化,主题....
本质也是一个Servlet!
4、SpringMVC执行流程
- DispatcherServlet是前置控制器,是整个SpringMVC的控制中心,用户发出请求,它接受请求并且拦截请求
举例子:http://localhost:8080/SpringMVC/hello
http://localhost:8080:服务器域名
SpringMVC:部署在服务器上的web站点
hello:表示控制器
总结:请求位于服务器local host:8080上的SpringMVC站点的hello控制器。
-
HandierMapping为处理器映射;DispatcherServlet调用HandlerMapping,HandierMapping根据请求url查找Handier
-
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制,如上url被查找控制器为:hello.
-
HandlerExecution将解析后的信息传递输DispatcherServlet,如解析控制器映射等。
-
HandlerAdapter表示处理器活配器,提按照特定的规则去执行Handler.
-
Handler计腾体的Controller执行。
-
Controller将群体的执行信息返回给HandierAdapter,如ModelAndView.
-
HandlerAdapter将视愿逻钼名或模型传递给DispatcherServlet,
-
DispatcherServlet询用视品解析器(ViewResolver)来解析HandlerAdapter传理的逻码板游名。
-
视照解析器将解析的逻端视图名传给DispatcherServiet,
-
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
-
最终视图呈现给用户。
5、代码实现
-
创建项目搭建环境(看上面的第二点)
注意看一下spring-webmvc包有没有导入;看一下项目架构里面WEB-INF下有没有lib文件夹,创一个,并点击+号导入里面显示的全部jar包


注意:防止资源导出失败
<!--在build中配置resources,防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
注意:xml文件编码和平台编码不匹配问题
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
··································
6、使用注解的方式实现SpringMVC(重点)
6.1、项目环境配置
创建一个子模块,和上面第五点,创建创建项目搭建环境步骤一样
注意:web.xml版本要最新的!!!
6.2、配置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">
<!--配置DispatcherServlet :这个是SpringMVC核心,请求分发器,前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--DispatcherServlet 要绑定spring的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别 (和服务器一起启动)-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--
在SpringMVC中:/ /*
/ :只匹配所有请求,不会去匹配.jsp页面
/* :匹配所有请求,包括.jsp页面
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
6.3、配置springmvc-servlet.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
https://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">
<!--自动扫描包,让指定包下的注解生效,有IOC容器统一管理-->
<context:component-scan base-package="com.yang.controller"/>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<!--视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="InternalResourceViewResolver">
<!--映射路径的前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--映射路径的后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
6.4、创建hello.jsp
根据springmvc-servlet.xml文件里面的视图解析器的路径创建hello.jsp文件( /WEB-INF/jsp/xxx.jsp )
在hello.jsp里面的body标签里面写${msg}接收HelloController类的方法传过来的属性以及属性值
6.5、创建HelloController
建包:com.yang.controller;包下建HelloController;
@Controller//扫描
//@RequestMapping("/hello")
public class HelloController {
//真实访问地址:项目名/h1
@RequestMapping("/h1")
public String hello(Model model){
//封装数据(向模型添加属性msg和值,可以在jsp取出并渲染
model.addAttribute("msg","Hello,SpringMVCANnotation!!");
return "hello";//会被视图解析器处理(返回结果是WEB-INF/jsp/hello.jsp)
}
}
类和方法都有@RequestMapping(映射地址);如果类上面有@RequestMapping("/hello"),那么真实地址为:项目名/hello/h1
6.6、运行,修改tomcat运行的deployment文件
小总结:
-
先编写web.xml;
-
springmvc-servlet.xml;
-
根据springmvc-servlet.xml里面扫描的包名新建HelloController类;
-
HelloController类加注解,给其方法一个浏览器地址,方法返回“hello”,视图解析器处理得到完整的路径,找到hello.jsp视图
-
编写hello.jsp视图
-
运行
(如果修改了java,run一下;改了配置文件,重新发布tomcat;改了视图页面,刷新一下)
7、注意点和RestFul风格
-
@Component;@Service;@Controller;@Repository----都是一样的,注册在xml文件功能
-
视图可以复用的,模板框架不变只是其中的内容变了(指向同一个视图)
//真实访问地址:项目名/h1 @RequestMapping("/h1") public String hello(Model model){ //封装数据(向模型添加属性msg和值,可以在jsp取出并渲染 model.addAttribute("msg","Hello,SpringMVCANnotation!!"); return "hello";//会被视图解析器处理(返回结果是WEB-INF/jsp/hello.jsp) } @RequestMapping("/h2") public String hello2(Model model){ model.addAttribute("msg","Hello2!!!!"); return "hello"; } -
建议在类方法那里写死@RequestMapping
-
@RequestMapping中的请求方式
-
RestFul风格
@Controller public class RestFulController { //原来的风格 //http://localhost:8080/springmvc_03_annotation_war_exploded/restful?a=1&b=5 @RequestMapping("/restful") public String test(int a, int b, Model model){ int res = a + b; model.addAttribute("msg","结果为:"+res); return "hello"; } //RestFul风格------参数加上注解 @PathVariable //http://localhost:8080/springmvc_03_annotation_war_exploded/restful/1/2 @RequestMapping("/restful/{a}/{b}") public String test2(@PathVariable int a, @PathVariable int b, Model model){ int res = a + b; model.addAttribute("msg","结果为:"+res); return "hello"; } }
8、SpringMVC跳转方式
-
ModelAndView
-
ServletAPI(不建议)
-
SpringMVC实现转发和重定向,不用视图解析器
@RequestMapping("/model/t1") public String test1(Model model){ model.addAttribute("msg","ModelTest1"); return "/WEB-INF/jsp/hello.jsp"; }@Controller public class ModelTest1 { //转发(网址不变) // @RequestMapping("/model/t1") // public String test1(Model model){ // model.addAttribute("msg","ModelTest1"); // return "/WEB-INF/jsp/hello.jsp"; // } //重定向(网址变了) @RequestMapping("/model/t1") public String test2(Model model){ model.addAttribute("msg","ModelTest2"); return "redirect:/index.jsp"; } } -
SpringMVC实现转发和重定向,用上视图解析器
@Controller public class ModelTest2 { //转发 // @RequestMapping("/model/t2") // public String test(){ // return "hello";//默认 // } //重定向 @RequestMapping("/model/t2") public String test2(){ return "redirect:/index.jsp"; } }
9、SpringMVC数据处理
9.1、提交数据处理
-
接收前端的参数
-
接收前端的对象
@Controller
public class UserController {
//传递的是参数
//参数没加注解之前(传递参数名字在方法上,可以使用)
// http://localhost:8080/springmvc_03_annotation_war_exploded/usertest?name=yangshi
//参数加了注解之后(建议)
//http://localhost:8080/springmvc_03_annotation_war_exploded/usertest?username=yangshi
@GetMapping("/usertest")
public String test(@RequestParam("username") String name, Model model){
//1.控制台接收前端参数
System.out.println("接受前端的参数为:" + name);
//2.将返回的结果传递给前端,model
model.addAttribute("msg",name);
//3.视图跳转
return "hello";
}
//传递一个对象User:匹配User对象的字段名,一致就OK,不一致就匹配不到
//http://localhost:8080/springmvc_03_annotation_war_exploded/usertest2?name=yangshi&age=13
@GetMapping("/usertest2")
public String test2(User user,Model model){
model.addAttribute("msg",user);
return "hello";
}
}
9.2、数据显示到前端
-
ModelAndView
-
Model
-
ModelMap
10、乱码问题
11、JSON
前后端分离:
后端部署后端,提供接口,提供数据;
JSON
前端独立部署,负责渲染后端数据;
JSON:
-
是一种数据交换格式
-
采用独立于编程语言的文本格式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
//编写一个javaSrcipt对象
var user={
name:"yangshi",
age:2,
sex:"女"
};
//将js对象转化为json对象
var json = JSON.stringify(user);
console.log(json);
//将json对象转化为js对象
var obj = JSON.parse(json);
console.log(obj);
</script>
</head>
<body>
</body>
</html>
运行打开网页,打开 开发者工具 可以查看!!
12、Jackson工具--json解析工具
Controller返回 Json 数据
- 导包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
- 配置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">
<!--配置DispatcherServlet :这个是SpringMVC核心,请求分发器,前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--DispatcherServlet 要绑定spring的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别 (和服务器一起启动)-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--
在SpringMVC中:/ /*
/ :只匹配所有请求,不会去匹配.jsp页面
/* :匹配所有请求,包括.jsp页面
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
```
- 编写springmvc-servlet.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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--自动扫描包,让指定包下的注解生效,有IOC容器统一管理-->
<context:component-scan base-package="com.yang.controller"/>
<!--视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="InternalResourceViewResolver">
<!--映射路径的前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--映射路径的后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
- 编写pojo层User
pom.xml添加 Lombol 插件
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
<scope>provided</scope>
</dependency>
</dependencies>
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private String sex;
}
- 编写controller层UserController
@Controller
public class UserController {
@RequestMapping("/usercontroller")
@ResponseBody //他不会走视图解析器,会直接返回一个字符串
public String json() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User("yangshi",4,"女");
String str = mapper.writeValueAsString(user);
return str;
}
}
@Controller和@ResponseBody联合使用////或者直接在类上面使用@RestController--这个类返回的是字符串
springmvc-04-json项目模块
如果一个controller类里面很多方法有重复代码,可以将重复代码提取出来在工具层写一个工具类
JSON乱码问题:
springmv-servlet.xml文件添加
<!--JSON乱码问题配置-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
13、fastjson工具
14、整合SSM
14.1、Mybatis层内容
-
环境:
-
IDEA
-
Mysql 5.7.19
-
Tomcat 7.0.86
-
Maven 3.9.9
-
-
数据库搭建:
-
基础环境搭建:
-
创建项目
-
导包,导入依赖
<!--依赖:junit ,数据库驱动, 连接池, servlet, jsp, mybatis, mybatis-spring, spring --> <dependencies> <!--Junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--数据库驱动--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <!-- 注意 artifactId 也变了 --> <version>8.0.33</version> </dependency> <!--数据库连接池--> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!--servlet jsp--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.16</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.2</version> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.23</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.23</version> </dependency> </dependencies> <!--资源导出--> <!--在build中配置resources,防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
-
-
IDEA中连接数据库
-
建包dao,service,controller,pojo以及建applicationContext.xml, mybatis-config.xml 文件
mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- configuration核心配置文件 --> <configuration> <!--配置数据源交给spring--> <typeAliases> <package name="com.yang.pojo"/> </typeAliases> </configuration>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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>database.properties: 如果mysql是8.0+,还需要添加一个时区设置
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=123456 -
pojo:写主体类Books,dao:接口BooksMapper,以及Books Mapper.xml文件, 并且注册.xml文件到mybatis-config.xml核心配置文件
package com.yang.pojo; public class Books { private int bookID; private String bookName; private int bookCounts; private String detail; public Books(){} public Books(int bookID, String bookName, int bookCounts, String detail) { this.bookID = bookID; this.bookName = bookName; this.bookCounts = bookCounts; this.detail = detail; } public int getBookID() { return bookID; } public void setBookID(int bookID) { this.bookID = bookID; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public int getBookCounts() { return bookCounts; } public void setBookCounts(int bookCounts) { this.bookCounts = bookCounts; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } }public interface BooksMapper { //增加一本书 int addBook(Books books); //删除一本书 int deleteBookById(int id); //更新一本书 int updateBook(Books books); //查询一本书 Books queryBookById(int id); //查询全部书 List<Books> queryBook(); }<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yang.controller"> <insert id="addBook" parameterType="Books"> insert into ssmbuild.books (bookName,bookCounts,detail) values (#{bookName},#{bookCounts},#{detail}) </insert> <delete id="deleteBookById" parameterType="int"> delete from ssmbuild.books where bookID = #{bookID} </delete> <update id="updateBook" parameterType="Books"> update ssmbuild.books set bookName = #{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID} </update> <select id="queryBookById" resultType="Books"> select * from ssmbuild.books where bookID = #{bookID} </select> <select id="queryBook" resultType="Books"> select * from ssmbuild.books </select> </mapper><mappers> <mapper class="com.yang.dao.BooksMapper"/> </mappers> -
service:BookService接口(内容和BooksMapper一致),编写BooksServiceImpl实现类
public class BooksServiceImpl implements BooksService{ //service调用dao层 private BooksMapper booksMapper; public void setBooksMapper(BooksMapper booksMapper) { this.booksMapper = booksMapper; } @Override public int addBook(Books books) { return booksMapper.addBook(books); } @Override public int deleteBookById(int id) { return booksMapper.deleteBookById(id); } @Override public int updateBook(Books books) { return booksMapper.updateBook(books); } @Override public Books queryBookById(int id) { return queryBookById(id); } @Override public List<Books> queryBook() { return booksMapper.queryBook(); } }
14.2、Spring层内容
-
创建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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--关联数据库配置文件--> <context:property-placeholder location="classpath:database.properties"/> <!--连接池:dbcp(半自动化), c3p0(自动化), druid, hikari--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${driver}"/> <property name="jdbcUrl" value="${url}"/> <property name="user" value="${username}"/> <property name="password" value="${password}"/> </bean> <!--sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--绑定mybatis配置文件--> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!--配置扫描dao接口扫描包,动态实现dao层可以注入spring容器中!--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--注入 sqlSessionFactory--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!--扫描包--> <property name="basePackage" value="com.yang.dao"/> </bean> </beans> -
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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--扫描service下的包--> <context:component-scan base-package="com.yang.service"/> <!--将所有业务类注入spring ,可以通过xml配置或者注解--> <bean id="BookServiceImpl" class="com.yang.service.BooksServiceImpl"> <property name="booksMapper" ref="booksMapper"/> </bean> <!--声明式事务配置--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--注入数据源--> <property name="dataSource" ref="dataSource"/> </bean> <!--aop 事务支持--> </beans>
14.3、springMVC内容
-
编写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"> <!--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> <!--乱码过滤--> <filter> <filter-name>encodingFilter</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> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--session--> <session-config> <session-timeout>15</session-timeout> </session-config> </web-app> -
新建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 https://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"> <!--注解驱动--> <mvc:annotation-driven/> <!--静态资源过滤--> <mvc:default-servlet-handler/> <!--扫描包:controller--> <context:component-scan base-package="com.yang.controller"/> <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans> -
把文件整合到applicationContext.xml
<import resource="classpath:spring-dao.xml"/> <import resource="classpath:spring-mvc.xml"/> <import resource="classpath:spring-service.xml"/>


15、Ajax
无需加载整个页面的情况下,更新部分网页的技术
搭建spring配置或者环境出错:
@RestController
public class AjaxController {
@RequestMapping("/t1")
public String test(){
System.out.println("进入了test方法");
return "hello";
}
}
可以进入test()方法并输出结果,但是访问网页是一片空白;
排错:
- cmd-->执行命令 curl -v http://localhost:8080/springmvc_ajax/t1
(显示访问网址发生500错误,并且返回了一个不完整的 HTML 响应<html)
-
测试代码---》问题不在 Controller 逻辑----》Spring 配置或环境问题
-
web.xml配置了DispatcherServlet,并且 import DispatcherServlet存在
-
applicationContext.xml 启用了注解驱动
-
关于依赖冲突:cmd--》项目目录下---》mvn dependency:tree---》无依赖冲突
-
触碰这个地址存在一个框 意思是DispatcherServlet not found
-
Tomcat 版本不兼容: Spring 5.x 需要 Tomcat 8.5+!!!!!!!!
浙公网安备 33010602011771号