发表于: 2020-06-23 23:57:35

1 1451


今天完成的事情;


spring测试servise方法

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringbootoneApplicationTests {
@Autowired
studentService studentService;
@Test
void contextLoads() {
List<student> list = studentService.allStudent();
System.out.println("结果"+list);
}
}


显示


spring测试controller


这个是利用junit的MockMvc来实现的


@RunWith(SpringRunner.class)
@SpringBootTest
public class ControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mvc;
private MockHttpSession session;
@Before
public void setupMockMvc(){
mvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象
session = new MockHttpSession();
student student =new student();
student.setImg("img");
student.setName("name");
//拦截器那边会判断用户是否登录,所以这里注入一个用户
session.setAttribute("student",student);
}
/**
* 获取教程测试用例
* @throws Exception
*/
@Test
public void qryLearn() throws Exception {
//构造一个Get请求
mvc.perform(MockMvcRequestBuilders.get("/student")
//请求头类型 xml
.contentType(MediaType.APPLICATION_XML_VALUE)
//返回结果类型 json
.accept(MediaType.APPLICATION_PROBLEM_JSON_VALUE)
//注入一个session,这样拦截器才可以通过
.session(session)
)
//添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息
.andDo(MockMvcResultHandlers.print());
}
}


获取的controller结果


感觉好麻烦   还不如写完直接postman



springboot怎么打日志


spring-boot-start 自带的有日志功能


Logger logger= LoggerFactory.getLogger(getClass());


直接调用即可

logger.trace("这是一个trace日志...");
logger.debug("这是一个debug日志...");
// SpringBoot默认是info级别,只会输出info及以上级别的日志
logger.info("这是一个info日志...");
logger.warn("这是一个warn日志...");
logger.error("这是一个error日志...");



另外两个没打出来是因为权限不够


yml设置下输出磁盘


#以下是电脑的绝对路径 :
logging:
file:
path: E:/springbootlog




spring boot的请求拦截器





这个方法 /*    拦截了所有请求   

但排除了toLogin 和 login的页面

@Configuration
public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer {

   /**
    * 以前要访问一个页面需要先创建个Controller控制类,再写方法跳转到页面
    * 在这里配置后就不需要那么麻烦了,直接访问http://localhost:8080/toLogin就跳转到login.jsp页面了
    * @param registry
    */
   @Override
   public void addViewControllers(ViewControllerRegistry registry) {
       registry.addViewController("/toLogin").setViewName("login");
   }

   /**
    * 拦截器在这里
    *
    * @param registry
    */
   @Override
   public void addInterceptors(InterceptorRegistry registry) {

//        如果有静态资源!!!!在拦截器那里排除静态资源的请求路径  不然回拦截静态资源
//        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatternss("/toLogin","/login","/assets/**","/js/**");

       // addPathPatterns 用于添加拦截规则
       // excludePathPatterns 用户排除拦截
       registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/toLogin", "/login","/logging");
   }

}



登录的页面     返回session,session里包含student数据

@RequestMapping(value "/login",method = RequestMethod.POST)
public Map<String,Objectlogin(HttpServletRequest requestHttpServletResponse response){
   Map<String,Objectmap =new HashMap<String,Object>();
   String img =request.getParameter("img");
   String name =request.getParameter("name");
   if(!img.equals(""&& name!=""){
       student student =new student();
       student.setImg(img);
       student.setName(name);
       request.getSession().setAttribute("student",student);
       map.put("result","1");
   }else{
       map.put("result","0");
   }
   return map;
}


一个拦截类   这个和前面一样  

判断session是否为空     来返回boolean     是否拦截

public class MyInterceptor implements HandlerInterceptor {

       @Override
       public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
           boolean flag =true;
           student student=(student)request.getSession().getAttribute("student");
           if(null==student){
               response.sendRedirect("toLogin");
               flag = false;
           }else{
               flag = true;
           }
           return flag;
       }

       @Override
       public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
       }

       @Override
       public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
       }
   }


运行没问题





添加了一个IDEA  插件   可以实现热部署


效果:

项目部署后  

如果修改了jsp页面  和class代码

项目也会随之跟着改变,不需要重新再部署一遍






明天计划的事情;


springCloud




返回列表 返回列表
评论

    分享到