我的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">&nbsp;&nbsp;<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
请问究竟是什么原因呢???

解决方案 »

  1.   

    异常: Connection refused(DESCRIPTION=(ERR=12518)(VSNNUM=150999297)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))) 
      

  2.   

    你这个很明显要出错啊
    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");是不能够共存的
    两个只能够有一个共存
      

  3.   

    3.4楼,我觉得应该没有冲突,我的目的是显示遗下结果“注册成功”或“注册失败”,然后马上就跳转到logon.jsp或者register.jsp,我觉得应该可以吧?
      

  4.   

    5楼,虽然不知什么原因要等上10到20秒的时间才能显示“注册成功了哈!”,也不知什么原因不能跳转,但一旦我输入了一套新的数据后,我的oracle数据库还是会显示刚输入的那套数据,也应该不是数据库连接被拒的原因吧。当然,从反馈的错误信息也不难判断,数据库的连接中存在问题,我用了dbcp,究竟数据库方面有什么问题呢,望请教。
      

  5.   

    你是想的没错,但是这里的思路并没有达到你想要实现的那种情况,因为你Servlet里面这样写的确是有问题。
    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的使用资料。你既然用了连接池,那你有没有释放连接呢?这里很可能有问题。