springmvc中controller不要定义全局变量

springmvc中controller不要定义全局变量

因为controller是默认单例模式,高并发下全局变量会出现线程安全问题
现这种问题如何解决呢?
第一种方式: 既然是全局变量惹的祸,那就将全局变量都编程局部变量,通过方法参数来传递。
第二种方式: jdk提供了java.lang.ThreadLocal,它为多线程并发提供了新思路。
第三种:使用@Scope(“session”),会话级别

   @Controller  
    //把这个bean 的范围设置成session,表示这bean是会话级别的,  
    @Scope("session")  
    public class XxxController{  
        private List<String> list ;  
 
      //@PostConstruct当bean加载完之后,就会执行init方法,并且将list实例化;  
        @PostConstruct  
        public void init(){  
            list = new ArrayList<String>();  
        }  
 
    }

第四种:将控制器的作用域从单例改为原型,即在spring配置文件Controller中声明 scope=“prototype”,每次都创建新的controller

作者:盼超师兄
来源:CSDN
原文:https://blog.csdn.net/weixin_33387378/article/details/87933743
版权声明:本文为博主原创文章,转载请附上博文链接!

SpringMVC Rest url数据(重点)

SpringMVC请求资源路径的URL可以通过{XXX}形式指定动态的URL,动态URL中的这个可变参数的值可以直接注入到方法对应的参数中。

@RequestMapping(value="path/{var}",method=RequestMethod.GET)
@ResponseBody
public String withPathVariable(@PathVariable String var) {
	return "Obtained 'var' path variable value '" + var + "'";
}
/**
	
	 * RESTFul结构
	 * 格式特点:
	 * 	1.在url中将需要提交的参数使用"/"进行分割
	 * 		localhost:8091/addUser/1/tom
	 *  2.在接收端,将参数使用{}包裹并且参数的位置固定.
	 *  3.变量的名称必须和{}中的名称一致,之后通过@PathVariable
	 *    实现数据的传递.
	 *  
	 *  功能:
	 *  	1.实现了通用页面的跳转问题.
	 *  	2.减少了代码传递的字节数.
	 */
@RequestMapping("/page/{moduleName}")
	public String module(@PathVariable String moduleName){
		
		return moduleName;
	}

通过@PathVariable注解指定参数变量var获取请求url中{var}数据

原文地址:https://www.cnblogs.com/szls-666/p/12494200.html