并且在servlet的业务方法中调用完JDBC以后,你肯定要去关闭那个刚刚操作过的jdbc Connection----所以,每个客户端得到的并不是同一个连接。
一般更通用的做法是:写一个专门负责数据库连接生成与释放的java Class,在servlet中就可以将这个Class import进来,直接调用其方法即可。
package com.panabia.servlets; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import com.panabia.db.SQLFactory; public class Login extends HttpServlet { SQLFactory SQL=new SQLFactory();//创建数据库连接类 public void init(ServletConfig config) throws ServletException {super.init(config);} public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { response.reset(); response.setContentType("text/html;charset=gb2312"); PrintWriter out=response.getWriter(); HttpSession session=request.getSession(true); Connection con=null; PreparedStatement ps=null; ResultSet rs=null; out.print("<html><title>java servlet</title><link rel=stylesheet href=/Apps/images/css.css/><body topmargin=100><center>"); //Start to process. String username=request.getParameter("username"); if(username==null)username="$"; String password=request.getParameter("password"); if(password==null)password="$"; String inputcode=request.getParameter("inputcode"); if(inputcode==null)inputcode="$"; String sessioncode=(String)session.getAttribute("rand"); if(sessioncode==null)sessioncode="#"; if(!username.startsWith("$")&&!password.startsWith("$")) { if(!inputcode.equals(sessioncode)){ out.print("<script language=javascript>window.alert('您输入的验证码错误,请重试!');</script>"); out.print("<a href='/Apps/portal.htm' class='slink'>返回登录</a>"); out.print("<br>"+"<font color=#666666 size=1 face=arial>try again please</font>"); } else{ try{ con=SQL.gainConnection(); ps=con.prepareStatement("select * from AppsUsers where username=?"); ps.setString(1,username); rs=ps.executeQuery(); if(rs.next()) { String p=rs.getString("password"); String u=rs.getString("username"); String role=rs.getString("role"); if(username.equals(u)&&password.equals(p)){ session.setAttribute("status","ok"); session.setAttribute("role",role); response.sendRedirect(response.encodeRedirectURL("/Apps/main.jsp")); } else{out.print("<script language=javascript>window.alert('您输入的密码错误,请重试!');</script>"); out.print("<a href='/Apps/portal.htm' class='slink'>重新登录</a>"); out.print("<br>"+"<font color=#666666 size=1 face=arial>try again please</font>"); } } else{out.print("<script language=javascript>window.alert('无效的系统帐户,请重试!');</script>"); out.print("<a href='/Apps/portal.htm' class='slink'>返回登录</a>"); out.print("<br>"+"<font color=#666666 size=1 face=arial>try again please</font>"); } } catch(SQLException e){out.print("SQL error:"+e);} finally{SQL.releaseConnection(rs,ps,null,con); } //在业务方法中关闭数据库连接 } out.print("</center></body></html>"); out.close(); } } public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { doPost(request,response); } public void destroy(){super.destroy(); if(SQL!=null) SQL=null;} //在destroy();方法中清空SQL 句柄-- } <p>
猜你喜欢
本站原创《复杂软件设计之道:领域驱动设计全面解析与实战》