ssm整合半注解开发全注解开发

半注解开发:

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_3_1.xsd"
         version="3.1">
   <!-- 配置spring-->
    <context-param>
        <!-- 这里的全局名是固定的-->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springapplicationContext.xml</param-value>
    </context-param>
    <!--服务器启动时会掉头内置监听器初始化加载spring的contextConfigLocation上下文对象-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  <!--配置springmvc-->
    <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>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

<!--post表单乱码过滤器-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

spring.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/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
     <!-- 组件扫描-->
      <context:component-scan base-package="com.liu">
          <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
      </context:component-scan>

      <!--加载properties文件-->
               <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

      <!--配置数据源信息-->
                <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
                    <property name="driverClassName" value="${jdbcSourceName}"/>
                    <property name="url" value="${jdbcUrl}"/>
                    <property name="username" value="${jdbcname}"/>
                    <property name="password" value="${jdbcPassword}"/>
                </bean>

      <!--整合mybatis-->
               <!-- 配置sessionFactory-->
                <bean  id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                    <property name="dataSource"  ref="dataSource"/>
                    <property name="typeAliasesPackage" value="com.liu.domain"/>
                </bean>
                <!-- 配置mapper 扫描, 放入spring 容器中-->
                <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                    <property name="basePackage" value="com.liu.dao"/>
                </bean>


      <!--事务管理-->
                 <!-- 平台事务管理器-->
                 <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <property name="dataSource" ref="dataSource"></property>
                </bean>
                 <!--事务的注解驱动-->
                 <tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>


      <!--aop开发-->
           <!--aop自动代理-->
                  <aop:aspectj-autoproxy/>

</beans>

springmvc.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd">
     <context:component-scan base-package="com.liu.Servlet"/>
      <!--配置mvc注解驱动- json对象-->
     <mvc:annotation-driven/>
     <!--配置内部视图解析器-->
    <bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <!--前缀-->
        <property name="prefix" value="/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--静态资源权限控制-->
      <!--对wepapp下的所有资源放行  一旦遇到这些资源告诉springmvc交给tomcat服务器处理-->
     <mvc:default-servlet-handler/>

   <!-- 拦截器-->
      <mvc:interceptors>
          <mvc:interceptor>
              <!--配置对那些资源拦截-->
              <mvc:mapping path="/Student"/>
              <mvc:mapping path="/Student**"/>
              <!--自定义拦截器的位置-->
              <bean class="com.liu.Servlet.Interceptor.interceptor1"/>
          </mvc:interceptor>
      </mvc:interceptors>

<!--aop注解驱动-->
     <aop:aspectj-autoproxy></aop:aspectj-autoproxy>




</beans>

项目结构                                                                              

 表现层项目结构

 拦截器:

package com.liu.Servlet.Interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

@Component
public class interceptor1  implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user==null)
        {
            System.out.println("还未登录!");
            session.setAttribute("error","请先登录!");
            response.getWriter().write("error");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("posthandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("aftercompletion");
    }
}

异常处理器:

package com.liu.Servlet.Excepttion_interceptor;

import com.liu.Exception.BusinessException;
import com.liu.Exception.Systemxception;
import com.liu.Servlet.Result.Code;
import com.liu.Servlet.Result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


@ControllerAdvice
@ResponseBody
public class ProjectExceptionAdvice {
        @ExceptionHandler(Systemxception.class)
        public Result doSystemException(Systemxception ex)
        {   //记录日志
            //发送邮件给开发人员
            //发短信给运维人员
            return new Result(ex.getCode(),null,ex.getMessage());
        }
        @ExceptionHandler(BusinessException.class)
        public Result doBusinessException(BusinessException ex)
        {
            return new Result(ex.getCode(),null,ex.getMessage());
        }
        @ExceptionHandler(Exception.class)
        public Result  doExcept(Exception ex)
        {   //记录日志
            //发送邮件给开发人员
            //发短信给运维人员
            return  new Result(Code.SYStem_unknow_error,null,"系统繁忙,请联系管理人员!");
        }

}

