我的register.jsp代码如下:
<body bgcolor="#000000" text="#fffaa" onLoad="document.registerForm.username.focus()">
<center>
<h2>用户注册</h2><br><br><br><br>
<form name="registerForm" method="post" action="ch/Register" onSubmit="return checkValue();"/>
<table width="50%" height="50%" align="center" >
<tr>
<td width="45%" align="right" valign="middle" ><h3>用户名:</h3></td>
<td width="55%" valign="top"><input type="text" name="username" ><font color="red">*</font></td>
</tr>
<tr>
<td align="right" valign="middle"><h3>密码:</h3></td>
<td valign="top"><input type="password" name="password"><font color="red">*</font></td>
</tr>
<tr>
<td align="right" valign="middle"><h3>确认密码:</h3></td>
<td valign="top"><input type="password" name="password2"><font color="red">*</font></td>
</tr>
<tr>
<td align="right" valign="middle"><h3>电子邮件:</h3></td>
<td valign="top"> <input type="text" name="email" ></td>
</tr>
<tr>
<td align="right" valign="middle"><input type="submit" value="注册" ></td>
<td valign="top"> <input type="reset" value="重填"></td>
</tr>
</table>
</form>
</center>
</body>
我的包ch中的一个处理跳转的servlet:Register.java的代码如下:
//用户注册servlet
package ch;import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;import utils.*;public class Register extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = -5179314968027324686L; public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
request.setCharacterEncoding("gb2312");//保证了在数据库中保存的值为中文,而非乱码
response.setContentType("text/html;charset=gb2312");//保证了 "注册成功了哈!" 或 "注册失败了咯!" 为中文而非乱码
PrintWriter out=response.getWriter();
//取得用户提交的参数
String username=request.getParameter("username");
String password=request.getParameter("password");
String email=request.getParameter("email");
//设置用户提交的参数
UserInfo ui=new UserInfo();
ui.setUsername(username);
ui.setPassword(password);
ui.setEmail(email);
//保存用户信息
boolean result=UserBean.updateUser(ui);
RequestDispatcher dispatcher=null;
if(result){
//保存用户信息成功
HttpSession session=request.getSession();
session.setAttribute("session_userinfo",ui);
request.setAttribute("message","注册成功了哈!");
out.print("<html>");
out.print("<head><title>结果反馈页面</title></head>");
out.print("<body>");
out.print("<center><h2>"+request.getAttribute("message")+"</h2></center>");
out.print("</body>");
out.print("</html>");
out.flush();
out.close();
//跳转到留言列表页面
dispatcher=request.getRequestDispatcher("logon.jsp");
}
else{
//保存用户信息失败
request.setAttribute("message", "注册失败了咯!");
out.print("<html>");
out.print("<head><title>结果反馈页面</title></head>");
out.print("<body>");
out.print("<center><h2>"+request.getAttribute("message")+"</h2></center>");
out.print("</body>");
out.print("</html>");
out.flush();
out.close();
//返回到用户注册页面
dispatcher=request.getRequestDispatcher("register.jsp");
}
dispatcher.forward(request,response);
}
}
在当我提交数据后:要等上大概10到20秒后,才会有反应,为什么这么慢呢?如果是新数据,会显示“注册成功了哈!”,但不跳转。如果是老数据,什么都不显示,指显示错误信息:
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.articlelist_jsp._jspService(articlelist_jsp.java:117)
............................................................
at java.lang.Thread.run(Thread.java:595)
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io 异常: Connection refused(DESCRIPTION=(ERR=12518)(VSNNUM=150999297)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4)))))
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at db.DatabaseBean.getConnection(DatabaseBean.java:35)
at ch.DatabaseBean.getConnection(DatabaseBean.java:10)
at ch.UserBean.updateUser(UserBean.java:22)
at ch.Register.doPost(Register.java:38)
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:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(ERR=12518)(VSNNUM=150999297)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 21 more
请问究竟是什么原因呢???
<body bgcolor="#000000" text="#fffaa" onLoad="document.registerForm.username.focus()">
<center>
<h2>用户注册</h2><br><br><br><br>
<form name="registerForm" method="post" action="ch/Register" onSubmit="return checkValue();"/>
<table width="50%" height="50%" align="center" >
<tr>
<td width="45%" align="right" valign="middle" ><h3>用户名:</h3></td>
<td width="55%" valign="top"><input type="text" name="username" ><font color="red">*</font></td>
</tr>
<tr>
<td align="right" valign="middle"><h3>密码:</h3></td>
<td valign="top"><input type="password" name="password"><font color="red">*</font></td>
</tr>
<tr>
<td align="right" valign="middle"><h3>确认密码:</h3></td>
<td valign="top"><input type="password" name="password2"><font color="red">*</font></td>
</tr>
<tr>
<td align="right" valign="middle"><h3>电子邮件:</h3></td>
<td valign="top"> <input type="text" name="email" ></td>
</tr>
<tr>
<td align="right" valign="middle"><input type="submit" value="注册" ></td>
<td valign="top"> <input type="reset" value="重填"></td>
</tr>
</table>
</form>
</center>
</body>
我的包ch中的一个处理跳转的servlet:Register.java的代码如下:
//用户注册servlet
package ch;import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;import utils.*;public class Register extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = -5179314968027324686L; public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
request.setCharacterEncoding("gb2312");//保证了在数据库中保存的值为中文,而非乱码
response.setContentType("text/html;charset=gb2312");//保证了 "注册成功了哈!" 或 "注册失败了咯!" 为中文而非乱码
PrintWriter out=response.getWriter();
//取得用户提交的参数
String username=request.getParameter("username");
String password=request.getParameter("password");
String email=request.getParameter("email");
//设置用户提交的参数
UserInfo ui=new UserInfo();
ui.setUsername(username);
ui.setPassword(password);
ui.setEmail(email);
//保存用户信息
boolean result=UserBean.updateUser(ui);
RequestDispatcher dispatcher=null;
if(result){
//保存用户信息成功
HttpSession session=request.getSession();
session.setAttribute("session_userinfo",ui);
request.setAttribute("message","注册成功了哈!");
out.print("<html>");
out.print("<head><title>结果反馈页面</title></head>");
out.print("<body>");
out.print("<center><h2>"+request.getAttribute("message")+"</h2></center>");
out.print("</body>");
out.print("</html>");
out.flush();
out.close();
//跳转到留言列表页面
dispatcher=request.getRequestDispatcher("logon.jsp");
}
else{
//保存用户信息失败
request.setAttribute("message", "注册失败了咯!");
out.print("<html>");
out.print("<head><title>结果反馈页面</title></head>");
out.print("<body>");
out.print("<center><h2>"+request.getAttribute("message")+"</h2></center>");
out.print("</body>");
out.print("</html>");
out.flush();
out.close();
//返回到用户注册页面
dispatcher=request.getRequestDispatcher("register.jsp");
}
dispatcher.forward(request,response);
}
}
在当我提交数据后:要等上大概10到20秒后,才会有反应,为什么这么慢呢?如果是新数据,会显示“注册成功了哈!”,但不跳转。如果是老数据,什么都不显示,指显示错误信息:
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.articlelist_jsp._jspService(articlelist_jsp.java:117)
............................................................
at java.lang.Thread.run(Thread.java:595)
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io 异常: Connection refused(DESCRIPTION=(ERR=12518)(VSNNUM=150999297)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4)))))
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at db.DatabaseBean.getConnection(DatabaseBean.java:35)
at ch.DatabaseBean.getConnection(DatabaseBean.java:10)
at ch.UserBean.updateUser(UserBean.java:22)
at ch.Register.doPost(Register.java:38)
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:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(ERR=12518)(VSNNUM=150999297)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221)
... 21 more
请问究竟是什么原因呢???
out.print("<html>");
out.print("<head><title>结果反馈页面</title></head>");
out.print("<body>");
out.print("<center><h2>"+request.getAttribute("message")+"</h2></center>");
out.print("</body>");
out.print("</html>");
out.flush();
out.close();
和dispatcher=request.getRequestDispatcher("register.jsp");是不能够共存的
两个只能够有一个共存
out.print("<html>");
out.print("<head><title>结果反馈页面</title></head>");
out.print("<body>");
out.print("<center><h2>"+request.getAttribute("message")+"</h2></center>");
out.print("</body>");
out.print("</html>");
这里你是输出了一个页面吧!这里已经对做出客户端响应了,然后你又写了个跳转,让服务器再给客户端一个响应。相当于对于客户端的一次请求,你给了他两个响应。这里到底会怎么样呢,你可以调试一下看看。到底有没有执行你的Dispatcher()。Forward()语句。再说你的新旧数据的提交问题:你的页面显示慢和不能更新数据,这里你的DBCP用的可能是有问题,建议你再查查DBCP的使用资料。你既然用了连接池,那你有没有释放连接呢?这里很可能有问题。