1.MVC原理
M 代表 模型(model)即数据(dao、bean)
V 代表 视图 (view) 即网页、JSP,用来展示模型中的数据
C 代表 控制器 (controller)即用控制器将不同的数据(model)显示到不同的视图(view)上,在本文章中Servlet就充当控制器,把Hero对象显示在JSP上。
2.Spring MVC环境搭建
1.添加Spring MVC依赖的jar包
所需要添加的包老师已经提供了资源,下载解压之后赋值粘贴到“WebContent/WEB-INF/lib”目录下即可,添加完成后如下图所示:
2.导入必须的servlet-api.jar包
导入方法:右键->properties->Java Build Path ->Libraries->Add External JARs
导入结果如下图所示:
3.导入数据(bean、dao)
bean、bao代码老师已经提供了,直接使用即可,创建目录如下:
,
baen中具体代码如下:
package bean;
public class Hero {
public int id;
public String name;
public float hp;
public int damage;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getHp() {
return hp;
}
public void setHp(float hp) {
this.hp = hp;
}
public int getDamage() {
return damage;
}
public void setDamage(int damage) {
this.damage = damage;
}
}
dao中具体代码如下:
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import bean.Hero;
public class HeroDAO {
public HeroDAO() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root",
"123456");
}
public int getTotal() {
int total = 0;
try (Connection c = getConnection(); Statement s = c.createStatement();) {
String sql = "select count(*) from hero";
ResultSet rs = s.executeQuery(sql);
while (rs.next()) {
total = rs.getInt(1);
}
System.out.println("total:" + total);
} catch (SQLException e) {
e.printStackTrace();
}
return total;
}
public void add(Hero hero) {
String sql = "insert into hero values(null,?,?,?)";
try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
ps.setString(1, hero.name);
ps.setFloat(2, hero.hp);
ps.setInt(3, hero.damage);
ps.execute();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1);
hero.id = id;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void update(Hero hero) {
String sql = "update hero set name= ?, hp = ? , damage = ? where id = ?";
try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
ps.setString(1, hero.name);
ps.setFloat(2, hero.hp);
ps.setInt(3, hero.damage);
ps.setInt(4, hero.id);
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(int id) {
try (Connection c = getConnection(); Statement s = c.createStatement();) {
String sql = "delete from hero where id = " + id;
s.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
public Hero get(int id) {
Hero hero = null;
try (Connection c = getConnection(); Statement s = c.createStatement();) {
String sql = "select * from hero where id = " + id;
ResultSet rs = s.executeQuery(sql);
if (rs.next()) {
hero = new Hero();
String name = rs.getString(2);
float hp = rs.getFloat("hp");
int damage = rs.getInt(4);
hero.name = name;
hero.hp = hp;
hero.damage = damage;
hero.id = id;
}
} catch (SQLException e) {
e.printStackTrace();
}
return hero;
}
public List<Hero> list() {
return list(0, Short.MAX_VALUE);
}
public List<Hero> list(int start, int count) {
List<Hero> heros = new ArrayList<Hero>();
String sql = "select * from hero order by id desc limit ?,? ";
try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
ps.setInt(1, start);
ps.setInt(2, count);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Hero hero = new Hero();
int id = rs.getInt(1);
String name = rs.getString(2);
float hp = rs.getFloat("hp");
int damage = rs.getInt(4);
hero.id = id;
hero.name = name;
hero.hp = hp;
hero.damage = damage;
heros.add(hero);
}
} catch (SQLException e) {
e.printStackTrace();
}
return heros;
}
}
4.新建servelet
实现将数据库内容进行显示
具体代码如下:
package servlet;
import bean.Hero;
import dao.HeroDAO;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* Servlet implementation class HeroListServlet
*/
@WebServlet("/HeroListServlet")
public class HeroListServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Hero> heros = new HeroDAO().list();
request.setAttribute("heros", heros);
request.getRequestDispatcher("listHero.jsp").forward(request, response);
}
}
运行结果为:
3.进行增删改查操作
1.查询操作
具体代码如下:
package servlet;
import bean.Hero;
import dao.HeroDAO;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* Servlet implementation class HeroListServlet
*/
@WebServlet("/HeroListServlet")
public class HeroListServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Hero> heros = new HeroDAO().list();
request.setAttribute("heros", heros);
request.getRequestDispatcher("listHero.jsp").forward(request, response);
}
}
运行结果为:
2.删除操作
具体代码如下:
<%@ page language="java" import="java.sql.*" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>删除操作</title>
</head>
<body>
<%
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载数据库驱动时抛出异常,内容如下:");
e.printStackTrace();
}
Connection conn = DriverManager
.getConnection(
"jdbc:mysql://localhost/how2java?useUnicode=true&characterEncoding=utf8",
"root", "123456");
Statement stmt = conn.createStatement();
int trn = stmt.executeUpdate("delete from hero where name='盖伦'");
out.print("删除成功"+trn+"条");
stmt.close();
conn.close();
%>
</body>
</html>
运行结果为:
再次查询结果为:
3.修改操作
具体代码如下:
<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载数据库驱动时抛出异常,内容如下:");
e.printStackTrace();
}
Connection conn = DriverManager
.getConnection(
"jdbc:mysql://localhost/how2java?useUnicode=true&characterEncoding=utf8",
"root", "123456");
Statement stmt = conn.createStatement();
int trn = stmt.executeUpdate("update hero set name='疾风剑豪' where name='222'");//注意语句中的写法有的地方是,分隔 有的地方是空格分隔
out.print("修改成功"+trn+"条");
stmt.close();
conn.close();
%>
允许结果为:
再次查询结果为:
4.增加操作
具体代码如下:
<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载数据库驱动时抛出异常,内容如下:");
e.printStackTrace();
}
Connection conn = DriverManager
.getConnection(
"jdbc:mysql://localhost/how2java?useUnicode=true&characterEncoding=utf8",
"root", "123456");
Statement stmt = conn.createStatement();
int trn = stmt.executeUpdate("insert into hero(name,hp,damage) values('333','11','22')");
out.print("插入成功"+trn+"条");
stmt.close();
conn.close();
%>
运行结果:
再次查询的结果为: