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}数据