1. 程式人生 > >java: mvc設計思想例項,網頁上查詢資料庫中資料

java: mvc設計思想例項,網頁上查詢資料庫中資料

  前段時間學習了mvc設計模式,並按照mvc模式設計了一個網頁,在這個網頁上我可以根據不同條件查詢資料庫的資料。

  關於mvc是什麼,以及採用mvc模式的作用,這篇部落格講的十分淺顯易懂:

https://blog.csdn.net/muyi_amen/article/details/54341065

  首先是顯示主介面網頁的jsp檔案main.jsp.這是屬於檢視V這一部分的。這裡把表單的處理方法設定為get,並在web.xml檔案中註冊好處理該action的類為MyServlet.java。程式碼內容如下:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  %>
<!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=ISO-8859-1">
<title>世界盃資訊查詢</title>
</head>
<body>
<FONT SIZE="8" COLOR="顏色#FF0000"style="position:absolute; width:800px; height:415px;z-index:1;left: 600px;top:200px;">
世界盃資訊查詢
</FONT>
   <form action="findu"  method="get" style="position:absolute; width:800px; height:415px;z-index:1;left: 400px;top:300px;" > 
        <p>球員查詢: 國家:<input type="text" name="country" style="width:40px" />
                    名字:<input type="text" name="pname" style="width:40px" />
                    號碼:<input type="text" name="number" style="width:40px" />
                    位置:<input type="text" name="position"  style="width:40px"/>
                    年齡:<input type="text" name="age" style="width:40px" />
                    慣用腳:<input type="text" name="footuse" style="width:40px" />
                    進球數:<input type="text" name="goal" style="width:40px"/>
                  <input name="find1" type="submit" value="查詢球員"></p>                                                     
        <p>比賽查詢: 主隊:<input type="text" name="hteam" style="width:40px"/>隊   
                   客隊:<input type="text" name="gteam" style="width:40px"/>隊     
                   時間:<input type="text" name="month" style="width:40px" />月<input type="text" name="day" style="width:40px" />日
               <input name="find" type="submit" value="查詢比賽"> </p>
   </form>
</body>
</html>

然後是充當控制器C的MyServlet.java.它的功能是流程控制,比如判斷使用者按下主介面網頁哪個按鈕以及輸入了哪些值。並獲取這些值傳入模型層,模型層則根據這些值對資料庫進行查詢。MyServlet.java程式碼內容如下:

package Servlet;
import java.io.IOException;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import POJO.MyPOJO;

