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

原文地址:https://www.cnblogs.com/kinome/p/9047553.html