- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习如何使用 JSP。我遇到了一些毫无意义的事情,至少在我看来是这样:
当我尝试运行时:
response.getWriter().println(m.getDb().printAll());
我在尝试加载有问题的页面时得到这个:
2014-08-16T03:19:59.789+0200|Warning: StandardWrapperValve[servlets.GUI]: Servlet.service() for servlet servlets.GUI threw exception java.lang.NullPointerException
at servlets.GUI.doGet(GUI.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 在 java.lang.Thread.run(Thread.java:744)
但是当我运行时:
response.getWriter().println(m.getOut());
输出是正确的。
两者应该返回相同的结果,因为
class M
{
String out = "";
private OjectDAO db = new ObjectDAO()
public M()
{
db.addAll(TextFileLoader(getServletContext().getRealPath("textfile.xml")));
}
...
System.out.println(db.printAll());
out=db.printAll();
...
public String getOut()
{
return out;
}
...
}
和
class ObjectDAO
{
...
public String printAll()
{
String result = "";
for (WrappedItem item : locDB )
{
result = item.toString() + result + "\n";
}
return result;
}
...
}
为什么在一种情况下有 NullPointer 而在另一种情况下没有?
更多细节:应用程序在 Eclipse Luna 部署的 Glassfish 4 上运行。操作系统:Debian应用程序将文件中的文本加载到 DAO,并尝试将它们从 DAO 加载到 JSP 中。 xml 的路径似乎是正确的。
P.S.: 一开始我以为是 BuildPath 的问题,因为我之前遇到过类似的问题,我把 JDom2.jar 添加到 WEB-INF/lib 后就解决了,但坦率地说,我看不出我可以在哪里添加这次是一个 jar 。有趣的是:即使同时遇到这两个问题,STDOUT 的输出也能无缝工作。
如上所述,我的问题是:
response.getWriter().println(m.getOut());
工作正常。
response.getWriter().println(m.getDb().printAll());
没有。
这两行都放在 servlet“GUI.java”文件中。唯一的区别,至少在我看到的 muc 上是这样的:在第一种情况下,我在字符串通过类 M 中的字符串变量后打印它,在第二种情况下,我尝试直接打印它。
这就是所有的区别。
添加了完整的堆栈跟踪。
Servlet:通用代码,唯一的区别是
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("Started ");
response.getWriter().println("<h1> Header1 </h1>");
response.getWriter().println("<body> Funny body text </body>");
System.out.println(getServletContext().getRealPath("data.xml"));
serverJava.Monitor m = new serverJava.Monitor(getServletContext().getRealPath("data.xml"));
response.getWriter().println("<br> I say:" + m.printHello());
response.getWriter().println(m.getOut());
response.getWriter().println(m.getDb().printAll());
}
现在开始之前:下面的代码只是为了测试,是否一切正常。它不是真的在那里停留。
public M(String s)
{
try
{
XMLFileWrapper xml = new XMLFileWrapper(s);
DataDAO db = new DataDAO();
db.loadFromHDD(xml.retrieveWrappedRootDataFromXML());
System.out.println(db.printAll()); <<<< This yealds output
out=db.printAll();
}catch(Exception e){
e.printStackTrace();
}
}
public DataDAO getDb()
{
return db;
}
public String getOut()
{
return out;
}
.
public class DataDAO
{
public void loadFromHDD(LinkedList<Item> list)
{
locDB.addAll(list);
}
public String printAll()
{
String result = "";
for (Item item : locDB )
{
result = item.toString() + result + "\n";
}
return result;
}
}
DataDAO 从 JDom2 对象中检索内容...虽然我怀疑这与它有任何关系,但方法如下:
public LinkedList<Item> retrieveWrappedRootDataFromXML()
{
LinkedList<Item> result = new LinkedList<Item>();
for ( Element e : getRoot().getChildren() )
{
Item item = new Item();
item.setInfoId(e.getAttributeValue("id"));
item.setName(e.getChildText("name"));
item.setShortName(e.getChildText("short"));
item.setUser(e.getChildText("user"));
result.add(item);
}
return result;
}
最佳答案
让我们从逻辑上解决这个问题。
以下语句可以(理论上)抛出 NullPointerException
,原因如下:
response.getWriter().println(m.getDb().printAll());
response
为 null
。response.getWriter()
返回 null
m
为 null
m.getDb()
为 null
我们可以从 JSP 规范中删除第 1 条和第 2 条。 (除非你做了一些真正奇怪的事情......)
我们可以(暂定地)消除基于此语句的 3:
response.getWriter().println(m.getOut());
在(我假设)类似的环境中工作。这意味着 m
不是 null
。 (尽管考虑到您问题中证据的其他不准确之处,我们无法确定...)
剩下 4 是最可能的原因。检查你是否正确地实现了 getDb()
;例如确保它返回的 ObjectDAO
值不能为 null
。
请注意,我们无法确定任何,因为您问题中的代码片段显然是“虚构的”。它们包含编译器会拒绝的明显拼写错误。因此,我们不能相信它们实际上与您的 JSP 中的实际代码非常相似。
更新
既然您已经发布了 M
类的完整代码,那么 NPE 的原因就从我的页面上跳了出来!
getDb()
方法返回 null
因为 db
没有被初始化。
“但是” 我听到你说“它是!!”。
哦不,不是!您正在将 new DataDAO()
分配给局部变量 db
,而不是 this.db
。
教训:当无可争辩的逻辑告诉您错误的原因必须是 X 时,争论是没有意义的......
关于java - JSP NullPointer StandardWrapperValve[servlets. ] : Servlet. servlet servlet 的 service()。抛出异常 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336278/
在 Tomcat 6/Ubuntu 12.04 上启动 Grails 2.1.0 应用程序时出现以下错误。 Error 500 - Internal Server Error. groovy.lang
在运行 Storm 拓扑时,我收到此错误。拓扑完美运行 5 分钟,没有任何错误,然后失败。我正在使用 Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS as 300 sec i
我有一个 jsp 代码在其中一台机器上运行良好。但是当我复制到另一台机器时,我得到了这个 no such method found 异常。我是 Spring 的新手。有人可以解释我错过了什么吗? 以下
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我的代码在下面给出了一个错误; Exception in thread "main" java.lang.NoSuchMethodError: com/myApp/Client.cypherCBC(L
我正在尝试一个 Restful web 服务示例,所以当我要访问 url 时,我遇到了异常 java.lang.NoSuchMethodError: jersey.repackaged.com.goo
我正在将一个 Spring web 项目转换为一个 Maven 项目,但我收到了这个错误: java.lang.NoSuchMethodError: org.jboss.logging.Logger.
在我的项目中,我有一个像这样的枚举: public enum MyEnum { FIRST(1), SECOND(2); private int value; private MyEnum(int v
我创建了这个简单的示例,用于读取 Linux 正常运行时间: public String getMachineUptime() throws IOException { String[] di
我正在使用 Eclipse,并且正在使用 Java。我的目标是使用 bogoSort 方法对 vector 进行排序在一个 vector (vectorExample)中适应我的 vector 类型,
我正在运行以下查询。它显示一条错误消息。如何解决这个错误? ListrouteList=null; List companyList = session.createS
我有以下模型类: @Entity @Table(name="user_content") @org.hibernate.annotations.NamedQueries({ @org.
我有那个错误。这是我的代码: GmailSettingsService service = new GmailSettingsService(APPLICATION_NAME, DOMAIN_NAME
实际上我在执行我的java程序时遇到了下面提到的错误 Exception in thread "pool-1-thread-1" java.lang.ClassCastException: jav
java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.String 我在以下代码中遇到此异常: Strin
我正在尝试从 linkedhashset 中检索随机元素。下面是我的代码,但它每次都给我异常。 private static void generateRandomUserId(Set userIds
我已经完成了 Android 中的代码: List spinnerArray = new ArrayList(); for (int i = 0; i item = (LinkedTreeMap)
这个问题已经有答案了: Explanation of ClassCastException in Java (12 个回答) 已关闭 6 年前。 我已经编写了 java 到 Json 的代码,同时从页
这个问题在这里已经有了答案: ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn (4 个答案) 关闭 6 年前
我在运行时遇到问题来编译这段代码,这给我一个错误,java.lang.Integer 无法转换为 Java.lang.Double。如果有人帮助我更正此代码,我将非常高兴 double x; pu
我是一名优秀的程序员,十分优秀!