JavaWeb——JSP呼叫資料庫、JavaBean、MVC模式

cool_cool_coo1發表於2019-01-14

JSP訪問資料庫

JSP就是在html中巢狀的java程式碼,因此 java程式碼可以寫在jsp中(<%  ... %>)

導包操作:

  • java專案 :1 Jar複製到工程中 2.右鍵該Jar :build path ->add to build Path
  • Web專案:jar複製到WEB-INF/lib

核心:就是將 java中的JDBC程式碼,複製到 JSP中的<% ... %>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="check.jsp" method="post">
		使用者名稱:<input type="text" name="uname" /><br/>
		密碼:<input type="password" name="upwd" /><br/>
		<input type="submit"  value="登入" /><br/>
	</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    
    <title>My JSP 'check.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
       <%
       	String URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
		String USERNAME = "MANAGER";
		String PWD = "manager";
       
       	Connection connection = null;
		Statement stmt = null;
		ResultSet rs = null ; 
		try {
			// a.匯入驅動,載入具體的驅動類
			Class.forName("oracle.jdbc.OracleDriver");// 載入具體的驅動類
			// b.與資料庫建立連線
			connection = DriverManager.getConnection(URL, USERNAME, PWD);
			// c.傳送sql,執行(增刪改、【查】)
			stmt = connection.createStatement();
//			String sql = "select stuno,stuname from student";
			Scanner input= new Scanner(System.in);
			String name = request.getParameter("uname");
			String pwd = request.getParameter("upwd");
			String sql = "select count(*) from table_user where username='"+name+"' and password ='"+pwd+"' " ;
//			String sql = "select * from student where stuname like '%"+name+"%'";
			// 執行SQL(增刪改executeUpdate(),查詢executeQuery())
			rs = stmt.executeQuery(sql); // 返回值表示 增刪改 幾條資料
			// d.處理結果
			int count = -1;
			if(rs.next()) {
				count = rs.getInt(1) ;
			}
			if(count>0) {
				System.out.println("登陸成功!");
			}else {
				System.out.println("登陸失敗!");
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch(Exception e) {
			e.printStackTrace();
		}
		finally {
			try {
				if(rs!=null) rs.close(); 
				 if(stmt!=null) stmt.close();// 物件.方法
				 if(connection!=null)connection.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
        %>
  </body>
</html>

 

注意:如果jsp出現錯誤:The import Xxx cannot be resolved
    
嘗試解決步驟:
    a.(可能是Jdk、tomcat版本問題) 右鍵專案->build path,將其中 報錯的 libary或Lib 刪除後 重新匯入
    b.清空各種快取:右鍵專案->Clean tomcat... clean  (Project -clean或者 進tomcat目錄 刪除裡面work的子目錄)
    c.刪除之前的tomcat,重新解壓縮、配置tomcat,重啟計算機
    d.如果類之前沒有包,則將該類加入包中

DAO  

起類名是加dao意思是運算元據庫的類,即將<%.....%>中的java

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="check.jsp" method="post">
		使用者名稱:<input type="text" name="uname" /><br/>
		密碼:<input type="password" name="upwd" /><br/>
		<input type="submit"  value="登入" /><br/>
	</form>
</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="LOGIN.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
<body>		
		<%
		
			String name = request.getParameter("uname") ;
			String pwd = request.getParameter("upwd") ;
			Login login = new Login(name,pwd) ;
			
			
			LoginDao dao = new LoginDao();
			
			int result = dao.login(login) ;
			if(result >0){
				out.print("登入成功!");
			}else if(result==0){
				out.print("使用者名稱或密碼有誤!!");
			}else{
				out.print("系統異常!!");
			}
		
		%>
</body>
</html>

Login.java

package LOGIN;

public class Login {
	 
	private String name;
	private String pwd ;
	
	public Login() {
	}
	public Login(int id, String name, String pwd) {
		this.name = name;
		this.pwd = pwd;
	}
	public Login( String name, String pwd) {
		this.name = name;
		this.pwd = pwd;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	} 
	
}

LoginDao.java

package LOGIN;


import java.sql.*;



public class LoginDao {
//	public int login(String name,String pwd)//1:登入成功   0:登入失敗(使用者名稱或密碼有誤)  -1:系統異常
	public int login(Login login)//1:登入成功   0:登入失敗(使用者名稱或密碼有誤)  -1:系統異常
	{
		String URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
		String USERNAME = "MANAGER";
		String PWD = "manager";
		Connection connection = null;
		Statement stmt = null;
		ResultSet rs = null ; 
		try {
			// a.匯入驅動,載入具體的驅動類
			Class.forName("oracle.jdbc.OracleDriver");// 載入具體的驅動類
			// b.與資料庫建立連線
			connection = DriverManager.getConnection(URL, USERNAME, PWD);
			// c.傳送sql,執行(【查】)
			stmt = connection.createStatement();
			
		//	String name = request.getParameter("uname") ;
		//	String pwd = request.getParameter("upwd") ;
			
			String sql = "select count(*) from table_user where username='"+login.getName()+"' and password ='"+login.getPwd()+"' " ;
			rs = stmt.executeQuery(sql); // 返回值表示 增刪改 幾條資料
			// d.處理結果
			int count = -1;
			if(rs.next()) {
				count = rs.getInt(1) ;
			}
//			if(count>0) {
//				out.println("登陸成功!");
//			}else {
//				out.println("登陸失敗!");
//			}
			return count ;

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return -1 ;
		} catch (SQLException e) {
			e.printStackTrace();
			return -1 ;
		} catch(Exception e) {
			e.printStackTrace();
			return -1 ;
		}
		finally {
			try {
				if(rs!=null) rs.close(); 
				 if(stmt!=null) stmt.close();// 物件.方法
				 if(connection!=null)connection.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

JavaBean

dao  就是一個javabean

剛才我們將 jsp中 登入操作的程式碼  轉移到了LoginDao.java;其中LoginDao類 就稱之為JavaBean。
JavaBean的作用:a.減輕的jsp複雜度  b.提高程式碼複用(以後任何地方的 登入操作,都可以通過呼叫LoginDao實現)

JavaBean(就是一個Java類)的定義:滿足一下2點 ,就可以稱為JavaBean

  •     a.public 修飾的類  ,public 無參構造
  •     b.所有屬性(如果有) 都是private,並且提供set/get   (如果boolean 則get 可以替換成is)

使用層面Java分為2大類:

a.封裝業務邏輯的JavaBean (LoginDao.java封裝了登入邏輯)            邏輯
    可以將jsp中的JDBC程式碼,封裝到Login.java類中 (Login.java)

b.封裝資料的JavaBean   (實體類,Student.java  Person.java  )        資料 
    對應於資料庫中的一張表
    Login login = new Login(uname,upwd) ;//即用Login物件 封裝了2個資料(使用者名稱 和密碼)

封裝資料的JavaBean 對應於資料庫中的一張表   (Login(name,pwd))
封裝業務邏輯的JavaBean 用於操作 一個封裝資料的JavaBean  

可以發現

JavaBean可以簡化 程式碼(jsp->jsp+java)、提供程式碼複用(LoginDao.java)

public  void sleep(String name,String place, int time)
{

}

public  void sleep(Person per)
{
    per.getName()
    per.getPlace()
    ...
}

MVC設計模式:


M:Model,模型  :一個功能。用JavaBean實現。

V:View,檢視: 用於展示、以及與使用者互動。使用html  js  css jsp jquery等前端技術實現 。

C:Controller,控制器 :接受請求,將請求跳轉到模型進行處理;模型處理完畢後,再將處理的結果
            返回給 請求處 。 可以用jsp實現,  但是一般建議使用 Servlet實現控制器。

Jsp->Java(Servlet)->JSP

MVC設計模式:

相關文章