结果集:

package com.liu.Servlet.Result;

public class Result {
    private Object  data;
    private String  msg;
    private  Integer  code;

    public Result(Integer code,Object data,String msg) {
        this.data = data;
        this.msg = msg;
        this.code = code;
    }

    public Result(Integer code,Object data) {
        this.data = data;
        this.code = code;
    }

    public Result(Integer code,String msg) {
        this.msg = msg;
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}

状态编码:

package com.liu.Servlet.Result;

public class Code {
    public  static  final Integer Save_OK=20011;
    public  static  final Integer Delete_OK=20021;
    public  static  final Integer UPdate_OK=20031;
    public  static  final Integer Get_OK=20041;//这里把单个查询和所有查询归到一类 只区分查询成功或失败


    public  static  final Integer Save_NO=20010;
    public  static  final Integer Delete_NO=20020;
    public  static  final Integer UPdate_NO=20030;
    public  static  final Integer Get_NO=20040;


    public  static  final Integer SYStem_unknow_error=50001;
    public  static  final Integer SYStem_Timeout_error=50002;



    public  static  final Integer pojiect_validate_error=60001;
    public  static  final Integer pojiect_business_error=60002;



    public  static  final Integer userAdd_OK=20051;
    public  static  final Integer userAdd_No=20050;
    public  static  final Integer userseek_OK=20061;
    public  static  final Integer userseek_NO=20060;
}

aop操作:
 

package com.liu.Servlet.servletaop;

import com.liu.Exception.BusinessException;
import com.liu.Servlet.Result.Code;
import com.liu.service.logicService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@Aspect
public class advice {
    @Autowired
    logicService al;

    @Pointcut("execution(* com.liu.Servlet.stuServletnew.*er(..))")
    public  void  point1(){}
    @Pointcut("execution(* com.liu.service.stuService.*(..))")
    public  void  point2(){}

    @Before("point1()")
    public  void add_change(JoinPoint point) throws Throwable {
        Object[] args = point.getArgs();
        System.out.println("aopadd-------");
        Map<String, String> arg = (Map<String, String>) args[0];
        String a = arg.get("age");
        if (a.matches("[0-9]+") == false) {
           throw new BusinessException(Code.pojiect_business_error, "你输入的数据不符合规范!");
        } else {
            if (Integer.valueOf(a) > 100) {
                throw new BusinessException(Code.pojiect_business_error, "请输入合适的年龄!");
            }
        }
    }
    @AfterReturning("point2()")
    public  void  logicscu(JoinPoint joinPoint)
    {
        Object[] args = joinPoint.getArgs();
        Object arg=null;
        for(int i=0;i<args.length;i++)
        {
             arg= args[0].toString();
        }
        //拿到目标方法的方法签名
        Signature signature = joinPoint.getSignature();
        //获取方法名
        String name = signature.getName();
        al.addlogic(name+"  方法执行成功!执行参数为  "+arg);
    }
    @AfterThrowing("point2()")
    public void logicerro(JoinPoint joinPoint)
    {
        Object[] args = joinPoint.getArgs();
        Object arg = null;
        for(int i=0;i<args.length;i++)
        {
            arg= args[0].toString();
        }
        //拿到目标方法的方法签名
        Signature signature = joinPoint.getSignature();
        //获取方法名
        String name = signature.getName();
        al.addlogic(name+"  方法执行失败!执行参数为  "+ arg);
    }
}

全注解开发:
项目结构

