前段时间学习了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。。。还是学到了一点东西的。