麻烦老师帮我看下,为什么是空指针呢?
package com.imooc.sm.global;
import com.imooc.sm.entity.Log;
import com.imooc.sm.entity.Staff;
import com.imooc.sm.service.LogService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Component
@Aspect
public class LogAdvice {
@Autowired
private LogService logService;
@After("execution(* com.imooc.sm.controller.*.*(..)) && !execution(* com.imooc.sm.controller.SelfController.*(..))")
public void operationLog(JoinPoint joinPoint) {
Log log = new Log();
log.setMoudle(joinPoint.getTarget().getClass().getSimpleName());
log.setOperation(joinPoint.getSignature().getName());
HttpServletRequest request = (HttpServletRequest) joinPoint.getArgs()[0];
HttpSession session = request.getSession();
Object obj = session.getAttribute("USER");
Staff staff = (Staff) obj;
log.setOperator(staff.getAccount());
log.setResult("成功");
logService.addOperationLog(log);
}
@AfterThrowing(throwing = "e", pointcut = "execution(* com.imooc.sm.controller.*.*(..))")
public void systemLog(JoinPoint joinPoint, Throwable e) {
Log log = new Log();
log.setMoudle(joinPoint.getTarget().getClass().getSimpleName());
log.setOperation(joinPoint.getSignature().getName());
HttpServletRequest request = (HttpServletRequest) joinPoint.getArgs()[0];
HttpSession session = request.getSession();
Object obj = session.getAttribute("USER");
Staff staff = (Staff) obj;
log.setOperator(staff.getAccount());
log.setResult(e.getClass().getSimpleName());
logService.addSystemLog(log);
}
@After("execution(* com.imooc.sm.controller.SelfController.login(..))")
public void loginLog(JoinPoint joinPoint) {
Log log = new Log();
log.setMoudle(joinPoint.getTarget().getClass().getSimpleName());
log.setOperation(joinPoint.getSignature().getName());
HttpServletRequest request = (HttpServletRequest) joinPoint.getArgs()[0];
HttpSession session = request.getSession();
Object obj = session.getAttribute("USER");
if (obj == null) {
log.setOperation(request.getParameter("account"));
log.setResult("失败");
} else {
Staff staff = (Staff) obj;
log.setOperator(staff.getAccount());
log.setResult("成功");
}
logService.addLoginLog(log);
}
@Before("execution(* com.imooc.sm.controller.SelfController.logout(..))")
public void logoutLog(JoinPoint joinPoint) {
Log log = new Log();
log.setMoudle(joinPoint.getTarget().getClass().getSimpleName());
log.setOperation(joinPoint.getSignature().getName());
HttpServletRequest request = (HttpServletRequest) joinPoint.getArgs()[0];
HttpSession session = request.getSession();
Object obj = session.getAttribute("USER");
if (obj == null) {
log.setOperation(request.getParameter("account"));
log.setResult("失败");
} else {
Staff staff = (Staff) obj;
log.setOperator(staff.getAccount());
log.setResult("成功");
}
logService.addLoginLog(log);
}
}
进不去个人中心哦
正在回答
空指针异常,既获用null去调方法,或属性。那么,同学看到的是哪行报空指针异常呢?
从同学的截图看,
obj为null。那么,我们是在哪里向域中存的呢?
是在下图中的红框位置。
建议同学看一下,是否在下图的红框位置向域中设置了user 呢?如果设置了,建议在前边打印一句输出语句,看看是否执行到这儿了。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | package com.imooc.sm.controller; import com.imooc.sm.entity.Staff; import com.imooc.sm.service.SelfService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @Controller ( "selfController" ) public class SelfController { @Autowired private SelfService selfService; public void toLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher( "login.jsp" ).forward(request, response); } public void main(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher( "index.jsp" ).forward(request, response); } public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String account = request.getParameter( "account" ); String password = request.getParameter( "password" ); Staff staff = selfService.login(account, password); if (staff == null ) { response.sendRedirect( "toLogin.do" ); } else { HttpSession session = request.getSession(); session.setAttribute( "USER" , staff); response.sendRedirect( "main.do" ); System.out.println(staff); } } public void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); session.setAttribute( "USER" , null ); response.sendRedirect( "toLogin.do" ); } public void info(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher( "../info.jsp" ).forward(request, response); } public void toChangePassword(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher( "../change_password.jsp" ).forward(request, response); } public void changePassword(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String password = request.getParameter( "password" ); String password1 = request.getParameter( "password1" ); HttpSession session = request.getSession(); Staff staff = (Staff) session.getAttribute( "USER" ); if (!staff.getPassword().equals(password)) { response.sendRedirect( "toChangePassword.do" ); } else { selfService.changePassword(staff.getId(), password1); response.sendRedirect( "../logout.do" ); response.getWriter().print( "<script type=\"text/javascript\">parent.location.href=\"../logout.do\"</script>" ); ; } } } |
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