springmvc controller常见问题
controller 的各种操作都是依赖服务器启动后来注入很多功能的,所以热部署经常会没有效果(因为没有被注入,除非在 方法名() 的括号中定义对象 [ 例如:
HttpServletResponse response
] ,因为那样就在访问方法时传递注入了进来,不过即使用这种方式都容易出现没效果的问题,所以这种时候重启服务器即可),没有效果时重启服务器即可
1. 不要把一个 modelAndView 当成重定向的方式,因为它是用于指定视图的,如果要重定向到 .action结尾的 或者就是无后缀的controller,那么用 return String 的方式来重定向,
指定视图就用 modelAndView (通过测试发现: 直接 return String 的方式仍然停留在这个 controller 中,所以特殊场景下需要使用 response来实现重定向)
2. controller的类必须在创建后就先写上 @Controller 注解,否则会找不到这个 Controller
3. 使用 session 时,直接key和value都使用字符串值即可,在验证value时,直接用if来判断即可,如:
@RequestMapping("/jsp/backstageManager/showFramework") public ModelAndView showFramework() { ModelAndView modelAndView = new ModelAndView("/jsp/backstageManager/backstage_framework.jsp"); if (!"true".equals(session.getAttribute("adminLoginStatus")) ){ System.out.println("没有 session ,跳转到 非法访问 页面"); modelAndView.setViewName("/html/error/UnauthorizedAccess.html"); } return modelAndView; }
controller非常容易出现空指针异常,特别是所有跟request有关的操作,
如下图, @Autowired 有时都注入不成功,所以这种情况下需要在方法里单独传入request,这样就可以成功实现了
使用idea进行热部署访问或者正常访问项目时,可能会因为路径问题访问错误但是却不显示错误,这种情况下连Controller都进不了(这里少了个项目目录)
idea热部署情况下更新controller后出现莫名其妙的错误的解决方案
在idea热部署的情况下,刚写好的mailservice出现了错误,发现重启服务器后解决了,可能是资源并没有完成同步的原因,所以这种情况以后可以直接重启服务器,不需要debug