SpringMVC异常处理
步骤实现:
- 搭建springmvc环境(依赖、web.xml、springMVC.xml)
- 写控制器 (模拟异常,例如 int i=1/0;)
- 测试
- 不用springMVC的异常处理,传统的异常处理实现!
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 异常处理
*/
@Controller
@RequestMapping("/exception")
public class UserController {
/**
* 传统方式异常处理
*
* @param model
* @return
*/
@RequestMapping("/save")
public String save(Model model) {
try {
System.out.println("执行save方法");
//模拟异常
int i = 10 / 0;
return "index";
} catch (Exception e) {
//转到异常提示页面
model.addAttribute("error",e.getMessage());
return "error";
}
}
}
- 改为springMVC提供的异常处理机制实现异常处理
先定义异常处理类,再配置异常处理类
package com.itheima.controller.exceptions;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义异常处理类
* HandlerExceptionResolver: SpringMVC提供异常处理接口
*/
public class MyExceptionHandler implements HandlerExceptionResolver{
/**
* resolveException: 只要控制器的方法有任何异常,都会执行该方法
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
//设置错误页面
mv.setViewName("error");
//设置错误提示
mv.addObject("error",e.getMessage());
return mv;
}
}
配置异常处理类
方式1:
@Component
public class MyExceptionHandler implements HandlerExceptionResolver{
方式2:
<!-- 配置异常处理类 -->
<bean class="com.itheima.controller.exceptions.MyExceptionHandler"/>
简单整合SSM:
SSM整合步骤:单独spring,1:依赖包,account实体,accountService接口,
AccountSeerviceImpl实现,编写applicationContext.xml,测试
2:单独springMVC环境:配置web.xml,配置DispathcerServler,编写SpringMVC.XML
编写AccountController,编写findAll方法
编写lisp.jsp,显示数据,部署Tomcat,进行测试
3:在service注入 @Autowired
private AccountDao accountDao;,只需在web.xml配置ServletContext监听器,
用于加载applicationContext.xml
4:单独使用mybatis,查询数据库。
编写AccountDao接口(注解方式)
,编写SqlMapConfig.xml(加载jdbc,数据库连接配置,映射信息)
5,测试( //1.加载SqlMapConfig.xml,/2.创建工厂构造器 //3.创建SqlSession工厂
//4.获取SqlSession //5.获取Dao代理sqlsession.getMapper(accountDAO.class))
spring整合Mybatis环境:配置applicationContext.xml(加载jdbc,创建数据源,
<!-- 由spring创建SqlSessionFactory对象,来自于mybatis-spring整合包 --> <bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean> <dependencies>
<!--jdbc连接池-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!--驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!---->
<!-- jstl包 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- spring扫描Dao接口的映射配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- dao接口扫描目录 -->
<property name="basePackage" value="com.itheima.dao"/>
</bean>),完成spring整合mybatis。修改service,注入dao。测试。
6:SSM整合,页面实现:.修改AccountController代码。.修改list.jsp。(jstl包,c标签) <c:forEach items="${accounts}" var="account">
<tr>
<td>${account.accountId}</td>
<td>${account.uid}</td>
<td>${account.money}</td>
</tr>
spring整合springMVC需加载applicationContext.xml,因为要把service对象放入ioc容器中!加载办法:在web.xml中配置servletContext监听器!
spring整合MyBaties,关键点:把mybatis的sqlsessionFactory的创建,交给spring完成!
所需依赖:
<?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.itheima</groupId>
<artifactId>springmvc03_02_ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- ssm全部依赖-->
<dependencies>
<!-- 1.mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- 2.druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 3.mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- 4.spring与mybatis整合包 *** -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 5.spring ioc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 6.spring aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<!-- 7.spring tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 8.spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 9.spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 10.junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 11.spring webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 12.log4j日志包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- 13.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>
SpringMVC异常处理
步骤实现:
- 搭建springmvc环境(依赖、web.xml、springMVC.xml)
- 写控制器 (模拟异常,例如 int i=1/0;)
- 测试
- 不用springMVC的异常处理,传统的异常处理实现!
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 异常处理
*/
@Controller
@RequestMapping("/exception")
public class UserController {
/**
* 传统方式异常处理
*
* @param model
* @return
*/
@RequestMapping("/save")
public String save(Model model) {
try {
System.out.println("执行save方法");
//模拟异常
int i = 10 / 0;
return "index";
} catch (Exception e) {
//转到异常提示页面
model.addAttribute("error",e.getMessage());
return "error";
}
}
}
- 改为springMVC提供的异常处理机制实现异常处理
先定义异常处理类,再配置异常处理类
package com.itheima.controller.exceptions;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义异常处理类
* HandlerExceptionResolver: SpringMVC提供异常处理接口
*/
public class MyExceptionHandler implements HandlerExceptionResolver{
/**
* resolveException: 只要控制器的方法有任何异常,都会执行该方法
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
//设置错误页面
mv.setViewName("error");
//设置错误提示
mv.addObject("error",e.getMessage());
return mv;
}
}
配置异常处理类
方式1:
@Component
public class MyExceptionHandler implements HandlerExceptionResolver{
方式2:
<!-- 配置异常处理类 -->
<bean class="com.itheima.controller.exceptions.MyExceptionHandler"/>
简单整合SSM:
SSM整合步骤:单独spring,1:依赖包,account实体,accountService接口,
AccountSeerviceImpl实现,编写applicationContext.xml,测试
2:单独springMVC环境:配置web.xml,配置DispathcerServler,编写SpringMVC.XML
编写AccountController,编写findAll方法
编写lisp.jsp,显示数据,部署Tomcat,进行测试
3:在service注入 @Autowired
private AccountDao accountDao;,只需在web.xml配置ServletContext监听器,
用于加载applicationContext.xml
4:单独使用mybatis,查询数据库。
编写AccountDao接口(注解方式)
,编写SqlMapConfig.xml(加载jdbc,数据库连接配置,映射信息)
5,测试( //1.加载SqlMapConfig.xml,/2.创建工厂构造器 //3.创建SqlSession工厂
//4.获取SqlSession //5.获取Dao代理sqlsession.getMapper(accountDAO.class))
spring整合Mybatis环境:配置applicationContext.xml(加载jdbc,创建数据源,
<!-- 由spring创建SqlSessionFactory对象,来自于mybatis-spring整合包 --> <bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean> <dependencies>
<!--jdbc连接池-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!--驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!---->
<!-- jstl包 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- spring扫描Dao接口的映射配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- dao接口扫描目录 -->
<property name="basePackage" value="com.itheima.dao"/>
</bean>),完成spring整合mybatis。修改service,注入dao。测试。
6:SSM整合,页面实现:.修改AccountController代码。.修改list.jsp。(jstl包,c标签) <c:forEach items="${accounts}" var="account">
<tr>
<td>${account.accountId}</td>
<td>${account.uid}</td>
<td>${account.money}</td>
</tr>
spring整合springMVC需加载applicationContext.xml,因为要把service对象放入ioc容器中!加载办法:在web.xml中配置servletContext监听器!
spring整合MyBaties,关键点:把mybatis的sqlsessionFactory的创建,交给spring完成!
所需依赖:
<?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.itheima</groupId>
<artifactId>springmvc03_02_ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- ssm全部依赖-->
<dependencies>
<!-- 1.mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- 2.druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 3.mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- 4.spring与mybatis整合包 *** -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 5.spring ioc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 6.spring aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<!-- 7.spring tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 8.spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 9.spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 10.junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 11.spring webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 12.log4j日志包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- 13.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>