 configh配置:
jdbcconfig:

package com.liu.configh;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

public class jdbcConfig {
    @Value("${jdbcSourceName}")
    private    String  jdbcSourceName;
    @Value("${jdbcUrl}")
    private String  jdbcUrl;
    @Value("${jdbcname}")
    private  String   jdbcname;
    @Value("${jdbcPassword}")
    private String jdbcPassword;
    @Bean
    public DataSource dataSource()
    {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(jdbcSourceName);
        druidDataSource.setUrl(jdbcUrl);
        druidDataSource.setUsername(jdbcname);
        druidDataSource.setPassword(jdbcPassword);
        return druidDataSource;
    }
    @Bean//设置事务管理器
    public PlatformTransactionManager transactionManager(DataSource dataSource)
    {
        DataSourceTransactionManager ptm=new DataSourceTransactionManager();
        ptm.setDataSource(dataSource);
        return ptm;
    }

}

mbatisconfigh:

package com.liu.configh;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class mybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource)
    {
        SqlSessionFactoryBean sql = new SqlSessionFactoryBean();
        sql.setTypeAliasesPackage("com.liu.domain");
        sql.setDataSource(dataSource);
        return  sql;
    }
    @Bean
    public MapperScannerConfigurer  mapperScannerConfigurer()
    {
        MapperScannerConfigurer ma = new MapperScannerConfigurer();
        ma.setBasePackage("com.liu.dao");//要扫描的mapper接口所在的包
        return  ma;
    }

}

springconfigh

package com.liu.configh;

import org.springframework.context.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
@ComponentScan(value = "com.liu",
 excludeFilters =@ComponentScan.Filter(
         type = FilterType.ANNOTATION,
         classes = Controller.class
 ) )
@PropertySource("classpath:jdbc.properties")
@Import({jdbcConfig.class, mybatisConfig.class})
@EnableTransactionManagement
@EnableAspectJAutoProxy
public class SpringConfig  {

    
}


springmvcconfigh

package com.liu.configh;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan({"com.liu.Servlet","com.liu.configh"})
@EnableWebMvc
public class SpringMvcConfig {
}

springmvcsupportconfigh

package com.liu.configh;

import com.liu.Servlet.Interceptor.interceptor1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class Springmvcsupport extends WebMvcConfigurationSupport {
    @Autowired
    private interceptor1 in;
//拦截器触发
    @Override//拦截器,拦截以/Student结尾和以任意请求结尾倒数第二层请求为Student的 请求
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(in).addPathPatterns("/Student","/Student/*");
    }

    @Override//配置使用springmvc容器启动时对于以下请求放行(不做处理)交给tomcat进行处理
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 如果遇到/css/**路径就放行 到webapp的css目录下找资源文件
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/element-ui/**").addResourceLocations("/element-ui/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/html/**").addResourceLocations("/html/");
        registry.addResourceHandler("/jsp/**").addResourceLocations("/jsp/");
        registry.addResourceHandler("/img/**").addResourceLocations("/img/");
    }

}

webconfigh:
 

package com.liu.webinit;


import com.liu.configh.SpringConfig;
import com.liu.configh.SpringMvcConfig;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

public class Servletsimpleinit extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {SpringMvcConfig.class};
    }
    //设置springmvc访问路径类型
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //设置
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }
}

异常处理器:

package com.liu.Servlet.Excepttion_interceptor;

import com.liu.Exception.BusinessException;
import com.liu.Exception.Systemxception;
import com.liu.Servlet.Result.Code;
import com.liu.Servlet.Result.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ProjectExceptionAdvice {
        @ExceptionHandler(Systemxception.class)
        public Result doSystemException(Systemxception ex)
        {   //记录日志
            //发送邮件给开发人员
            //发短信给运维人员
            return new Result(ex.getCode(),null,ex.getMessage());
        }
        @ExceptionHandler(BusinessException.class)
        public Result doBusinessException(BusinessException ex)
        {
            return new Result(ex.getCode(),null,ex.getMessage());
        }
      /*  @ExceptionHandler(Exception.class)
        public Result  doExcept(Exception ex)
        {   //记录日志
            //发送邮件给开发人员
            //发短信给运维人员

            return  new Result(Code.SYStem_unknow_error,null,"系统繁忙,请联系管理人员!");
        }*/

}

拦截器:
 

package com.liu.Servlet.Interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

@Component
public class interceptor1  implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user==null)
        {
            System.out.println("还未登录!");
            session.setAttribute("error","请先登录!");
            response.getWriter().write("error");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("posthandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("aftercompletion");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值