2012-05-20 114 views
1

我真的很困惑,为什么这是抛出这个特殊的异常。如果我将servlet直接指向另一个JSP,那么它工作正常。下面是我得到Servlet.service()抛出NullPointerException

17:13:51,190 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ProjectServlet].[jsp]] (http-localhost-127.0.0.1-8080-2) Servlet.service() for servlet jsp threw exception: java.lang.NullPointerException 
    at org.apache.jsp.createProfile_jsp._jspService(createProfile_jsp.java:74) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) [jbossweb-7.0.13.Final.jar:] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) [jbossweb-7.0.13.Final.jar:] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:840) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:622) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:560) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:488) [jbossweb-7.0.13.Final.jar:] 
    at ecollaborator.Servlet.CreateAccountServlet.gotoPage(CreateAccountServlet.java:55) [classes:] 
    at ecollaborator.Servlet.CreateAccountServlet.doPost(CreateAccountServlet.java:45) [classes:] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0] 

眼下错误的堆栈跟踪,我在那里有一个提示用户创建一个帐户页面时,JSP看起来是这样的。这就是所谓的createAccount.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 

<% String type = (String) request.getParameter("type");%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<b><font size="6"><center>E-Collaborator</center></font></b> 
</head> 
<body> 
<form name='createAccount' action="CreateAccountServlet" method="post"> 
    <table> 
     <tr> 
      <td>Create Account<td> 
     </tr> 
     <tr> 
      <td>Username:</td><td><input type="text" name="username" /></td> 
     </tr> 
     <tr> 
      <td>Password:</td><td><input type="password" name="password" /></td> 
     </tr> 
     <tr> 
      <td>Type:</td> 
      <td> 
       <select id="acctype" name="acctype"> 
       <option></option> 
       <option>Collaborator</option> 
       <option>Consumer</option> 
       <option>ServiceProvider</option> 
       </select> 
      </td> 
     </tr> 
    </table> 
    <input type="submit" value="Submit"/> 
    <input type = "hidden" name="createAccount" value="true"> 
</form> 
</body> 
</html> 

它被转发到这个servlet,其中被抛出在GotoPage记述方法的误差,在dispatcher.forward命令。

package ecollaborator.Servlet; 

import java.io.IOException; 

import javax.ejb.EJB; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import ecollaborator.Entity.*; 
import ecollaborator.Session.*; 

@WebServlet("/CreateAccountServlet") 
public class CreateAccountServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    @EJB 
    private Admin admin; 

    public CreateAccountServlet() { 
     super(); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     boolean isForwarded = false; 

     String createAccount = request.getParameter("createAccount"); 
     if(createAccount != null && createAccount.equals("true")) 
     { 

      String username = (String)request.getParameter("username"); 
      String password = (String)request.getParameter("password"); 
      String type = (String)request.getParameter("acctype"); 

      User u = new User(username,password,type); 
      admin.createAccount(u); 


      if(!isForwarded) 
      { 
       request.setAttribute("type", type); 
       isForwarded = gotoPage("/createProfile.jsp", request, response); 
      } 
     } 

    } 

    private boolean gotoPage(String address, HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException 
     { 
       RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address); 
       dispatcher.forward(request, response); 
       return true; 
     } 

} 

我该如何解决这段代码,以避免碰到这个错误?我的其他servlet使用相同的gotoPage函数并转发到JSP就好了。

+0

错误发生在createProfile.jsp中。不要将scriptlet放入JSP中。并查看生成的createProfile_jsp.java文件的第74行以了解错误。 gotoPage方法与此异常无关。 –

回答

2

尝试更换的getParameter的getAttribute在JSP

<% String type = (String) request.getAttribute("type");%> 

,并删除行:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 

,并检查

的getParameter和的getAttribute不同的方法

http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/ServletRequest.html

+0

修复它,谢谢! – user906153

+0

没问题!!! :) – Nurlan

-1

在viewpage.jsp JST检查 迭代器引用ITR已经assinged用迭代方法ArrayList对象或不 作为像 ITR = al.iterator();

相关问题