读书人

struts+Eclipse的有关问题

发布时间: 2012-01-12 22:11:58 作者: rapoo

struts+Eclipse的问题
本人是初学者,现在在Eclipse环境下用struts写的web程序,编译正常,但是当我按提交按钮处理数据的时候,却出错:
警告: Unhandled exception
警告: Exception from exceptionCommand 'servlet-exception '
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at j2eebbs.DB. <init> (DB.java:16)
at j2eebbs.user.action.RegistrationAction.execute(RegistrationAction.java:37)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)

========================我的代码 原文件如下==========================
===DB.java================
package j2eebbs;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DB {

Connection connect = null;
ResultSet rs = null;
public DB(DataSource dataSource) {

try {
connect = dataSource.getConnection(); //======16行出错
}
catch(SQLException e) {
e.printStackTrace();
}
}

public ResultSet OpenSql(String sql) {
try {
Statement stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
ex.printStackTrace();
}
return rs;
}

public int ExecSql(String sql) {
int result = 0;


try {
Statement stmt = connect.createStatement();
result = stmt.executeUpdate(sql);
}
catch(SQLException ex) {
System.err.println(ex.getMessage());

}
return result;
}

public void close(){
if(connect!=null){
try{
connect.close();
connect = null;
}catch(SQLException ex) {
System.err.println(ex.getMessage());
}
}
}
}

=======RegistrationAction.java

package j2eebbs.user.action;

import j2eebbs.Constants;
import j2eebbs.DB;
import j2eebbs.User;
import j2eebbs.user.form.RegistrationForm;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

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 org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public final class RegistrationAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

RegistrationForm rgtForm = (RegistrationForm) form;
String username = rgtForm.getUsername();
String password = rgtForm.getPassword();
String sex = rgtForm.getSex();
String email = rgtForm.getEmail();
String icq = rgtForm.getIcq();
String signature = rgtForm.getSignature();
String grade = rgtForm.getGrade();

ServletContext context = servlet.getServletContext();
DataSource dataSource = (DataSource) context
.getAttribute(Constants.DATASOURCE_KEY);
DB db = new DB(dataSource);//===========37行 这里错误

User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setSex(sex);
user.setEmail(email);
user.setIcq(icq);
user.setSignature(signature);
user.setGrade(grade);

String pageForward;
ActionMessages errors = new ActionMessages();

if (!username.equals( "guest ") && user.insert(db)) {
pageForward = "ToUserLogin ";
} else {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"error.registration.failed "));
if (!errors.isEmpty()) {
saveErrors(request, errors);
}
pageForward = "ToErrorPage ";
}

db.close();
return mapping.findForward(pageForward);
}
}

[解决办法]
空指针错误

JSP页面body里面的代码贴出来
[解决办法]
lz在Action里将:
DataSource dataSource = (DataSource) context


.getAttribute(Constants.DATASOURCE_KEY);
DB db = new DB(dataSource);//===========37行 这里错误

改为:
DataSource dataSource = this.getDataSource(request, Constants.DATASOURCE_KEY);
DB db = new DB(dataSource);
试试。

读书人网 >Java Web开发

热点推荐