问题描述
在这个servlet里使用@EJB(mappedName="logintest")LoginTestRemotelt=null;来调用EJB,Weblogice服务器显示出现空指针异常。而我在这个servlet里从JNDI树中获取远程接口对象就运行正常,请各位大哥大姐帮帮忙,倒底怎么回来,老师也调了好半天,也没有弄好。---------------------------------------------------------------代码如下:----------------------------------------------------------------packageLoginControl;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.Hashtable;importjava.util.List;importjava.util.Map;importjavax.ejb.EJB;importjavax.naming.Context;importjavax.naming.InitialContext;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importLoginModel.*;publicclassLoginManagementextendsHttpServlet{//@EJB(mappedName="logintest")//LoginTestRemotelt=null;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Hashtableht=newHashtable();ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");ht.put(Context.PROVIDER_URL,"t3://localhost:7001");Contextctx;try{ctx=newInitialContext(ht);LoginTestRemotelt=(LoginTestRemote)ctx.lookup("logintest#LoginModel.LoginTestRemote");request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");RequestDispatcherrd=null;Stringuserid=request.getParameter("userid");Stringuserpass=request.getParameter("userpass");Stringforward=null;HttpSessionsession=request.getSession();Mapm=lt.Result(userid,userpass);//注意如果是使用依赖注入就是这里跳出空指针异常,从JNDI得到对象运行正常try{if(!m.isEmpty()){if(userid.equals("admi")){forward="./LoginManagements/Manager.jsp";}elseforward="./LoginManagements/Sucess.jsp";session.setAttribute("username",m.get("username"));}}catch(Exceptione){forward="./LoginManagements/Fail.jsp";System.out.println("ok1");}rd=request.getRequestDispatcher(forward);rd.forward(request,response);}catch(Exceptione){}}}
解决方案
解决方案二:
在slevlet里不能真接注入EJB,可以真接从jndi中获取