@SuppressWarnings("serial")
public class MyServlet extends HttpServlet {
	public MyServlet()
	{
		super();
	}
	public void destory()
	{
		super.destroy();
	}
	 public void doGet(HttpServletRequest request, HttpServletResponse response)
			 throws ServletException, IOException {
		 
		 
	         if(request.getParameter("find1")!=null) //判斷按下的是哪個查詢按鈕
	         {
	             String country="%";
	        	 if(request.getParameter("country")!="")
	             { country=request.getParameter("country"); } 
	        	 
	             String pname="%";
	             if(request.getParameter("pname")!="")
	             { pname=request.getParameter("pname"); } 
	             
	             String number="%";
	             if(request.getParameter("number")!="")
	             { number=request.getParameter("number"); } 
	             
	             String position="%";
	             if(request.getParameter("position")!="")
	             { position=request.getParameter("position"); } 
	             
	             String age="%";
	             if(request.getParameter("age")!="")
	             { age=request.getParameter("age"); }  
	             
	             String footuse="%";
	             if(request.getParameter("footuse")!="")
	             { footuse=request.getParameter("footuse"); } 
	             
	             String goal="%";
	             if(request.getParameter("goal")!="")
	             { goal=request.getParameter("goal"); }   //獲取網頁中的引數,若沒有輸入就置為%
	             
	             MyPOJO myPOJO=new MyPOJO(country,pname,number,position,age,footuse,goal);//建立模型的物件,將引數傳入
	             try {
					ResultSet PlayerImformation=myPOJO.findPlayer();
					request.setAttribute("PlayerImformation",PlayerImformation);
					request.getRequestDispatcher("/Player.jsp").forward(request, response);
					//跳轉到球員資訊介面,並將在資料庫查到的結果集給Player.jsp
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	         }
	         if(request.getParameter("find")!=null)   //判斷按下的是哪個查詢按鈕
	         {
	             String hteam="%";
	             if(request.getParameter("hteam")!="")
	             { hteam=request.getParameter("hteam"); } 
	             
	             String gteam="%";
	             if(request.getParameter("gteam")!="")
	             { gteam=request.getParameter("gteam"); } 
	             
	             String month="%";
	             if(request.getParameter("month")!="")
	             { month=request.getParameter("month"); } 
	             
	             String day="%";
	             if(request.getParameter("day")!="")
	             { day=request.getParameter("day"); }   //獲取網頁中的引數,若沒有輸入就置為“%”
	             
	             MyPOJO myPOJO1=new MyPOJO(hteam,gteam,month,day);  //建立模型物件將引數傳入
	             try {
					ResultSet GameImformation=myPOJO1.findGame();
					request.setAttribute("GameImformation",GameImformation);
					request.getRequestDispatcher("/Game.jsp").forward(request, response);
					//跳轉到賽事資訊介面,並將在資料庫查到的結果集給Game.jsp
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	         }
	      
	 }
	 public void doPost(HttpServletRequest request, HttpServletResponse response)
	              throws ServletException, IOException {
	     
	      }
	 public void init() throws ServletException {
	    	 
	 }
	 }

由於在web.xml中註冊好了,一旦使用者點選了主介面的按鈕,MyServlet.java裡的doGet()函式就會進行處理:判斷按下的按鈕以及獲取使用者輸入的引數。

然後是模型層M MyPOJO.java,它的任務主要是處理業務邏輯和對資料庫進行操作,程式碼內容如下:

package POJO;
import java.sql.*;

public class MyPOJO {
	private String country,pname,number, position,age,footuse,goal;
	private String hteam,gteam, month,day;
	public MyPOJO(String country,String pname,String number,String position,String age,String footuse,String goal)
	{
		this.country=country;
		this.pname=pname;
		this.number=number;
		this.position=position;
		this.age=age;
		this.footuse=footuse;
		this.goal=goal;
	}
	public MyPOJO(String hteam,String gteam,String month,String day)
	{
		this.hteam=hteam;
		this.gteam=gteam;
		this.month=month;
		this.day=day;
	}
	public ResultSet findGame() throws Exception
	{
		Class.forName("com.mysql.cj.jdbc.Driver");
		Connection conn1=DriverManager.getConnection("jdbc:mysql://localhost:3306/worldcup"
				+ "?user=root&password=1729456sq&serverTimezone=UTC"
				+ "&useUnicode=true&characterEncoding=utf-8");              //使用jdbc驅動連線mysql資料庫並通過驅動管理器建立一個連線
		Statement stmt1=conn1.createStatement();
		String sq="select * from game where hteam like '"+hteam+"' and gteam like '"
				+gteam+"' and month like '"+month+"' and day like'"+day+"'"+";";  //拼接的sql語句
		ResultSet GameImformation=stmt1.executeQuery(sq);       //執行查詢sql語句
		return GameImformation;
		
	}   //根據輸入在資料庫查詢Game表對應的結果,返回一個結果集
	public ResultSet findPlayer() throws Exception
	{
		Class.forName("com.mysql.cj.jdbc.Driver");
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/worldcup?"
				+ "user=root&password=1729456sq&serverTimezone=UTC"
				+ "&useUnicode=true&characterEncoding=utf-8");      //使用jdbc驅動連線mysql資料庫並通過驅動管理器建立一個連線
		Statement stmt=conn.createStatement();
		String sq="select * from player where country like '"
		        +country+"' and pname like '"+pname+"' and number like '"
				+number+"' and position like '"+position+"' and age like '"+age+"' and footuse like '"
				+footuse+"' and goal like '"+goal+"'"+";";       //拼接的sql語句
		ResultSet PlayerImformation=stmt.executeQuery(sq);       //執行查詢sql語句
		return PlayerImformation;
	}     //根據輸入在資料庫查詢Player表對應的結果,返回一個結果集
}

這裡使用jdbc對mysql資料庫進行查詢,MyPOJO.java的兩個查詢函式分別對資料庫中的player表和game表進行查詢,並返回一個符合查詢條件的結果集。

控制器C 也就是MyServlet檔案中獲得MyPOJO中查詢函式返回的結果集後,將結果集傳給V層(這裡是Player.jsp和Game.jsp),在V層中,通過逐行讀取結果集將內容列印顯示出來。

Player.jsp的內容如下:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@page import="java.sql.ResultSet"%>
<!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>球員資訊</title>
</head>
<body>
<FONT SIZE="6" COLOR="顏色#FF0011"style="position:absolute; width:800px; height:415px;z-index:1;left: 800px;top:200px;">
比賽查詢結果
</FONT>
<center>
<%   ResultSet e=(ResultSet)request.getAttribute("PlayerImformation");  //獲取傳來的查詢結果集物件
out.print("<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>");
out.print("從左至右依次為國家、名字、號碼、位置、年齡、慣用腳、進球數"+"<br>");
while (e.next())            //逐行讀入結果集
{
    out.print(e.getString(2)+" ");    //列印結果集某行的第二列
    out.print(e.getString(3)+" ");
    out.print(e.getString(4)+" ");
    out.print(e.getString(5)+" ");
    out.print(e.getString(6)+" ");
    out.print(e.getString(7)+" ");
    out.print(e.getString(8)+" ");
    out.print("<br>");
}  
%>
</center>
</body>
</html>
Game.jsp的內容如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    
    <%@page import="java.sql.ResultSet"%>
     <% String path = request.getContextPath();
  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  %>
<!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>賽事資訊</title>
</head>
<body>
<FONT SIZE="6" COLOR="顏色#FF0011"style="position:absolute; width:800px; height:415px;z-index:1;left: 800px;top:200px;">
比賽查詢結果
</FONT>
<center>
<%   ResultSet e=(ResultSet)request.getAttribute("GameImformation");  //獲取傳來的查詢結果集
out.print("<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>"+"<br>");
out.print("從左至右依次為主隊、客隊、月份、日期、主隊得分、客隊得分"+"<br>");
while (e.next())                //逐行讀入查詢結果集
{
    out.print(e.getString(2)+"  ");      //列印某一行的第二列
    out.print(e.getString(3)+"  ");
    out.print(e.getString(4)+"  ");
    out.print(e.getString(5)+"  ");
    out.print(e.getString(6)+"  ");
    out.print(e.getString(7)+"  ");
    out.print("<br>");
    
}   
%>
</center>
</body>
</html>

啟動tomcat和mysql服務,把專案在Server上執行,效果是這樣的:




  好吧,網頁設計的很爛,但重要的是mvc的設計思想。

  資料庫的資料也比較少,只有德國隊和巴西隊的資料一共46人,重要的是感受mvc的設計思想。。

最後把程式的流程圖貼一下:


雖然有很多不足,但自己從頭到尾部署Tomcat,建立資料庫,配置jdbc。。。還是學到了一點東西的。