我开发了一个系统,在本地测试都没有问题,但是放到远程数据库上系统就一直崩溃,经测试原因似乎是出在登录后找不到记录登录用户信息的session上,我的源代码是这样的
LoginAction.java:(部分代码)HttpSession session = request.getSession(false); if (session != null) { session.invalidate();
}
UserContainer existingContainer = new UserContainer();
session = request.getSession(true);
existingContainer.setUserView(userView);
synchronized (this) {
session.setAttribute(
IConstants.USER_CONTAINER_KEY,
existingContainer);
}
以上是登录的servlet,主要是将登陆者的信息放到session上,登录的首页显示没有问题,但是一旦访问了带有读取session信息的servlet的时候就开始出错了,比如说这样的servlet, UserContainer existingContainer = null; existingContainer = getUserContainer(request);
qryResultContainerHm = existingContainer.getQryResultContainerHm();
UserView userView = existingContainer.getUserView();
long userid = userView.getUser_id();一到 这里系统就崩掉了。
有的时候 到这里 if (request.getSession().getAttribute(IConstants.USER_CONTAINER_KEY)
== null) {
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError(IConstants.ERROR_SESSIONINVALIDATION_KEY));
saveErrors(request, errors);
return mapping.findForward(IConstants.AUTHENTICATE_KEY);
} 也报错,有的时候还出现数据库链接失败的提示
所以我怀疑是出在session上面,请各位大虾帮帮忙,帮我看看是什么原因引起的?问题的关键是为什么本地测试都没有问题,到了服务器上就不行了
LoginAction.java:(部分代码)HttpSession session = request.getSession(false); if (session != null) { session.invalidate();
}
UserContainer existingContainer = new UserContainer();
session = request.getSession(true);
existingContainer.setUserView(userView);
synchronized (this) {
session.setAttribute(
IConstants.USER_CONTAINER_KEY,
existingContainer);
}
以上是登录的servlet,主要是将登陆者的信息放到session上,登录的首页显示没有问题,但是一旦访问了带有读取session信息的servlet的时候就开始出错了,比如说这样的servlet, UserContainer existingContainer = null; existingContainer = getUserContainer(request);
qryResultContainerHm = existingContainer.getQryResultContainerHm();
UserView userView = existingContainer.getUserView();
long userid = userView.getUser_id();一到 这里系统就崩掉了。
有的时候 到这里 if (request.getSession().getAttribute(IConstants.USER_CONTAINER_KEY)
== null) {
errors.add(
ActionErrors.GLOBAL_ERROR,
new ActionError(IConstants.ERROR_SESSIONINVALIDATION_KEY));
saveErrors(request, errors);
return mapping.findForward(IConstants.AUTHENTICATE_KEY);
} 也报错,有的时候还出现数据库链接失败的提示
所以我怀疑是出在session上面,请各位大虾帮帮忙,帮我看看是什么原因引起的?问题的关键是为什么本地测试都没有问题,到了服务器上就不行了
用try{}catch()详细的错误!
可能服务器的配置不同
javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause java.sql.SQLException
com.ems.struts.util.DBConnection.getConnection(DBConnection.java:42)
com.ems.struts.bodao.UserBODAO.findByNamePwd2(UserBODAO.java:232)
com.ems.struts.service.EmsServiceImpl.authenticateLogin2(EmsServiceImpl.java:142)
com.ems.struts.action.LoginAction.execute(LoginAction.java:73)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)这个是session报错:
javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause java.lang.NullPointerException
com.ems.struts.action.FindAllExhiAction.execute(FindAllExhiAction.java:99)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
你做一下try 处理 尽量全面些
然后输出异常~~
然后在eclipse中远程调试。
java.sql.SQLException
com.ems.struts.util.DBConnection.getConnection(DBConnection.java:42)检查DBConnection.getConnection这个方法
项目 ems 中具有不受限制的类路径变量“TOMCAT_HOME/common/lib/jsp-api.jar”
项目 ems 中具有不受限制的类路径变量“TOMCAT_HOME/common/lib/servlet-api.jar”
在解决构建路径错误之前不能构建该项目是不是这个原因呢?这是什么意思呢
登录的脚本没有问题
HttpSession session = request.getSession(false);if (session != null) {session.invalidate();
}
UserContainer existingContainer = new UserContainer();
session = request.getSession(true);
existingContainer.setUserView(userView);
synchronized (this) {
session.setAttribute(
IConstants.USER_CONTAINER_KEY,
existingContainer);
},到这里session中是有existingContainer,的,request也正常,然后登录后的定向到findallcustomer.do
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
......
UserContainer existingContainer = null; existingContainer = getUserContainer(request);
qryResultContainerHm = existingContainer.getQryResultContainerHm();
UserView userView = existingContainer.getUserView();
long userid = userView.getUser_id();
.......}
到这里request还是正常,request中的session还是记录着existingContainer,里面也有userView,可是当我访问其他的servlet的时候,比如findallexhi.do
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
......
从HttpServletRequest request这里开始request中的session就没有了existingContainer,当然也就没有了userView,导致了程序到了 long userid = userView.getUser_id();报错了,请问这是怎么一回事?哪位大虾指点一下,重申一下,以上的问题只是在远端服务器上出现,在本地测试都是正常的