出现问题,然后想做一个单元测试,但是不知道‘登录’的单元测试怎么写,网上的单元测试太简单,比较难借鉴,请问,那位大神教教
org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.left_jsp._jspService(left_jsp.java:105)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
#LoginAction 代码#
package org.sx.action;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.sx.dao.ObjectDao;
import org.sx.dto.TRole;
import org.sx.dto.TUser;public class LoginAction extends DispatchAction {ObjectDao objectDao;public ObjectDao getObjectDao() {
return objectDao;
}public void setObjectDao(ObjectDao objectDao) {
this.objectDao = objectDao;
}public HttpSession session;
public Logger log = Logger.getRootLogger();public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {System.out.println("-------开始验证用户信息------------");
log.info("进入登陆--LoginAction");
session = request.getSession();TUser userinfor = (TUser) form;
// 取得账户信息
TUser user = (TUser) objectDao.getObjectForm("from TUser u where u.userName='"
+ userinfor.getUserName()
+ "' and u.userPassword='"
+ userinfor.getUserPassword() + "'");// ******************************************************
// 读取角色ID
if (user == null) {
request.setAttribute("flag", 1);
System.out.println("该用户不存在");log.info("完成登陆失败1--LoginAction");
return mapping.findForward("fail");
} else {
// 取得角色信息(如用户具有多重角色,登录页面应当标明,如不标注,进入action层时,就不知道当取用户的哪种角色!!!)
// List list = objectDao.getObjectList("select ur from TbUserrole ur where ur.userId="+ user.getUserId() + "");
//不为空 就取角色
TRole role=(TRole)objectDao.getObjectForm("from TRole r where r.roleId="+user.getUserRoleId());
String function=role.getRoleFunction();
System.out.println(" 角色 function 功能"+function);
String[] strArray = function.split(",");
int[] a = new int[strArray.length];//读取功能的撒//对应的一个功能表的撒
for(int i=0;i<strArray.length;i++){
System.out.println("--------------"+strArray[i]);
System.out.println("========"+Integer.parseInt(strArray[i]));
a[i]=Integer.parseInt(strArray[i]);
}
for(int j=0;j<a.length;j++){
System.out.println("************"+a[j]);
      ///TFunction functionName=  读取功能的撒//对应的一个功能表的撒
}
if (a.length < 1) {//???????????????????============1
request.setAttribute("flag", 1);
System.out.println("用户没有权限");
log.info("完成登陆失败2--LoginAction");
return mapping.findForward("fail");
} else {System.out.println("用户存在 且有权限");
session.setAttribute("user", user);
              session.setAttribute("role", role);
              session.setAttribute("a", a);
              log.info("完成登陆--LoginAction");
              return mapping.findForward("su");
        }
              }
}
        //************************************************************protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stubreturn mapping.findForward("error");
}
    
public ActionForward logout(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
log.info("注销退出--进入");
//session销毁
if(session!=null){
session.invalidate();
}
log.info("注销退出--完成");
return mapping.findForward("logout");
}
}
#ObjectDao.java
package org.sx.dao;import java.util.List;import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class ObjectDao extends HibernateDaoSupport { // condition为条件,查询一组数据,该方法的返回类型为Object
public Object getObjectForm(String condition) {
List list = null;
Object object = null;
try {
list = getHibernateTemplate().find(condition);
if (list.size() == 1) {
object = (Object) list.get(0);
}
} catch (DataAccessException ex) {
ex.printStackTrace();
}
return object;
}

// condition为条件,查询一组数据,该方法的返回类型为Object
public Object getObjectForm(String condition,String paramater) {
List list = null;
Object object = null;
try {
list = getHibernateTemplate().find(condition,paramater);
if (list.size() == 1) {
object = (Object) list.get(0);
}
} catch (DataAccessException ex) {
ex.printStackTrace();
}
return object;
} // condition为条件,查询多组数据,该方法的返回类型为List
public List getObjectList(String condition) {
List list = null;
try {
list = getHibernateTemplate().find(condition);
} catch (DataAccessException ex) {
ex.printStackTrace();
}
return list;
} // condition为条件,查询多组数据,该方法的返回类型为List
public List getObjectList(String condition, String object) {
List list = null;
try {
list = getHibernateTemplate().find(condition,object);
} catch (DataAccessException ex) {
ex.printStackTrace();
}
return list;
}

// 修改一组数据,该方法的返回类型为boolean
public boolean updateObjectForm(Object object) {
boolean flag = false;
try {
getHibernateTemplate().update(object);
flag = true;
} catch (DataAccessException ex) {
ex.printStackTrace();
}
return flag;
} // 添加一组数据,该方法的返回类型为void
public void insertObjectForm(Object object) {
try {

getHibernateTemplate().save(object);

} catch (DataAccessException ex) {
ex.printStackTrace(); }

} // 删除一组数据,该方法的返回类型为boolean
public boolean deleteObjectForm(Object object) {
try {
getHibernateTemplate().delete(object);
return true;
} catch (DataAccessException ex) {
ex.printStackTrace();
return false;
}
}}
java单元测试登录空指针