您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 项目开发中遇到的问题及解决方法V1.1版
瀚博微创公司项目开发中遇到的问题及解决方法版本号:V1.1版本日期:2010-8-24瀚博微创公司哈尔滨工程大学21号楼122实验室共26页当前第1页1、多用户同时增加,如何保证不进入重复数据。(总结人:何丽丽总结日期:2010-7-21)(修改人:孙宏旭修改日期:2010-8-23)这个问题主要是指在增加某条记录时,而该记录有类似自动生成的订单号(有特殊含义)的字段时怎么避免向数据库中添加的记录有重复订单号的问题。下面是解决该问题的方法:1)首先,应将订单号字段在数据库中设定成唯一索引(unique);2)然后,在获取订单号的方法上添加同步机制synchronized,添加同步机制的位置如下图所示:3)最后,在执行增加方法的时候调用获取订单号的方法得到一个订单号,建议先对该订单号的唯一性进行判断,即检查数据库中是否已有该订单号的记录,若没有,则执行增加方法,否则返回重新增加。2、多用户同时操作,如何保证修改删除不报错。(总结人:何丽丽总结日期:2010-7-21)由于修改和删除数据时都要先查询该数据,所以在底层实现类里查询方法尽量返回ListObject类型,即使是返回一条数据时也应如此。例如:publicListElseInfogetOwnerEI(StringownerEI){returnhibernateTemplate().find(fromElseInfowhereownerEI=?,ownerEI);}3、同一用户不能在多台机器上同时登录,不同用户不做限制。(总结人:何丽丽总结日期:2010-7-21)可以在数据库表里增加一个登录标识字段,例如用户已登录则将该字段可以标识为“1”,未登录则将该字段标识为“0”。每次用户登录时都要对登录标识字段进行判断,以便控制同一用户不能在多台机器上同时登录。4、退出系统、关闭IE、session过期销毁时,都要将相应的用户解锁。(总结人:何丽丽总结日期:2010-7-21)(1)关闭IE:瀚博微创公司哈尔滨工程大学21号楼122实验室共26页当前第2页$(document).ready(function(){当关闭浏览器时自动退出系统$(window).unload(function(){$.get(/HanbManageSys/logout.action?serialId=+newDate().toString());});});(2)正常退出系统://退出系统publicStringlogout()throwsException{StringuserCode=(String)session.get(userCode);if(userCode!=null){Useruser=userManager.getUser(userCode);user.setIsLogin(否);userManager.updateUser(user);session.clear();}returnSUCCESS;}(3)session过期销毁时:写一个session监听器,在里面加一个session销毁的方法。在web.xml中listenerlistener-classcom.Hanb.HanbManageSys.Util.SessionTimeOut/listener-class/listener写一个工具类,该类要实现接口HttpSessionListener,并重写下面两个方法:publicvoidsessionCreated(HttpSessionEventse){System.out.println(session已建立...);}publicvoidsessionDestroyed(HttpSessionEventse){StringuserCode=(String)se.getSession().getAttribute(userCode);//数据库连接对象Connectionconn=null;try{Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup(java:comp/env/jdbc/HanbManageSys);conn=ds.getConnection();conn.setAutoCommit(false);Statementstmt=conn.createStatement();Stringsql=updateYW_PSWDsetPSWD_SFDL='否'wherePSWD_YHDM=+'+userCode+';stmt.executeUpdate(sql);conn.commit();瀚博微创公司哈尔滨工程大学21号楼122实验室共26页当前第3页se.getSession().removeAttribute(userCode);System.out.println(session已销毁...);}catch(NamingExceptione1){e1.printStackTrace();}catch(SQLExceptione1){e1.printStackTrace();}finally{if(conn!=null){try{//关闭数据库连接对象conn.close();}catch(SQLExceptione){e.printStackTrace();}}}}5、显示记录时,有多少行显示多少行,不要显示一堆空行。(总结人:何丽丽总结日期:2010-7-21)这是flex中会遇到的问题,一般来说用js不会遇到此问题,但要注意的是:如果是用json传的数据,应该首先清空,然后再插入问题。6、Session过期时间在什么地方改?(总结人:曲东旭总结日期:2010-7-21)在/WEB-INF目录下的web.xml文件中进行如下设置(最好跟在session监听器后):session-configsession-timeout30/session-timeout/session-config这里的30是指30分钟。7、Session过期后,再进行操作应重新登录。(总结人:曲东旭总结日期:2010-7-21修改日期:2010-8-24)①action页面跳转,设置拦截器:建立授权拦截器AutenticationInterceptor.javapackagecom.Hanb.MessManageSys.Interceptor;瀚博微创公司哈尔滨工程大学21号楼122实验室共26页当前第4页importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSession;importorg.apache.struts2.ServletActionContext;importcom.Hanb.MessManageSys.Model.User;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionInvocation;importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;publicclassAuthenticationInterceptorextendsAbstractInterceptor{/****/privatestaticfinallongserialVersionUID=8289867972442365368L;@OverridepublicStringintercept(ActionInvocationinvocation)throwsException{HttpServletRequestrequest=(HttpServletRequest)ServletActionContext.getRequest();HttpSessionsession=request.getSession();Useruser=(User)session.getAttribute(user);Stringpath=request.getServletPath();String[]paths=path.split(/);StringpostAction=paths[paths.length-1];if(postAction.contains(Ajax)){if(user==null){returnajaxLogin;}else{returninvocation.invoke();}}else{if(user==null){returnAction.LOGIN;}else{returninvocation.invoke();}}}瀚博微创公司哈尔滨工程大学21号楼122实验室共26页当前第5页}这样,当session中的user为空时,将直接结束action处理过程,并返回结果“login”然后在struts2的xml配置文件中配置拦截器以及设置全局变量:?xmlversion=1.0encoding=UTF-8?!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN=messagenamespace=/messageextends=struts-default!--配置拦截器Interceptor--interceptors!--权限验证拦截器--interceptorname=authenticationclass=com.Hanb.MessManageSys.Interceptor.AuthenticationInterceptor/interceptor/interceptors!--配置全局result--global-resultsresultname=result/jsp/result.jsp/resultresultname=builder/jsp/builder.jsp/resultresultname=login/jsp/login.jsp/resultresultname=ajaxLogin/jsp/ajaxLogin.jsp/result/global-results!--留言Message相关Action--actionname=*Messageclass=com.Hanb.MessManageSys.Action.MessageActionmethod={1}Messageinterceptor-refname=authentication/interceptor-refinterceptor-refname=defaultStack/interceptor-ref/action/package/struts这里的login.jsp应为登陆页面,在每个action中引入权限拦截器的同时不要忘记引入默认的拦截器栈。②如果是Ajax提交,注意Ajax提交时处理action的命名规则,必须包含Ajax字符串,在提交时权限拦截器才能正确处理,此时返回结果集ajaxLogin,映射到页面ajaxLogin.jsp。此页面只包含如下字符串notLogin用来在JavaScript中判断是否有权限,从而进行跳转。ajaxLogin.jsp其页面代码如下:%@pagelanguage=javacontentType=text/plain;charset=UTF-8pageEncoding=UTF-8%瀚博微创公司哈尔滨工程大学21号楼122实验室共26页当前第
本文标题:项目开发中遇到的问题及解决方法V1.1版
链接地址:https://www.777doc.com/doc-1983282 .html