Skip to content
zhangjie edited this page Aug 15, 2020 · 10 revisions

测试用例

pom文件引入jar包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.3.2.RELEASE</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

单元测试编写

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
                        "classpath:beans.xml",
                        "classpath:mybatis.xml"
                    })
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ServiceTest {
   @Resource
   private TrackService trackService;

   @Test
   public void testFindListByReferenceNo(){
       List<TrackEnt> list =  service.findListByReferenceNo("KKon0019998");
       assertEquals(10,list.size());
   }
}

1.1 通过@Before实现测试用例运行前初始化
1.2 通过@After实现测试用例完成后清理
1.3 参考:https://www.jianshu.com/p/83eadf7b352f

Spring MVC

拦截器
  1. 执行顺序:filter -> Interceptor -> controller
  2. handleInterceptor拦截比filter更加精准,可以到达方法级别
    2.1 preHandle是在进入controller之前执行,postHandle是在返回model渲染视图之前执行,afterCompletion是在request执行完成后执行的
    2.2 拦截配置:
    public class MvcConfig implements WebMvcConfigurer{
        	@Override
        	public void addViewControllers(ViewControllerRegistry registry) {
        		registry.addViewController("/").setViewName("forward:/WEB-INF/views/login.jsp");
        		registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        	}
        
        	@Override
        	public void addResourceHandlers(ResourceHandlerRegistry registry) {
        		registry.addResourceHandler("/webapp/static/**").addResourceLocations("classpath:/webapp/static/");
        	}
        
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(userInterceptor).addPathPatterns("/**").excludePathPatterns("/login/sub.do");
            }
    }
    
    2.3 被拦截后返回错误码
    public class UserInterceptor extends HandlerInterceptorAdapter {
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            PdaResponse pdaResult = new PdaResponse();
            pdaResult.setSuccess(false);
            pdaResult.setCode("-2");
            pdaResult.setMessage("pdaNeedReLogin");
            response.getOutputStream().write(JsonUtl.Object2Json(pdaResult).getBytes());
            response.getOutputStream().close();
            return false;
        }
    }
    
session
  1. getSession(boolean create):返回当前request中的HttpSession
    -->如果当前reqeust中的HttpSession为null
    (1)当create为true,就创建一个新的session
    (2)当create为false,返回null
  2. HttpServletRequest.getSession(ture)等同于HttpServletRequest.getSession()
  3. session原理图
    session原理图 3.1 注册过滤器代理
    tomcat注册过滤器代理 3.2 Session过滤器执行流程分析
    Session过滤器执行流程分析 (1)对请求的HttpServletRequest ,HttpServletResponse 对进行包装
    (2)调用 filterChain.doFilter(strategyRequest, strategyResponse)往后传递
    --> 获得session的话,得到的将会是Spring Session 提供的 HttpServletSession实例
    3.3 org.springframework.session.SessionRepository定义了创建、保存、删除以及检索session的方法

Clone this wiki locally