SpringMvc 单例

struts2的controller是多例,是因为其中有modeldriven将比如user 或者其他属性暴露出来,接受属性,特别是继承了actionsupport之后,fielderror的属性也会设置进来,如果是单例,就会出错。

springmvc 是在方法中加入Model或者Map(不常用)参数,用model.addAttribute()的方法来加入键值对,在页面用EL表达式即可取到值。个人觉得这个是存到了request对象里面去。

但是,注意的是,如果你没有在方法参数中,设置一个局部变量的名字和要传进来的属性的名字相同,那么这个属性就没办法传进来

解决方法是:在get方法中,传一个new User进去,在post方法中用这个User user作为接受值的容器,然后传过来的post方法的modelattribute设置为"user",因为springmvc的addattribute方法的默认的值是你设置进去的单参数,(双参数那就不说了),然后key就是这个参数的类的字符串,比如User就是user,“sss”就是String。所以modelattribute设置为user,那么post方法一执行,就会去找model中的user对象,找到之后,就把输入的值传给这个对象,把这个user对象传递给方法参数,从而得到传值的目的。

springmvc验证:validate的jsr303的方法,在User的属性上加入注解,会通过反射的方式检测,在post方法接受这个user的的时候@validate一下然后属性中再加BindingResult br,在方法开始写if(br.hasErrors),return get方法之前的页面就可以得到错误信息,不过这个好像是用js验证更方便?还没看到这里。

struts2的验证是:比如add方法要验证,先继承actionsupport类,再写个validateAdd方法,里面判断modeldriven的属性中的值符不符合标准,如果不符合就往fielderror中加入一个键值对,键最好是跟属性名一样当执行add方法的时候,就会先验证fielderror里面有没有值,有值就说明有错误,那么就会返回提交表单页面,在这个页面中在struts2标签的帮助下,<s:fielderror>标志得到错误信息。

时间: 2024-08-10 15:03:49

SpringMvc 单例的相关文章

springmvc控制器controller单例问题

springmvc controller默认的是单例singleton的,具体可以查看注解scope可以一目了然. 单例的原因有二: 1.为了性能. 2.不需要多例. 1.这个不用废话了,单例不用每次都new,当然快了. 2.不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例. 我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了. 因此,只要controller中不定义属性,那么单例完全是安全的.下面给个例子

SpringMVC Controller单例和多例

对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0.............静态属性:1 普通属性:0.............静态属性:2 普通属性:0.............静态属性:3 所以说:对于多例情况普通属性时不会共用的,不会产生影响,对于静态属性会去共用这个属性. 第二次:类改为单例 结果:普通属性:0.............静态属

springmvc中的单例问题

1,springmvc实际上是基于一个叫做DispatcherServlet的servlet的.servlet按照以往的学习经验,他是单事例多线程的. Servlet生命周期 1.装载Servlet.这项操作一般是动态执行的.然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet.2.Server创建一个Servlet的实例3.Server调用Servlet的init()方法4.一个客户端的请求到达Server5.Server创建一个请求对象6.

Struts2和SpringMVC的action是单例还是原型的?

struts2的acion单独使用的时候应是多例的,也就是原型(prototype). 因为它是基于类开发的,它的三种获取页面传参的方式都是通过成员变量的方式来接受的. 如果用struts2框架基于方法的形式进行开发(一个方法对应一个请求处理的话),那么意味着这多个方法都可以共享成员变量.这时候,那么就可能会出现并发问题:不同的请求对同一个实例中的成员变量一起操作,出现数据安全问题.比如前一个人的密码可能被后面的人看到,提交的数据被修改等. 这就是为什么struts2为什么是多例的原因. 值得注

SpringMVC框架Controller类就是一个单例类

Springmvc框架Controller类就是一个单例类,所以他在速度和性能上是比较优越的. 这里需要特别注意的一点是:如果一个类已经是单例类了,你就不要在手动的创建类的对象了,这种做法是不可取的,会对系统造成较大的开销.最致命的一点就是,在并发环境下,会导致查询出来的数据错乱. 一般情况下,controller中只会有service对象,因为service是接口,不会存在成员变量一说,接口嘛,只会有常量和方法,不会存在资源的抢夺问题. 原文地址:https://www.cnblogs.com

SpringMVC之控制器的单例和多例管理

版权声明:本文为博主原创文章,未经博主允许不得转载. 在使用Spring3对控制器Controller进行bean管理时,如果要对控制器是否单例进行管理. 有两种方式配置多例模式: 1.springXML 2.注解本身的控制器类 [java] view plaincopyprint? @Controller @Scope("prototype") public class HelloContorller { private int index=0; Logger logger=Logg

SpringMVC中的controller默认是单例的原因

http://lavasoft.blog.51cto.com/62575/1394669/ 1.性能 :单例不用每次new浪费资源时间. 2.不需要:一般controller中不会定义属性这样单例就不会被影响到.

Spring工作原理与单例

最近看到spring管理的bean为单例的,当它与web容器整合的时候始终搞不太清除,就网上搜索写资料, Tomcat与多线程, servlet是多线程执行的,多线程是容器提供的能力. servlet为了能并发执行, 是因为servlet被这些thread使用,tomcat里创建响应的socketServer线程类接收请求连接,然后在再创建或引用对应的servlet实例来处理请求连接.servlet是单例的,只创建一次.所以最好不要使用serlvet中的实例字段. spring中的bean对象默

为什么使用单例?

把一个类的一切方法都写成静态就可以了,为什么需要单例? 静态类缺乏可扩展性,而普通类能够方便的重写某些函数从而对类进行定制. Java Web中的Servlet为什么使用单例? 从Servlet部分开始,框架将处理请求的权限交给程序员.如果框架传给程序员的是单例,那么程序员自己可以很容易的实现多例:而如果框架传给程序员的是多例,那么程序员自己在不需要多例的时候也只得被迫使用多例. 单例效率比多例高. 单例进可攻(实现多例),退可守(保持单例较高效率,避免重复创建对象开销). 许多库再将逻辑处理权