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。。。还是学到了一点东西的。



猜你喜欢

转载自blog.csdn.net/xlantian/article/details/80802110