Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
zhangjie edited this page Oct 12, 2020 · 10 revisions

通过命令行读取参数

  1. java -jar xxx.jar aaa bbb cccc
    1.1 通过main方法的参数获取
    1.2 或者通过ApplicationArguments注入获取
  2. java -jar xxx.jar --a1=aaa --b1=bbb
    2.1 可以通过@Value("${a1}") 获取

测试用例

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)整个过滤器链执行完后,提交session:wrappedRequest.commitSession();
    3.3 SessionRepositoryFilter$SessionRepositoryRequestWrapper#getSession方法分析
     1. S requestedSession = getRequestedSession();
     1.1 List<String> sessionIds = SessionRepositoryFilter.this.httpSessionIdResolver
     						 .resolveSessionIds(this);
     (1)httpSessionIdResolver分为CookieHttpSessionIdResolver和HeaderHttpSessionIdResolver
     --> 分别从cookie或者头部获取sessionId
     1.2 S session = SessionRepositoryFilter.this.sessionRepository
     							 .findById(sessionId);
     -->通过sessionId在存储里查找session
     2. 如果根据sessionId没有找到sesssion并且create参数为true,则新建
     --> S session = SessionRepositoryFilter.this.sessionRepository.createSession();
    

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /