当前位置: 首页 > 知识库问答 >
问题:

Spring mvc中的每个请求都创建了一个新的bean对象吗?

楮景明
2023-03-14

我不明白在spring mvc中使用dispatcher servlet只创建了一个bean对象,还是每个请求都创建了一个新对象?

控制器代码:-

在代码中,我在LoginBean对象中设置数据,并在方法abc中的modelandview对象中设置它。

然后,在jsp中,我没有为usename输入任何值,在这种情况下,当我提交表单并调用处理程序方法(initform)时,我试图打印相同的lb.getusername,但没有返回任何值。不能理解这个概念。

@Controller
public class LoginController{
ModelAndView mv=null;
EmployeeBean e=new EmployeeBean();
AutoBean autobean;
@Autowired
public LoginController(AutoBean autobean){
    System.out.println("autobean");

    this.autobean=autobean;
}
    @RequestMapping(value="/login")
    public ModelAndView abc(){

        System.out.println("here");
        System.out.println("here1");
        LoginBean lb=new LoginBean();
        lb.setUsename("ankita");//setting value
        return new ModelAndView("login","loginbean",lb);
    }

    @RequestMapping(value="/abc1",method=RequestMethod.POST)
    public ModelAndView initform(@ModelAttribute("loginbean")LoginBean      lb,BindingResult result,Model model){
        System.out.println("*****"+result.getErrorCount());
        System.out.println("hello");
        autobean.setName("yayme");
        System.out.println(autobean.getName());
        model.addAttribute("autobean", autobean);
        System.out.println("username"+lb.getUsename());// query??
        if(lb.getPassword().equals("ankita"))
        /*{
            mv=new ModelAndView();
            e.setId("1001");
            e.setName("ankita");
            mv.addObject("employee", e);
            mv.addObject("emp", new Emp());

            mv.setViewName("success");
            return mv;
        }*/
        return new ModelAndView("success","emp",new Emp());
        else
            return new ModelAndView("fail","lb1",lb);
    }

login.jsp

<form:form action="abc1" commandName="loginbean">
username:<form:input path="usename" />
password:<form:password path="password"/>
<input type="submit"/>
</form:form>

请建议?

共有1个答案

庞鸿骞
2023-03-14

Spring的应用程序上下文(bean IoC容器,负责管理bean从实例化到销毁的生命周期)包含bean定义。这些定义以及其他属性包含所谓的< code >范围。该范围可以有以下值:

    < li> singleton -在应用程序生存期内只创建一个bean实例 < li> 原型 -每次有人问(< code > application context . get bean(...))为该bean创建一个新实例

您也可以有一些特殊的范围:

  • 请求-bean生命周期绑定到HTTP请求。
  • session-bean生命周期绑定到HTTP会话

您甚至可以创建自己的范围。bean的默认范围是singleton。因此,如果您不另行指定,bean是singleton(每个应用程序的单个实例)。

如果您使用的是组件扫描,它搜索带有@Component类注释的类(例如@Controller),那么这些类会自动注册为应用程序上下文中的bean定义。默认范围也适用于它们。

如果您想更改这些自动注册bean的作用域,您必须使用@scope注释。如果您对如何使用它感兴趣,请查看它的JavaDoc。

TL;DR您的< code>LoginController是< code>singleton。

 类似资料:
  • 问题内容: 我有两个变量“ userId”和“ name”。例如,当我单击“ SHOW USERID”按钮时,它可以正常工作并设置为“ renderUserId = true”,并使用“ render”显示它,但是如果我单击另一个“ SHOW”按钮,则表示Bean处于重建状态并且松动了“ renderUserId = true”,它变为“ false”和“ renderName = true”,因

  • 问题内容: 每个HTTP请求是否在不同的线程中访问相同的servlet对象?还是创建一个新的线程和新的Servlet实例? 问题答案: 如果您的servlet未实现,则容器将使用相同的servlet实例。否则,不能保证击中相同的物体。如果认为必要,容器可以自由创建更多的servlet实例。但是请求来自不同的线程,不一定是新创建的(如Sanjay所述)。 根据Servlet 3.0规范: 对于未在分

  • 我有一个类,下面的类作为RequestScope bean:

  • 问题内容: 我一直在寻找一种方法,可以在每个请求时重新加载我们的Spring Security UserDetails对象,并且无法在任何地方找到示例。 有人知道该怎么做吗? 基本上,我们希望为每个请求重新加载用户权限,因为该用户权限可能会从Web请求更改为Web请求。 例如,一个已登录并随后被授予新权限的用户(并通过电子邮件被通知他们具有新权限),我知道该用户实际获得该新权限的唯一方法是先注销然

  • 我有一个遗留的Java1.6运行localhostTomcat 7应用程序使用JSP页面,一个带有框架的框架集,javascript,但没有像Struts这样的框架。我使用请求或会话从servlet传递一个对象以在页面中显示,这很好。 然而,我最近做了一些更改,现在我无法从会话或请求中检索到相同的对象。它以前工作得很好,所以我不确定是什么坏了,但我甚至无法将字符串值从JSP返回到servlet。

  • 问题内容: 我正在尝试创建一个表格,其中每一行都是一个表格。我希望每个输入都在不同的表分区中,但是例如,我仍然需要所有所有第一个输入都属于同一个表头,依此类推。 我想做的是一个可编辑的网格 ,或多或少这样: 但是显然我不能以这种方式排列标签(或者w3c验证程序所说的也是如此)。 有什么好办法吗? 问题答案: 如果你想要一个“编辑网格”,即像结构的表格,可以让你做任何行的形式,使用CSS,模仿表标签