XML配置SSM

SSM整合xml
XML头文件

// An highlighted block
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="  
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/util
       http://www.springframework.org/schema/util/spring-util-4.3.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
       http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.3.xsd">
</beans>

SpringConfig.xml主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-4.3.xsd
       http://www.springframework.org/schema/data/jpa 
       http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
       <!-- 如果没配置包扫描,则要求控制器类继承Controler,配置了则可以使用注解 -->
       <!-- 配置bean组件扫描(@service @controller... -->
       <context:component-scan base-package="com.jt"></context:component-scan>
	   <!-- 整合spring-mvc的xml  -->
	   <import resource="classpath:spring-mvc.xml"/>
	   <!-- 整合mybatis的xml  -->
	   <import resource="classpath:spring-mybatis.xml"/>
</beans>

配置主要的依赖包:

<dependencies>
		<!-- 配置spring-webmvc就不用配spring-context了 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.9.RELEASE</version>
		</dependency>
		<!-- jackson和fastjson,可以任选一个. -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.8.5</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.38</version>
		</dependency>
		<!-- 根据数据库版本选择connector4j版本. -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.40</version>
		</dependency>
		<!-- springJDBC和spring主版本相匹配 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.9.RELEASE</version>
		</dependency>
		<!-- MyBatis主包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
		<!-- 整合包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<!-- druid连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.16</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>	
	</dependencies>
	

SpringMVC.xml配置:添加MVC配置文件,配置bean扫描,启用mvc默认配置,配置视图解析器。

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-4.3.xsd
       http://www.springframework.org/schema/data/jpa 
       http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	   <!-- 启用mvc注解配置 -->
		<mvc:annotation-driven>
			<!-- 不配置 则默认 将fastjon设为默认转换器 -->
			<mvc:message-converters register-defaults="true">
				<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
					<property name="supportedMediaTypes"> 
						<list>
							<value>text/html;charset=utf-8</value>
							<value>application/json;charset=utf-8</value>
						</list>
					</property>
				</bean>
			</mvc:message-converters>
		</mvc:annotation-driven>
		<!-- 配置视图解析器 -->
		<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
				<property name="prefix" value="/WEB-INF/pages/"></property>
				<property name="suffix" value=".jsp"></property>
		</bean>
		<!-- 配置拦截器 -->
		<mvc:interceptors><!-- 先配置先执行 构成拦截器连,由配置顺序决定-->
			<!-- 系统运维监控 -->
			<mvc:interceptor><!-- 注意配置元素的顺序 -->
				<!-- 配置拦截哪些路径 -->
				<mvc:mapping path="/**"/>
				<!-- 配置哪些路径不进行拦截 -->
				<!-- <mvc:exclude-mapping path="/dologin.do"/> -->
				<!-- 拦截到请求后由哪个拦截器进行处理 -->
				<ref bean="systemInterceptor"/>
			</mvc:interceptor>
			<!-- 控制层执行时常监控 -->
			<mvc:interceptor><!-- 注意配置元素的顺序 -->
				<!-- 配置拦截哪些路径 -->
				<mvc:mapping path="/**"/>
				<!-- 配置哪些路径不进行拦截 -->
				<mvc:exclude-mapping path="/dologin.do"/>
				<!-- 拦截到请求后由哪个拦截器进行处理 -->
				<ref bean="timeInterceptor"/>
			</mvc:interceptor>
		</mvc:interceptors>
</beans>

对比MVC配置

<!-- 这里要求 控制器类继承Controler 若主配置文件有扫描则不用配了-->
	<!-- <context:component-scan base-package="com.jt"></context:component-scan> -->

	<!-- 启动MVC注解默认配置 -->
	<mvc:annotation-driven>
		<!-- 写东西代表修改配置,这里是把fastjson设置为默认转换器 -->
		<mvc:message-converters register-defaults="true">
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
				<property name="SupportedMediaTypes">
					<list>
						<value>text/html;charset=utf-8</value>
						<value>application/json;charset=utf-8</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

	<!-- 视图解析器,将控制器返回的结果进行拼接,变成页面路径 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

	<!-- 配置HandleMaping(URL到Controller直接的映射,vlaue里写的是控制器的beanID
若配置了包扫描,则可以使用注解代替HandlerMapping.一下全部不用
 -->
	<bean
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="UrlMap">
			<map>
				<entry key="/hello.do" value="helloController" />
			</map>
		</property>
	</bean>

	<!-- 这里要给上面helloController配置正确bean才能正常运行, 这里myDAO是直接跳过业务层从DAO层拿到数据 -->
	<!-- <bean id="helloController" class="com.mypratice.controler.MyControler"> 
		<property name="myDAO" ref="myDao"></property> </bean> -->


	<!-- 配置拦截器,拦截器无法延时加载,若没有包扫描则需要额外配置拦截器的bean -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 多个拦截器构成拦截器链,xml模式中写在前面的先执行 -->
			<mvc:mapping path="/**"/>
			<ref bean="systemInterceptor"/>
		</mvc:interceptor>
		<mvc:interceptor><!-- 以下配置的额顺序不能改变 -->
			<!-- 配置拦截哪些路径 /**表示拦截所有-->
			<mvc:mapping path="/**" />
			<!-- 配置哪些路径不进行拦截 -->
			<mvc:exclude-mapping path="/doLogin.do" />
			<!-- 拦截到请求后由哪个拦截器进行处理,timeInterceptor的bean 已经由注解自动生成了.@Component -->
			<ref bean="timeInterceptor" />
		</mvc:interceptor>
</mvc:interceptors>

默认的web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>CGB-SSM-V01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <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-configs.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

参考配置web.xml 头部分

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">
	<display-name>CGB-SPRING-MVC-02</display-name>
	

web.xml内容配置

<!-- 前端控制器 -->
	<servlet>
		<servlet-name>frontController</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<!-- 不是spring的set注入,这里找的是那个参数名 -->
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:SpringConfig.xml</param-value>

		</init-param>
		<!-- 数字越小,优先级越高.让tomcat启动时既加载初始化servlet 如果没配置,会等到访问的时候再初始化 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 表示拦截的请求后缀名-->
	<servlet-mapping>
		<servlet-name>frontController</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	

SpringMybatis.xml相关配置

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-4.3.xsd
       http://www.springframework.org/schema/data/jpa 
       http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
       <!-- 整合DRUID数据源对象 -->
       <util:properties id="cfg" location="classpath:configs.properties"> </util:properties>
       <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
       			init-method="init" destroy-method="close" lazy-init="false">
      	  <property name="driverClassName" value="#{cfg.jdbcDriver}"/>
          <property name="url" value="#{cfg.jdbcUrl}"/>
          <property name="username" value="#{cfg.jdbcUser}"/>
          <property name="password" value="#{cfg.jdbcPassword}"/>
       </bean>
       <!-- 整合sqlsessionfactroyBean对象 -->
       <bean id="sqlSessionFactroy" class="org.mybatis.spring.SqlSessionFactoryBean">
	       	<property name="DataSource" ref="dataSource"/><!-- 数据源 -->
	        <property name="MapperLocations" 
	          value="classpath*:mapper/sys/*Mapper.xml"/><!--  -->
       </bean>
       <!-- 配置 dao层接口扫描-->
       <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
	       <property name="basePackage" value="com.jt.**.dao"/>
	       <property name="sqlSessionFactoryBeanName" 
	                    value="sqlSessionFactroy"/>
       </bean>
</beans>

相关简洁配置mybati.xml

配置druid和MyBatis工厂
<util:properties id="cfg"
		location="classpath:jdbc.properties" />

	<bean id="druidDataSource"
		class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="#{cfg.driver}" />
		<property name="url" value="#{cfg.url}" />
		<property name="username" value="#{cfg.usernameddd}" />
		<property name="password" value="#{cfg.password}" />
	</bean>

	<!-- 配置SqlSessionFactoryBean对象 
这个对象取出来的东西是 sqlSessionFactory 
相当于取代了MyBatis的配置文件 
		只需要在MapperLocations里配置Mapper映射就好了. -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="DataSource" ref="druidDataSource" />
		<property name="MapperLocations"
			value="classpath*:mapper/*Mapper.xml" />
	</bean>

<!-- 这里配置自动扫描接口,自动生成实现类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- com.jt.**.dao表示com.jt包下,任意包下+任意包下+dao包下的位置 -->
		<property name="basePackage" value="com.jt.**.dao" />
		<!-- 这个可以不配,无所谓. -->
		<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> -->
	</bean>

	<!-- 给实现类配置sqlSessionFactory -->
	<!-- <bean id="myDao" class="com.mypratice.DAO.impl.myDAOimpl"> -->
	<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> -->
	<!-- </bean> -->
	

数据库属性文件:jdbc.properties

jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql:localhost:3306/jtsys?useUnicode=true&characterEncoding=utf-8
jdbcUser=root
jdbcPassword=root

日志文件:log4j.properties

log4j.rootLogger=INFO,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c - %m%n

log4j.logger.com.mybatis3=DEBUG
log4j.logger.com.jt=DEBUG

Mapper.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 namespace="com.jt.sys.dao.SysConfigDao">
     <select id="findPageObjects"
             resultType="com.jt.sys.entity.SysConfig">
             select *
             from sys_configs
             where name like concat("%",#{name},"%")
             limit #{startIndex},#{pageSize}
     </select>
     <select id="getRowCount" resultType="int">
     		select count(*)
     		from sys_configs  
     		where name like concat("%",#{name},"%")
     </select>
</mapper>

后端控制器常用配置:


package com.mypratice.controler;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.mypratice.DAO.myDAO;
import com.mypratice.POJO.Db1Pojo;

public class MyControler implements Controller{

	private myDAO myDAO;
	
	public void setMyDAO(myDAO DAO) {
		this.myDAO=DAO;
	}
	
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("hello");
		mav.addObject("MSG", "Hello SpringMVC~!");
		String strs[]= {"啊啊啊1","棒棒棒2","踩踩踩3"};
		mav.addObject("array", new ObjectMapper().writeValueAsString(strs));
		Db1Pojo pojo = myDAO.findPOJObyId(1);
		System.out.println(pojo);
		mav.addObject("dao", new ObjectMapper().writeValueAsString(pojo));
		return mav;
	}
}

自己写实现类方式,设置bean让Spring给自动注入sqlSessionFactory

package com.mypratice.DAO.impl;


import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.mypratice.DAO.myDAO;
import com.mypratice.POJO.Db1Pojo;

public class myDAOimpl implements myDAO{
	private SqlSessionFactory sqlSessionFactory;
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
		this.sqlSessionFactory = sqlSessionFactory;
	}
	@Override
	public Db1Pojo findPOJObyId(Integer id) {
		SqlSession session = sqlSessionFactory.openSession();
		String statement = "com.mypratice.DAO.myDAO.findById";
		Db1Pojo pojo = session.selectOne(statement,1);
		session.close();
		return pojo;
	}
}

SSM配置的基本步骤

基本步骤

1.创建maven web项目,
2.生成部署描述文件 web.xml
3.修改项目编码为utf-8
4.设置项目targeted runtimes (Tomcat)
5.修改项目project facets (jdk1.8)

2.2.资源整合
整合流程分析:

1.整合Spring MVC 环境(一个依赖spring-webmvc)
2.整合fastjson(jackson)库(一个依赖fastjson(jackson),用于将对象转换为json串)
3.整合Druid 连接池(两个依赖:mysql驱动,druid库文件)
4.整合Mybatis 框架(三个依赖:mybatis,mybatis-spring,spring-jdbc)
5.整合Junit 单元测试框架

资源整合实现:
第一步:整合Spring MVC 应用组件
1.1)添加依赖(spring-webmvc)
1.2)添加配置文件(spring-configs.xml)
配置bean扫描,启用mvc默认配置,配置视图解析器。
1.3)配置前端控制器(DispatcherServlet)
1.4)启动环境进行测试。

第二步:整合fastjson库(用于将对象转换为json串)
//如果是jackson则Spring默认支持

2.1) 添加fastjson依赖
2.2) 配置fastjson 对象转换器

第三步:整合Druid连接池对象

3.1) 添加依赖(mysql,druid)
3.2) 添加configs.properties文件,并定义key/value
3.3) 配置druid对象(spring-configs.xml)


第四步:整合mybatis框架(用户实现持久层的数据操作)

4.1) 添加依赖(mybatis,mybatis-spring,spring-jdbc)
4.2) 配置mybatis(spring-configs.xml)

说明:配置完成以后部署项目,启动tomcat测试是否有问题.

全局异常类定义

/**
 * 全局异常处理类(需要使用@ControllerAdvice注释)
 * 可以在此类中添加所有Conroller中
 * 需要共享的异常处理方法
 *
 */

@ControllerAdvice
public class GlobalExceptionHandler {
	/**
	 * @ExceptionHandler 此注解声明的方法
	 * 为异常处理方法
	 * 1.Spring mvc 如何识别这个方法是一个异常处理方法@ExceptionHandler
	 * 2.spring mvc 后端处理器的方法出现异常底层会如何处理
	 * @return Class[]
	 */
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public JsonResult doHandlerException(Exception e){
		System.out.println(e.getMessage());
		return new JsonResult(e);
	}
	//继承层次,先找直接父类再找,上面的父类
	@ExceptionHandler(RuntimeException.class)//
	@ResponseBody
	public JsonResult doRuntimeException( RuntimeException e){
		System.out.println(e.getMessage());
		return new JsonResult(e);
	}
}

自定义异常类

/**
 * 
 * 只在业务层才定义 业务异常
 * 1.更好的定位错误
 * 2.更好的事项用户交互
 *
 */
public class ServiceException extends RuntimeException {
	private static final long serialVersionUID = 1L;

	public ServiceException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
		// TODO Auto-generated constructor stub
	}

	public ServiceException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

	public ServiceException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	public ServiceException(Throwable cause) {
		super(cause);
		// TODO Auto-generated constructor stub
	}
}

自定义注解:

/**
 * 自定义注解
 *
 */
@Retention(RetentionPolicy.RUNTIME)//运行时有效
@Target(ElementType.METHOD)//只能修饰方法
public @interface HandlerMonitor {
}

自定义拦截器:

/**
 * 拦截器
 *
 */
@Component
public  class TimeInterceptor implements HandlerInterceptor {
	public TimeInterceptor() {
		// TODO Auto-generated constructor stub
		System.out.println("拦截器初始化");
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("preHandle"+handler.getClass());
		long startTime=System.nanoTime();
		//封装控制层要执行的方法信息
		HandlerMethod handmeth=(HandlerMethod)handler;
		Method method = handmeth.getMethod();//利用反射获取方法
		String name = method.getName();//获取方法名
		System.out.println(name);
		if(method.isAnnotationPresent(HandlerMonitor.class)){//是否有注解
			System.out.println("有注解");
			request.setAttribute("startTime", startTime);
		}
		return true;//true 放行
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("posthandler");
		Method method = ((HandlerMethod)handler).getMethod();
		if(method.isAnnotationPresent(HandlerMonitor.class)){
			long totalTime=System.nanoTime()-(long)request.getAttribute("startTime");
			System.out.println(totalTime);
		}
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("afterCompletion");
	}
}

Controller配置:

@Controller
@RequestMapping("/config/")
public class SysConfigController {//mvc
	
		@Autowired
		private SysConfigService sysConfigService;
		
		//@RequestMapping("doFindPageObjects")
		//@ResponseBody
		//@HandlerMonitor //自定义注解只能修饰方法对象
		//public PageObject<SysConfig> doFindPageObjects(String name,Integer pageCurrent){
		//	return sysConfigService.findPageObjects(name, pageCurrent);
		//}//将对象装换为json输出(底层借用fastjson)
	
		@RequestMapping("doFindPageObjects")
		@ResponseBody
		@HandlerMonitor //自定义注解只能修饰方法对象
		public JsonResult doFindPageObjects(String name,Integer pageCurrent){
			return new JsonResult(sysConfigService.findPageObjects(name, pageCurrent));
		}//将对象装换为json输出(底层借用fastjson)
		//controller--->service---->dao---->DB
		
		@RequestMapping("ajax")
		public String ajax(){
			return "congif-ajax";
		}
		
		@RequestMapping("ajax1")
		public String ajax1(){
			return "jquery_ajax";
		}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值