Java 未在Spring MVC中重新初始化控制器类

Java 未在Spring MVC中重新初始化控制器类,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在使用SpringMVC框架。我的控制器类看起来像这样 public class UpdateStockController extends AbstractWizardFormController { StockRegisterService stockRegisterService; DimensionStoneService dimensionStoneService; MineralService mineralService; AutoPopulatingList openDim

我正在使用SpringMVC框架。我的控制器类看起来像这样

public class UpdateStockController extends AbstractWizardFormController {

StockRegisterService stockRegisterService;
DimensionStoneService dimensionStoneService;
MineralService mineralService;
AutoPopulatingList openDimensionStoneBeans=new AutoPopulatingList(DimensionStoneBean.class);
AutoPopulatingList todayDimensionStoneBeans=new AutoPopulatingList(DimensionStoneBean.class);
StockRegister stockRegister;
List<DimensionStone> openDimensionStones=new ArrayList<DimensionStone>();
List<DimensionStone> todayDimensionStones=new ArrayList<DimensionStone>();
float cumulativeStockOrg;
boolean flag1;
boolean flag2;
public StockRegisterService getStockRegisterService() {
    return stockRegisterService;
}
public void setStockRegisterService(StockRegisterService stockRegisterService) {
    this.stockRegisterService = stockRegisterService;
}   
public DimensionStoneService getDimensionStoneService() {
    return dimensionStoneService;
}
public void setDimensionStoneService(DimensionStoneService dimensionStoneService) {
    this.dimensionStoneService = dimensionStoneService;
}   
public MineralService getMineralService() {
    return mineralService;
}
public void setMineralService(MineralService mineralService) {
    this.mineralService = mineralService;
}
public UpdateStockController(){
    setSessionForm(true);
}   
@Override
protected Object formBackingObject(HttpServletRequest request)throws Exception {

    String applicationId=null;
    String serviceId=null;
    try{
        applicationId=(String)request.getParameter("appId").trim();
        serviceId=(String)request.getParameter("serviceId").trim();
    }catch (NullPointerException e) {
        HttpSession session=request.getSession();
        applicationId=(String) session.getAttribute("applicationId");
        serviceId=(String) session.getAttribute("serviceId");
    }
    String mineralId=(String)request.getParameter("mineralIdAndName").trim().split(":")[0];
    String mineralName=(String)request.getParameter("mineralIdAndName").trim().split(":")[1];
    if(mineralId.equals("10")){
        flag2=true;
    }
    System.out.println("..............................flag2 : "+flag2+".......................");
    System.out.println("..............................flag1 : "+flag1+".......................");
    HttpSession session=request.getSession();
    session.setAttribute("applicationId", applicationId);
    session.setAttribute("serviceId",serviceId);
    Date productionDate=new Date(); 
    UpdateStockBean updateStockBean=new UpdateStockBean();
    updateStockBean.setMineralId(mineralId);
    updateStockBean.setMineralName(mineralName);           
    updateStockBean.setAccidentOccured("NO");
    updateStockBean.setCompPaid("NO");
    stockRegister=new StockRegister();
    @SuppressWarnings("rawtypes")
    List ckeckTodayStockRegisterList=stockRegisterService.retrieveDataFromStockRegister(applicationId,productionDate,mineralId);       
    if(ckeckTodayStockRegisterList.isEmpty()){
        System.out.println("..............................If1.......................");
        @SuppressWarnings("rawtypes")
        List openingBalFromPreviousStockRegisterList=stockRegisterService.retrieveOpeningBalance(applicationId,mineralId);  
        flag1=true;
        if (!openingBalFromPreviousStockRegisterList.isEmpty()) {
            System.out.println("..............................If2.......................");
            flag1=false;
            stockRegister=(StockRegister)openingBalFromPreviousStockRegisterList.get(0);
            stockRegister.setStockRegisterId(0);
            if(stockRegister.getBalanceQuantity()!=null){
                updateStockBean.setOpenbalance(stockRegister.getBalanceQuantity());                     
            }   
            cumulativeStockOrg=stockRegister.getCumulativeStock();
            System.out.println(".............................."+cumulativeStockOrg+".......................");
        }              
    }else{
        System.out.println("..............................else.......................");
        stockRegister=(StockRegister) ckeckTodayStockRegisterList.get(0);
        long stockRegId=stockRegister.getStockRegisterId();
        openDimensionStones=dimensionStoneService.getOpenDimensionStones(stockRegId);
        todayDimensionStones=dimensionStoneService.getTodayDimensionStones(stockRegId);
        updateStockBean.setOpenbalance(stockRegister.getOpeningBal());
        updateStockBean.setTodayproduction(stockRegister.getQuantityProduced());
        updateStockBean.setNoOfMale(stockRegister.getNoOfMaleEmp());
        updateStockBean.setNoOfFemale(stockRegister.getNoOfFemaleEmp());
        updateStockBean.setAccidentOccured(stockRegister.getAccidentOccured());
        updateStockBean.setDescriptionAccident(stockRegister.getAccidentDescription());
        updateStockBean.setCompPaid(stockRegister.getCompensationPaid());
        updateStockBean.setCompDetails(stockRegister.getCompensationDet());
        updateStockBean.setCompAmount(stockRegister.getCompensationAmt());
        cumulativeStockOrg=stockRegister.getCumulativeStock()-stockRegister.getQuantityProduced();
        for (Iterator<DimensionStone> iterator = openDimensionStones.iterator(); iterator.hasNext();) {
            System.out.println("..............................Haii77777777777.......................");
            DimensionStone dimensionStone=iterator.next();  
            DimensionStoneBean dimensionStoneBean=new DimensionStoneBean();
            dimensionStoneBean.setStoneNo(Integer.parseInt(dimensionStone.getStoneNo().toString()));
            dimensionStoneBean.setLength(dimensionStone.getLength());
            dimensionStoneBean.setBreadth(dimensionStone.getBreadth());
            dimensionStoneBean.setHeight(dimensionStone.getHeight());
            dimensionStoneBean.setDimension(dimensionStone.getDimension());
            dimensionStoneBean.setIsIssued(dimensionStone.getIsIssued());
            openDimensionStoneBeans.add(dimensionStoneBean);
        }
        updateStockBean.setOpenDimensionStones(openDimensionStoneBeans);
        for (Iterator<DimensionStone> iterator = todayDimensionStones.iterator(); iterator.hasNext();) {
            System.out.println("..............................Haiiii8888888888888.......................");
            DimensionStone dimensionStone=iterator.next();
            DimensionStoneBean dimensionStoneBean=new DimensionStoneBean();
            dimensionStoneBean.setStoneNo(Integer.parseInt(dimensionStone.getStoneNo().toString()));
            dimensionStoneBean.setLength(dimensionStone.getLength());
            dimensionStoneBean.setBreadth(dimensionStone.getBreadth());
            dimensionStoneBean.setHeight(dimensionStone.getHeight());
            dimensionStoneBean.setDimension(dimensionStone.getDimension());
            dimensionStoneBean.setIsIssued(dimensionStone.getIsIssued());
            todayDimensionStoneBeans.add(dimensionStoneBean);
        }
        updateStockBean.setTodayDimensionStones(todayDimensionStoneBeans); 
    } 
    return updateStockBean;
}

@SuppressWarnings("unchecked")
@Override
protected ModelAndView processFinish(HttpServletRequest req,HttpServletResponse res, Object cmd, BindException be)
throws Exception {
    float cumulativeStock;
    float dimensionCumulativeVolume=cumulativeStockOrg;

    UpdateStockBean bean = (UpdateStockBean)cmd;
    Long openingBalance=bean.getOpenbalance();
    Long quantityProduced=(Long)bean.getTodayproduction();
    Long totalQuantity=openingBalance+quantityProduced;
    Long balanceQuantity=totalQuantity;
    System.out.println("..............................flag2 : "+flag2+".......................finish");
    System.out.println("..............................flag1 : "+flag1+".......................finish");
    if(flag1){
        System.out.println("..............................flag true.......................1");
        cumulativeStock=(Float.parseFloat(openingBalance.toString())+Float.parseFloat(quantityProduced.toString()));
    }else{
        System.out.println("..............................flag false.......................1");
        cumulativeStock=cumulativeStockOrg+quantityProduced;
    }
    System.out.println(".............................."+cumulativeStock+".......................1");
    if(stockRegister.getStockRegisterId()==0){
        stockRegister.setStockRegisterId(stockRegisterService.getMaximumValueStockRegisterId()+1);
    }   
    Application application=new Application();
    application.setApplicationId(Long.parseLong(req.getSession().getAttribute("applicationId").toString().trim()));
    stockRegister.setApplication(application);
    stockRegister.setProductionDate(new SimpleDateFormat("dd-MMM-yyyy").parse(bean.getProductiondate()));
    stockRegister.setOpeningBal(openingBalance);
    stockRegister.setMineralId(Long.parseLong(bean.getMineralId()));
    stockRegister.setQuantityProduced(quantityProduced);
    stockRegister.setTotalQuantity(totalQuantity);
    stockRegister.setBalanceQuantity(balanceQuantity);
    stockRegister.setNoOfFemaleEmp((Integer)bean.getNoOfFemale());
    stockRegister.setNoOfMaleEmp(bean.getNoOfMale());
    stockRegister.setAccidentOccured(bean.getAccidentOccured());
    stockRegister.setAccidentDescription(bean.getDescriptionAccident());
    stockRegister.setCompensationPaid(bean.getCompPaid());
    stockRegister.setCompensationAmt(bean.getCompAmount());
    stockRegister.setCompensationDet(bean.getCompDetails());
    stockRegister.setCumulativeStock(cumulativeStock);  
    System.out.println(".............................."+cumulativeStock+".......................2");

    dimensionStoneService.deleteDimensionStonesOnToday(openDimensionStones);
    dimensionStoneService.deleteDimensionStonesOnToday(todayDimensionStones);
    openDimensionStoneBeans=bean.getOpenDimensionStones();  
    if(openDimensionStoneBeans.size()>bean.getOpenbalance()){
        int size=openDimensionStoneBeans.size();
        int j=(int) bean.getOpenbalance();
        for(int i=(int) bean.getOpenbalance();i<size;i++){
            openDimensionStoneBeans.remove(j);
        }
        bean.setOpenDimensionStones(openDimensionStoneBeans);
        cmd=(Object)bean;
    }       
    openDimensionStones=new ArrayList<DimensionStone>();
    for (Iterator<DimensionStoneBean> iterator = openDimensionStoneBeans.iterator(); iterator.hasNext();) {
        System.out.println("..............................Haiiiii11111.......................");
        DimensionStoneBean dimensionStoneBean = iterator.next();
        DimensionStone dimensionStone=new DimensionStone();
        dimensionStone.setStoneNo(Long.parseLong(((Integer)dimensionStoneBean.getStoneNo()).toString()));
        dimensionStone.setLength(dimensionStoneBean.getLength());
        dimensionStone.setBreadth(dimensionStoneBean.getBreadth());
        dimensionStone.setHeight(dimensionStoneBean.getHeight());
        dimensionStone.setDimension(dimensionStoneBean.getDimension());
        dimensionStone.setIsIssued(dimensionStoneBean.getIsIssued());
        dimensionStone.setStockType("opening");
        dimensionStone.setStockRegisterId(stockRegister.getStockRegisterId());
        dimensionCumulativeVolume=dimensionCumulativeVolume+dimensionStoneBean.getDimension();
        openDimensionStones.add(dimensionStone);
    }       
    todayDimensionStoneBeans=bean.getTodayDimensionStones();    
    if(todayDimensionStoneBeans.size()>bean.getTodayproduction()){
        int size=todayDimensionStoneBeans.size();
        int j=(int) bean.getTodayproduction();
        for(int i=(int) bean.getTodayproduction();i<size;i++){
            todayDimensionStoneBeans.remove(j);
        }
        bean.setTodayDimensionStones(todayDimensionStoneBeans);
        cmd=(Object)bean;
    }
    todayDimensionStones=new ArrayList<DimensionStone>();
    for (Iterator<DimensionStoneBean> iterator = todayDimensionStoneBeans.iterator(); iterator.hasNext();) {
        System.out.println("..............................Haiiiii22222.......................");
        DimensionStoneBean dimensionStoneBean = iterator.next();
        DimensionStone dimensionStone=new DimensionStone();
        dimensionStone.setStoneNo(Long.parseLong(((Integer)dimensionStoneBean.getStoneNo()).toString()));
        dimensionStone.setLength(dimensionStoneBean.getLength());
        dimensionStone.setBreadth(dimensionStoneBean.getBreadth());
        dimensionStone.setHeight(dimensionStoneBean.getHeight());
        dimensionStone.setDimension(dimensionStoneBean.getDimension());
        dimensionStone.setIsIssued(dimensionStoneBean.getIsIssued());
        dimensionStone.setStockType("current");
        dimensionStone.setStockRegisterId(stockRegister.getStockRegisterId());
        dimensionCumulativeVolume=dimensionCumulativeVolume+dimensionStoneBean.getDimension();
        todayDimensionStones.add(dimensionStone);
    }   
    if(flag2){
        System.out.println(".............................."+dimensionCumulativeVolume+".......................3");
        stockRegister.setCumulativeStock(dimensionCumulativeVolume);
    }       
    stockRegisterService.saveOrupdateStockRegister(stockRegister);      
    dimensionStoneService.saveOrupdateDimensionStones(openDimensionStones);
    openDimensionStoneBeans.clear();
    dimensionStoneService.saveOrupdateDimensionStones(todayDimensionStones);
    todayDimensionStoneBeans.clear();
    HttpSession session=req.getSession();
    String appId=(String) session.getAttribute("applicationId");
    String serviceId=(String) session.getAttribute("serviceId");
    String mineralIdAndName=bean.getMineralId()+":"+bean.getMineralName();
    return new ModelAndView(new InternalResourceView("updateStock.c?appId="+appId+"&serviceId="+serviceId+"&mineralIdAndName="+mineralIdAndName));
}
@Override
protected ModelAndView processCancel(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)
throws Exception {

    UpdateStockBean bean=(UpdateStockBean)command;
    String cancelCheck=request.getParameter("cancelCheck");
    HttpSession session=request.getSession();
    String appId=(String) session.getAttribute("applicationId");
    String serviceId=(String) session.getAttribute("serviceId");
    String mineralIdAndName=bean.getMineralId()+":"+bean.getMineralName();
    if(cancelCheck.equals("1")){
        response.sendRedirect("tabs.c?action=home_tab_emp");
        return new ModelAndView(new InternalResourceView("tabs.nic?action=home_tab_emp"));
    }else if(cancelCheck.equals("2")){
        return new ModelAndView(new InternalResourceView("updateStock.c?appId="+appId+"&serviceId="+serviceId+"&mineralIdAndName="+mineralIdAndName));
    }else{
        response.sendRedirect("tabs.nic?action=mineralSelect&appId="+appId+"&serviceId="+serviceId);
        return new ModelAndView(new InternalResourceView("tabs.c?action=mineralSelect&appId="+appId+"&serviceId="+serviceId));
    }         
}
@Override
protected void validatePage(Object command, Errors errors, int page) {
    UpdateStockValidator updateStockValidator=new UpdateStockValidator();          
    switch(page){
    case 0:          
        updateStockValidator.validateFormStart(command, errors);
        break; 
    case 1:
        break;
    case 2:
        updateStockValidator.validateForm2(command, errors);
        break;           
    case 3:
        updateStockValidator.validateForm3(command, errors);
        break;    
    case 4:          
        updateStockValidator.validateFormStart(command, errors);
        break;       
    }
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked"})
protected Map referenceData(HttpServletRequest request, Object command,Errors errors, int page) throws Exception {

    Map map = new HashMap();
    UpdateStockBean bean = (UpdateStockBean)command;
    String applicationId=(String) request.getSession().getAttribute("applicationId");
    String mineralId=bean.getMineralId();
    Date productionDate=new Date();        
    Calendar cal = new GregorianCalendar();
    cal.setTime(productionDate);
    cal.add(Calendar.DAY_OF_MONTH, -30);
    Date today30 = cal.getTime(); 
    map.put("stockRegisters", stockRegisterService.stockRegisterBetweenTwoDaysWithApplicationId(applicationId,mineralId,today30,productionDate));      
    map.put("ckeckOpeningBalance",stockRegisterService.retrieveDataBeforeProductionDate(applicationId,mineralId,productionDate));  
    map.put("ckeckDimensionStone",mineralService.getMineralByApplicationId(applicationId));
    map.put("mineralList",mineralService.getMineralObjectsByApplicationId(applicationId));
    openDimensionStoneBeans=bean.getOpenDimensionStones();
    if(openDimensionStoneBeans.size()>bean.getOpenbalance()){
        int size=openDimensionStoneBeans.size();
        int j=(int) bean.getOpenbalance();
        for(int i=(int) bean.getOpenbalance();i<size;i++){             
            openDimensionStoneBeans.remove(j);
        }      
        bean.setOpenDimensionStones(openDimensionStoneBeans);
        command=(Object)bean;
    }
    todayDimensionStoneBeans=bean.getTodayDimensionStones();  
    if(todayDimensionStoneBeans.size()>bean.getTodayproduction()){
        int size=todayDimensionStoneBeans.size();
        int j=(int) bean.getTodayproduction();
        for(int i=(int) bean.getTodayproduction();i<size;i++){             
            todayDimensionStoneBeans.remove(j);
        }      
        bean.setTodayDimensionStones(todayDimensionStoneBeans);
        command=(Object)bean;
    }
    return map;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
protected ModelAndView showForm(HttpServletRequest req,HttpServletResponse res, BindException be) throws Exception {
    HttpSession ses = req.getSession();
    Map pageMap = new HashMap();
    pageMap.put("erType", "");
    pageMap.put("pageType", "");
    if(ses.getAttribute("connection") == null){
        pageMap.put("erType", "sessionExpired");
        //pageMap.put("pageType", "inner");
        return new ModelAndView("page1",pageMap);
    }
    try{
        if(ses.getAttribute("loginType").toString().trim().equals("Employee")){
        }else if(ses.getAttribute("loginType").toString().trim().equals("Applicant")){
        }else if(ses.getAttribute("loginType").toString().trim().equals("Agent")){
        }
    }catch (Exception e){e.printStackTrace();return new ModelAndView(new InternalResourceView("login.nic"));}
    return super.showForm(req, res, be);
}
}

这里是变量

List<DimensionStone> openDimensionStones=new ArrayList<DimensionStone>();
List<DimensionStone> todayDimensionStones=new ArrayList<DimensionStone>();
float cumulativeStockOrg;
boolean flag1;
boolean flag2;
是初始化的,执行后不会清除。也就是说,变量的值也存在于另一次执行中。因此,程序逻辑无法正常工作

配置文件是

<beans>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
  <prop key="updateStock.c">UpdateStockController</prop>
</props>
</property>
</bean>

    <bean id="UpdateStockController" class="mams.web.UpdateStockController">
<property name="commandName"><value>updateStock</value></property>
<property name="commandClass">
    <value>mams.web.beans.UpdateStockBean</value>
</property>
<property name="stockRegisterService" ref="StockRegisterService"></property>
<property name="dimensionStoneService" ref="DimensionStoneService"></property>
<property name="mineralService" ref="MineralService"></property>
<property name="validator" ref="UpdateStockValidator"></property>
<property name="pages">
<list>
<!--      <value>showMineralsForStock</value>-->
      <value>updateStock</value>
      <value>addOrEditOpenBalane</value>
      <value>addOrEditOpenDimensionStone</value>
      <value>addOrEditTodayDimensionStone</value>
      <value>updateStock</value>     
</list>
</property>
</bean>
Spring控制器和Servlet一样是单例的。每个控制器类型只有一个实例在所有用户之间共享。它们必须是线程安全的

因此,只要将类字段移动到相应的方法中,问题就会迎刃而解


正如Bhushan Bhangale所提到的,如果您想在HTTP请求之间为同一用户保留某个变量的状态,那么您可以将该变量存储在HTTP会话中。

Spring控制器是单例的,因此如果您在方法执行中依赖全局变量而没有线程安全实现,那么您就做错了

你会经历意想不到的行为


将这些变量设置为您需要的方法的本地变量,这样您就可以了。

正如其他人所提到的,您的控制器应该是无状态的,即不依赖类变量来存储状态


我注意到您在不同的方法中使用变量-如果希望在请求之间存储状态,通常的方法是使用会话对象存储数据。

如果愿意,发布完整的类。您的Spring配置文件也会有所帮助。