上一篇學習了基于jsp的登入子產品,現在總結一下在開發中遇到的問題和這種開發模式的缺點。
一、遇到的問題:1.是mysql驅動包的導入問題(com.mysql.jdbc.Driver);2.連接配接資料庫的url(jdbc:mysql://localhost:3306/testjsp);3.在logincheck中擷取login.jsp中傳遞過來的參數(request.getParameter("username"));4.sql語句中where條件部分的單引号(”select * from t_user where mame ="+"'"+uname+"'");5.控制頁面跳轉的條件設定一個boolean類型的變量;6.頁面跳轉(好幾種方式):<jsp:forward page="success.jsp"></jsp:forward>。
二、缺點:就是在logincheck.jsp中嵌入了太多的java代碼 并且 每次有通路資料庫的請求(比如說注冊),都需要建立新的資料庫連接配接,再通路資料庫,最後關閉資料庫連接配接。
改進方法:把對資料庫的連接配接、通路和關閉封裝出來。
三、基于jsp+javabean開發的登入子產品
1、其他步驟都一樣,下面是jspcheck.jsp的核心代碼:
//利用jsp:useBean
<jsp:useBean id="user" class="testjspbean.User">
<jsp:setProperty name="user" property="*"/>
</jsp:useBean>
<jsp:useBean id="userdao" class="dao.Userdao"></jsp:useBean>
<body>
<%
//擷取頁面傳遞參數
String names = user.getName();
String password = user.getPassword();
//擷取資料庫連
userdao.getConnection();
boolean flag = false;
String sql = "select * from t_user where mame ="+"'"+names+"'"+"and password ="+"'"+password+"'";
//查詢資料庫
ResultSet rst = userdao.select(sql);
while(rst.next()){
flag=true;
session.setAttribute("name",names);
}
//關閉資料庫連接配接
userdao.close();
//頁面跳轉
if(flag){%>
<jsp:forward page="success.jsp"></jsp:forward>
<%}else{%>
<jsp:forward page="false.html"></jsp:forward>
<%}
%>
</body>
2、項目目錄:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcpXSU1kdGdkW1xWbhZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DM1UjMykTM5ADMzYDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
3、右鍵src--new--class--輸入name--finishi。
User.java中的代碼:
package testjspbean; public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Userdao.java中代碼:
package dao; import java.sql.*; import testjspbean.User; public class Userdao {
private Connection con=null;
private Statement stmt=null;
private ResultSet rs=null;
private String url = "jdbc:mysql://localhost:3306/test";
private String user="root";
private String password ="Admin123";
public void getConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet select(String sql){
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public void close(){
try {
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close();
}
if(con!=null){
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4、運作結果:
好了,大功告成,是不是logincheck.jsp中代碼簡潔了很多。