STRUTS1的javax.servlet.ServletException异常

songbob 2009-06-26 03:02:27
版本信息:
=========================================================================
JDK: 1.6.0_14-b08
TOMCAT: 6.0.20
STRUTS: 1.3.10

页面上报的异常如下
=========================================================================
javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

java.lang.NullPointerException
org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:289)
org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:357)
org.apache.struts.chain.commands.CreateActionForm.execute(CreateActionForm.java:92)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)



WEB.XML
=========================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>testStruts1</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- Default -->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
</web-app>



struts-config.xml
=========================================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="visitorsForm" type="forms.visitorsForm" />
</form-beans>
<action-mappings>
<action path="/login" scope="request"
name="visitorsForm" type="actions.visitorsAction">
<forward name="success" path="/visitors.jsp" />
</action>
</action-mappings>
</struts-config>

然后我的三个类文件:
visitorsAction.java
visitorsForm.java
ConnMySql.java
分别如下

visitorsAction.java
=========================================================================
package actions;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;

import jdbc.ConnMySql;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import forms.visitorsForm;

import java.sql.*;
import java.util.ArrayList;;
public class visitorsAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

visitorsForm dbForm = null;
Connection conn = ConnMySql.getConn();
Statement st;
ArrayList<visitorsForm> list = null;
try {
st = conn.createStatement();
String sql = "select * from visitors";
ResultSet rs = st.executeQuery(sql);
list = new ArrayList<visitorsForm>();
while(rs.next()){
// set dbForm
dbForm = new visitorsForm();
dbForm.setId(rs.getString("id"));
dbForm.setName(rs.getString("name"));
dbForm.setMessageDate((rs.getTimestamp("messageDate")).toString());
dbForm.setMessage(rs.getString("message"));
list.add(dbForm);
}
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("visitorsData", list);
String target = "success";

return mapping.findForward(target);
}

}
visitorsForm.java
=========================================================================

package forms;
import org.apache.struts.action.ActionForm;

public class visitorsForm extends ActionForm {

private String id = null;
private String name = null;
private String messageDate = null;
private String message = null;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessageDate() {
return messageDate;
}
public void setMessageDate(String messageDate) {
this.messageDate = messageDate;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

ConnMySql .java
=========================================================================
package jdbc;
import java.sql.*;

public class ConnMySql {

public static Connection getConn(){
String URL = "JDBC:MYSQL://LOCALHOST:3306/mytest";
String userName = "root";
String passWord = "admin";
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, userName,
passWord);
System.out.println("connMySql Success!");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
visitor.jsp
===================================================================
<%@ page contentType="text/html;charset=gb2312" language="java"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>

<html>
<head>
<title>GetDbForm</title>
</head>
<body>

<table border="0" width="100%">
<tr>
<td>用户ID</td>
<td>用户</td>
<td>留言日期</td>
<td>留言内容</td>

</tr>
<logic:present name="visitorsData" property="dbForm">
<logic:iterate id="visitor" name="visitorsData" property="dbForm">
<tr>
<td><bean:write name="visitor" property="id" /></td>
<td><bean:write name="visitor" property="name" /></td>
<td><bean:write name="visitor" property="messageDate" /></td>
<td><bean:write name="visitor" property="message" /></td>
</tr>
</logic:iterate>
</logic:present>
</table>

</body>
</html>
=============================================================================
我DEBUG在ECLIPSE的ACTION里打断点没停,应该是在配置的问题吧?请各位大大们指教.
然后我把STRUTS版本从1.3升到2.0问题依然没解决.
...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sangshusen_1988 2009-06-27
  • 打赏
  • 举报
回复
你给你的form加个无参构造方法看看
longtenggdf 2009-06-27
  • 打赏
  • 举报
回复
按照你提供的东西在myeclipse7.0上搭建了测试项目 没有发现你所说的异常。楼主的struts1还要好好研究下 用actionform作为dto不符合编程习惯啊。另外struts1.3与struts2.0是完全两个没有多少关系的版本。

[Quote=引用 2 楼 anhy 的回复:]
<action path="/login" scope="request"
name="visitorsForm" type="actions.visitorsAction">
<forward name="success" path="/visitors.jsp" />
</action>
改为
<action path="/login" scope="request"
type="actions.visitorsAction">
<forward name="success" path="/visitors.jsp" />
</action>
[/Quote]

想知道知道2楼这样解决有什么意义.这里给visitorsAction配置了ActionFrom,如何后面找不到from的实例,struts会自动生成一个。
songbob 2009-06-27
  • 打赏
  • 举报
回复
唉,其实做程序我很怕的就是低级错误,但怕什么来什么.

原因是我ECLIPSE的 PROJECT->BUILD AUTOMATICALLY 没启用.- -!
============================================================
最初我以为是导入的包及文件路径的问题.
查看TOMCAT的CONF/server.xml文件,但没发现有问题,
然后又检查项目中STRUTS-CONFIG.XML中<form-bean>及<action>里的TYPE值也没问题.

后来想想CONSOLE总报什么什么FORM不能生成,什么什么ACTION不能调用.
后来发现CLASSES里压根就没有CLASS文件.
最后发现原来是 AUTOMATICALLY 没启用.

谢谢大家,特别感谢4楼还能亲自跑下我的程序
还有2楼的方法还可以这样用.足见其内功深厚,可以练个九阳神功什么了.

结贴 散分!
qiheia 2009-06-27
  • 打赏
  • 举报
回复
好像看来起来没有错误样的

首先建议LZ规范下命名啊,类名首字母大写。。

访问的时候.action

最好将Tomcat\webapps\你的工程 删掉 和 \Tomcat 6.0\work\Catalina\localhost目下你的工程都删掉

然后重新发布部署下,看有效不??
xcj0722 2009-06-26
  • 打赏
  • 举报
回复
像是报你form找不到。。 2楼的应该可以解决问题
anhy 2009-06-26
  • 打赏
  • 举报
回复
<action path="/login" scope="request"
name="visitorsForm" type="actions.visitorsAction">
<forward name="success" path="/visitors.jsp" />
</action>
改为
<action path="/login" scope="request"
type="actions.visitorsAction">
<forward name="success" path="/visitors.jsp" />
</action>
longtenggdf 2009-06-26
  • 打赏
  • 举报
回复
数据库sql文件发来看看

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