利用struts自帶的數(shù)據(jù)連接池連接數(shù)據(jù)庫
zhanggok ()???? 2004-03-28 01:44:39 在 Java / 框架、開源 提問
這是我從網(wǎng)上看到是但有一點不明白??
? dataSource=getDataSource(request);??
? 這里的request是HttpServletRequest?? request??
? 嗎.這樣就以得到數(shù)據(jù)源嗎?不明白??
? struts自帶的數(shù)據(jù)連接池在struts-config.xml中可以設(shè)置??
? 本人的設(shè)置如下:??
? <data-sources>??
???
? <data-source?? type="org.apache.commons.dbcp.BasicDataSource">??
???
? <set-property??
???
? property="description"??
???
? value="Airline?? DB?? Connection?? config"/>??
???
? <set-property??
???
? property="driverClassName"??
???
? value="com.mysql.jdbc.Driver"/>??
???
? <set-property??
???
? property="maxCount"??
???
? value="10"/>??
???
? <set-property??
???
? property="password"??
???
? value=""/>??
???
? <set-property??
???
? property="url"??
???
? value="jdbc:mysql://localhost/airline"/>??
???
? <set-property??
???
? property="username"??
???
? value="root"/>??
???
? <set-property????
???
? property="maxWait"????
???
? value="5000"?? />??
???
? <set-property??
???
? property="defaultAutoCommit"??
???
? value="false"?? />??
???
? <set-property??
???
? property="defaultReadOnly"??
???
? value="false"?? />??
???
? </data-source>??
???
? </data-sources>??
???
? 這些基本的,我想大家都應(yīng)該看得懂吧??
? 然后就是來驗證我們的數(shù)據(jù)庫連接了??
? 這里用一個login來測試??
? 第一個是LoginForm??
? package?? com.airline;??
???
? import?? javax.servlet.http.HttpServletRequest;??
? import?? org.apache.struts.action.ActionError;??
? import?? org.apache.struts.action.ActionErrors;??
? import?? org.apache.struts.action.ActionForm;??
? import?? org.apache.struts.action.ActionMapping;??
???
? public?? final?? class?? LoginForm?? extends?? ActionForm?? {??
? private?? String?? userName;??
? private?? String?? password;??
???
? public?? String?? getUserName()?? {??
? return?? userName;??
? }??
? public?? void?? setUserName(String?? userName)?? {??
? this.userName?? =?? userName;??
? }??
? public?? String?? getPassword()?? {??
? return?? password;??
? }??
? public?? void?? setPassword(String?? password)?? {??
? this.password?? =?? password;??
? }??
? public?? void?? reset(ActionMapping?? mapping,?? HttpServletRequest?? request)?? {??
? password?? =?? null;??
? userName?? =?? null;??
? }??
? public?? ActionErrors?? validate(ActionMapping?? mapping,?? HttpServletRequest?? request)?? {??
? ActionErrors?? errors?? =?? new?? ActionErrors();??
? if?? ((userName==null)?? ||?? (userName.length()?? <?? 1))??
? errors.add("userName",?? new?? ActionError("error.missing.userName"));??
? if?? ((password==null)?? ||?? (password.length()?? <?? 1))??
? errors.add("password",?? new?? ActionError("error.missing.password"));??
? return?? errors;??
? }??
???
? }??
? 這個java就是給將來我們要提交的數(shù)據(jù)一個容器,就像“裝水的玻璃瓶”一樣,這是一個“瓶子”??
? 接下來的就是LoginAction??
? package?? com.airline;??
???
? import?? java.io.IOException;??
? import?? javax.servlet.RequestDispatcher;??
? import?? javax.servlet.ServletException;??
? import?? javax.servlet.http.HttpServletRequest;??
? import?? javax.servlet.http.HttpSession;??
? import?? javax.servlet.http.HttpServletResponse;??
? import?? javax.servlet.http.HttpServlet;??
? import?? org.apache.struts.action.Action;??
? import?? org.apache.struts.action.ActionForward;??
? import?? org.apache.struts.action.ActionForm;??
? import?? org.apache.struts.action.ActionMapping;??
? import?? org.apache.struts.action.ActionError;??
? import?? org.apache.struts.action.ActionErrors;??
? import?? java.sql.ResultSet;??
? import?? java.sql.Connection;??
? import?? java.sql.Statement;??
? import?? java.sql.SQLException;??
? import?? javax.sql.DataSource;??
???
???
? public?? final?? class?? LoginAction?? extends?? Action?? {??
? public?? ActionForward?? execute(ActionMapping?? mapping,??
? ActionForm?? form,?? HttpServletRequest?? request,?? HttpServletResponse?? response)??
? throws?? IOException,?? ServletException?? {??
???
? String?? userName?? =?? ((LoginForm)?? form).getUserName();??
? String?? password?? =?? ((LoginForm)?? form).getPassword();??
? DataSource?? dataSource;??
? Connection?? con=null;??
? Statement?? stmt;??
? ResultSet?? rs;??
? String?? usn="",pwd="",result="";??
???
? try{??
? dataSource=getDataSource(request);??
? con=dataSource.getConnection();??
? stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);??
? rs=stmt.executeQuery("select?? *?? from?? login?? where?? username='"+userName+"'");??
???
? while(rs.next()){??
? usn=rs.getString(2);??
? pwd=rs.getString(3);??
? }??
???
? }catch(SQLException?? sqle){??
? getServlet().log("Connection.process",sqle);??
???
? }finally{??
? try{??
? con.close();??
? }catch(SQLException?? e){??
? getServlet().log("Connection.close",e);??
? }??
? }??
? if?? (userName!=null?? &&?? password!=null?? &&????
? password.equals(pwd))?? {??
? HttpSession?? session?? =?? request.getSession();??
? session.setAttribute("loggedIn",?? "1");??
? return?? mapping.findForward("success");??
? }??
? else?? {??
? ActionErrors?? errors?? =?? new?? ActionErrors();??
? errors.add(ActionErrors.GLOBAL_ERROR,????
? new?? ActionError("error.login.failed"));??
? saveErrors(request,?? errors);??
? return?? (new?? ActionForward(mapping.getInput()));??
? }??
? }??
? }??
? 這個java就是來具體處理我們剛才放在"瓶子"里的東西,它就會連接到MYSQL數(shù)據(jù)庫里去查找相應(yīng)的數(shù)據(jù),然后驗證一下。??
???
? 接下來,我們就要在struts-config.xml中對剛才的兩個java作一下設(shè)置了??
? 首先是在<Action-mapping>中加入如下的代碼??
? <action?? path="/login"????
? type="com.airline.LoginAction"????
? name="loginForm"??
? scope="request"??
? input="/login.jsp">??
? <forward?? name="success"?? path="/mainMenu.jsp"/>??
? </action>??
? 然后在<form-bean>中加入??
? <form-bean?? name="loginForm"?? type="com.airline.LoginForm"/>??
? 最后再來做一下jsp頁面??
? login.jsp??
? <%@?? taglib?? uri="/WEB-INF/struts-html.tld"?? prefix="html"?? %>??
? <html:html?? locale="true">??
? <head>??
? <title>Login?? Page</title>??
? <html:base/>??
? </head>??
? <body>??
???
? <html:errors/>??
???
? Please?? enter?? your?? user?? name?? and?? password??
? <br>??
???
? <html:form?? action="/login"?? focus="userName">??
? <table>??
? <tr>??
? <td>User?? Name:</td>??
? <td><html:text?? property="userName"/>??
? </tr>??
? <tr>??
? <td>Password:</td>??
? <td><html:password?? property="password"?? redisplay="false"/>??
? </tr>??
? <tr>??
? <td?? colspan=2?? align=right><html:submit?? property="submit"?? value="Login"/></td>??
? </tr>??
? </table>??
? </html:form>??
???
? </body>??
? </html:html>??
???
? mainMenu.jsp??
? <%??
? if?? (session.getAttribute("loggedIn")==null)?? {??
? %>??
? <jsp:forward?? page="login.jsp"/>??
? <%??
? }??
? else?? {??
? %>????
???
? <html>??
? <head>??
? <title>Main?? Menu</title>??
? </head>??
? <body>??
???
? <b>Main?? Menu</b>??
? <br><a?? href=logout.do>Log?? Out</a>??
? <br><a?? href=viewSecret.do>View?? Company?? Secrets</a>??
???
? </body>??
? </html>??
???
? <%??
? }??
? %>??
???
? 在classes下找到application.properties??
? 加入如下代碼:??
? errors.header=<b>Error(s)!!!</b><ul>??
? errors.footer=</ul><hr>??
? error.missing.userName=<li>A?? user?? name?? was?? not?? found.</li>??
? error.missing.password=<li>A?? password?? was?? not?? found.</li>??
? error.login.failed=<li>Incorrect?? user?? name?? and/or?? password.</li>??
? 這些是用來顯示出錯信息的。??
? 好了,打開Tomcat服務(wù)器,來測試一下吧