2016-03-28 174 views
-1

我将在JSP页面中获得的变量值传递给servlet页面。我使用会话。但它给出以下NullPointerException将变量值从JSP传递到Servlet

java.lang.NullPointerException 
    com.google.api.client.http.GenericUrl.appendParam(GenericUrl.java:599) 
    com.google.api.client.http.GenericUrl.addQueryParams(GenericUrl.java:582) 
    com.google.api.client.http.UriTemplate.expand(UriTemplate.java:346) 
    com.google.api.client.http.UriTemplate.expand(UriTemplate.java:259) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequestUrl(AbstractGoogleClientRequest.java:266) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequest(AbstractGoogleClientRequest.java:301) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
    com.translator.api.TranslatorApi.getTranslate(TranslatorApi.java:66) 
    control.TextTranslation.doPost(TextTranslation.java:47) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

imageExtract.jsp

</div> 
     <div class="row"> 
      <div id = "display" class="col-lg-8 center-block "> 
      <% 
      String extracted = (String) request.getAttribute("extractedText"); 
      session.setAttribute("text", extracted); 

      %> 
       <textarea maxlength="200" class=" form-control " name="msg" rows="20" id="Extract-textarea" ><%=extracted %> </textarea> 

      </div> 
    </div> 

TextTranslate.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    PrintWriter out = response.getWriter(); 
    String language = "ES"; 
    HttpSession extractedText = request.getSession(); 
    String imageName = (String) extractedText.getAttribute("extractedText"); 
    System.out.println("this is so stupid"); 
    System.out.println("This is "+imageName); 
    TranslatorApi translation = new TranslatorApi(); 

    String outputText = translation.getTranslate(imageName, language); 
    System.out.println("Second"+outputText); 
    request.setAttribute("outputText", outputText); 
    RequestDispatcher sndValue = request.getRequestDispatcher("/translation.jsp"); 
    sndValue.forward(request, response); 

} 

的问题是,会话值不会传递到Servlet,这给NullpointerException。为什么会发生这种情况?

+0

哪个值的问题? 'text'或'extractedText'? – brso05

+0

请避免在JSP中使用普通的java。 JSTL在它内部替换Java方面做得很好。 –

+0

您正在设置一个名为'text'的会话属性,并*获得一个名为'extractedText'的会话属性。这就是为什么它是'空'。 –

回答

2

正在设置的会话变量的名称只是“文本”,但您试图访问代码中的“extractedText”属性。 “文本”属性根本不被访问,只是设置。

上面的代码中似乎没有设置会话中的extractedText属性。因此,它只是简单地通过imageName变量向您的Google API返回空值,然后这当然会失败。

0

您只能获取已设置的属性值,您已设置outputText的属性,因此您需要获取该属性值。

request.setAttribute("outputText", outputText); 

更改您的代码来纠正的getAttribute

<div class="row"> 
     <div id = "display" class="col-lg-8 center-block "> 
     <% 
     String extracted = (String) request.getAttribute("outputText"); 
     session.setAttribute("text", extracted); 

     %> 
      <textarea maxlength="200" class=" form-control " name="msg" rows="20" id="Extract-textarea" ><%=extracted %> </textarea> 

     </div> 
</div> 

使用JSTL是标准,并帮助清理你的HTML代码..

使用JSTL你的代码,所以你可以看到有多少是简单正在使用jstl。

<div class="row"> 
     <div id = "display" class="col-lg-8 center-block "> 
      <textarea maxlength="200" class=" form-control " name="msg" rows="20" id="Extract-textarea" > 
      <c:out value="${outputText}"> 
      </textarea> 
     </div> 
    </div> 

Simple tutorial for using and setting up jstl