MVC模式下实现对于数据库的CRDU操作

具体原理在期末复习那一篇文章中,本文主要用于分享所有代码

控制层(Controller)在MVC中由Servlet文件来担任该角色,具体代码如下:

在运行时MVC文件时,在地址最后加上lisHero作为运行的url地址

则会运行到关键的页面中 

package servlet;

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 dao.HeroDAO;
import bean.Hero;
/**
 * Servlet implementation class AddServlet
 */
public class AddServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//		System.out.println("AddServlet跳转成功");
		// 设置request的编码格式
		request.setCharacterEncoding("UTF-8");
		// 获取请求传递来的数据
		String name = request.getParameter("name");
		int damage = Integer.parseInt(request.getParameter("damage"));
		float  hp= Float.parseFloat(request.getParameter("hp"));
		
		// 设置Hero对象的成员变量的参数
		Hero hero = new Hero();
		hero.setDamage(damage);
		hero.setHp(hp);
		hero.setName(name);
		
		
		// 调用HeroDAO()中的add(Hero hero)方法将数据进行添加
		HeroDAO heroDAO = new HeroDAO();
		heroDAO.add(hero);
		
		// 重定向到listHero页面,进行显示
		response.sendRedirect("listHero.jsp");
	}
}
package servlet;

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 dao.HeroDAO;
import bean.Hero;
/**
 * Servlet implementation class DeleteServlet
 */
public class DeleteServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
	            throws ServletException, IOException {
		// 获取要删除信息的id
		// 进行数据类型转换
		int id = Integer.parseInt(request.getParameter("id"));
		System.out.println("id="+id+"的数据成功删除");
		// 调用HeroDAO中的删除方法
		HeroDAO heroDAO = new HeroDAO();
		heroDAO.delete(id);
	}
	   }
package servlet;

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 dao.HeroDAO;

import bean.Hero;
/**
 * Servlet implementation class EditServlet
 */
@WebServlet("/EditServlet")
public class EditServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//			System.out.println("EditServlet跳转成功");
		// edit要实现的功能无非是设置数据库中的具体数据
		int id = Integer.parseInt(request.getParameter("id"));
		HeroDAO heroDAO = new HeroDAO();
		Hero hero = heroDAO.get(id);
		
		// 向request对象中添加hero对象
		request.setAttribute("hero",hero);
		// 调用转发语句,转发到目标jsp页面,request对象不变
		request.getRequestDispatcher("editHero.jsp").forward(request, response);
	}
}
package servlet;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import bean.Hero;
import dao.HeroDAO;
 
public class HeroListServlet extends HttpServlet {
	// post/get请求方法都会调用service()方法
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	response.setContentType("text/html;charset=utf-8");
    	int start = 0;
    	int count = 5;    
    	
        try {
        	// 从请求中获取start的值,实现翻页功能的核心代码
            start = Integer.parseInt(request.getParameter("start"));
        } catch (NumberFormatException e) {
            // 当浏览器没有传参数start时
        }
    	int next=start+count;
    	int pre = start-count;
    	int end;
    	// 末页的计算方相对复杂
    	// 首先获取数据的总数,调用DAO中的对应方法
    	HeroDAO heroDAO= new HeroDAO();
    	int total = heroDAO.getTotal();
    	// 没有余页时,即每一页都有count条数据
    	if (total%count==0){
    		end=total-count;
    	}
    	// 存在余页时
    	else{
    		end=total-total%count;
    	}
    	// 方法的重载,利用参数区别来实现参数的重载
    	// start为从request中获取到的
    	List<Hero> heros = new HeroDAO().list(start,count);
    	// 向请求中添加参数,实现参数的传递
    	request.setAttribute("next", next);
        request.setAttribute("heros", heros);
        request.setAttribute("pre", pre);
        request.setAttribute("end", end);
        // 
        request.getRequestDispatcher("listHero.jsp").forward(request, response);
        
    }
}
package servlet;
import bean.Hero;
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 dao.HeroDAO;
/**
 * Servlet implementation class InquireServlet
 */
public class InquireServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//		System.out.println("InquireServlet跳转成功");
		request.setCharacterEncoding("UTF-8");
		// 获取请求中的数据
		int id = Integer.parseInt(request.getParameter("id"));
		HeroDAO heroDAO = new HeroDAO();
		Hero hero = new Hero();
		hero = heroDAO.get(id);
		request.setAttribute("hero", hero);
		// 
		request.getRequestDispatcher("inquireResult.jsp").forward(request, response);
		
	}

}

 

package servlet;

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 bean.Hero;
import dao.HeroDAO;
/**
 * Servlet implementation class UpdateServlet
 */
public class UpdateServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		// System.out.println("UpdateServlet页面跳转成功")
		// 设置request编码格式
		request.setCharacterEncoding("UTF-8");
		// 获取request请求中的数据
		String name = request.getParameter("name");
		int id = Integer.parseInt(request.getParameter("id"));
		int damage = Integer.parseInt(request.getParameter("damage"));
		float hp = Float.parseFloat(request.getParameter("hp"));
		
		// 实现数据的修改
		Hero hero = new Hero();
		hero.setDamage(damage);
		hero.setHp(hp);
		hero.setId(id);
		hero.setName(name);
		
		// 对数据库中的信息进行更新
		new HeroDAO().update(hero);
		// 进行重定向,实现页面的跳转
		response.sendRedirect("listHero");
			 
	}

}

 Model(业务层)

 

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;
    }
      
}
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);
        // 方法的重载
        // 用参数进行区别
        // 调用下面的lis(int start,int conut)方法
    }
   
    
    public List<Hero> list(int start, int count) {
        List<Hero> heros = new ArrayList<Hero>();
   
        String sql = "select * from hero order by id asc limit ?,? ";
        //这是一个SQL查询语句,用于从hero表中按id倒序排列并限制返回结果的数量。其中,问号表示需要通过PreparedStatement设置的参数。
        //第一个问号表示偏移量(即从第几条记录开始返回),第二个问号表示返回的记录数量。这种使用PreparedStatement的方式可以有效地避免SQL注入攻击。
   
        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;
    }
   
}

 View(视图)

 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	<!--对数据编辑完成之后,就可以对于数据库中的数据进行更新了-->
	<form action="updateHero" method="post">
	<!-- value的作用使初始值显示在输入框中-->
	id:<input type="text" name="id" value="${hero.id }"><br>
	name:<input type="text" name="name" value="${hero.name }"><br>
	hp:<input type="text" name="hp" value="${hero.hp }"><br>
	damage:<input type="text" name="damage" value="${hero.damage }"><br>
	<input type="submit" value="提交">
	</form>
	</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	<table align='center' border='1' cellspacing='0'>
    <tr>
        <td>id</td>
        <td>name</td>
        <td>hp</td>
        <td>damage</td>
    </tr>
        <tr>
            <td>${hero.id}</td>
            <td>${hero.name}</td>
            <td>${hero.hp}</td>
            <td>${hero.damage}</td>
        </tr>
</table>
	</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 
<table align='center' border='1' cellspacing='0'>
    <tr>
        <td>id</td>
        <td>name</td>
        <td>hp</td>
        <td>damage</td>
        <td>edit</td>
        <td>delete</td>
    </tr>
    <c:forEach items="${heros}" var="hero" varStatus="st">
        <tr>
            <td>${hero.id}</td>
            <td>${hero.name}</td>
            <td>${hero.hp}</td>
            <td>${hero.damage}</td>
            <td><a href="editHero?id=${hero.id}">edit</a></td>
            <td><a href="deleteHero?id=${hero.id}">delete</a></td>
        </tr>
    </c:forEach>
    <tr>
    	<td colspan="6" align="center">
    		<a href="?start=0">[首页]</a>
    		<a href="?start=${pre}">[上一页]</a>
    		<a href="?start=${next}">[下一页]</a>
    		<a href="?start=${end}">[末页]</a>
    	</td>
    </tr>
</table>

<!-- 用于添加操作 -->
   <form action="addHero" method="post" align="center">
name:<input type="text" name="name"><br>
hp:<input type="text" name="hp"><br>
damage:<input type="text" name="damage"><br>
<input type="submit" value="添加">
   </form>

<!-- 用于查询操作 -->
<form action="inquireHero" method="post">
请输入要查询的Hero的id:<input type="text" name="id">
<input type="submit" value="查询">
</form>

 
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>登录界面</title>
	</head>
	<body>
	<!-- action中不要带/ -->
	<form action="login" method="post">
	name:<input type="text" name="name"><br>
	password:<input type="password" name="password"><br>
	<input type="submit" value="登录">
	<!--通过超链接跳转注册页面-->
	<a href="register.jsp" class="button">【注册】</a>
	</form>
	</body>
</html>

 具体web.xml映射文件(MVC模式下配置映射文件真的重复的一批)

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>HeroListServlet</servlet-name>
    <servlet-class>servlet.HeroListServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HeroListServlet</servlet-name>
    <url-pattern>/listHero</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>deleteServlet</servlet-name>
    <servlet-class>servlet.DeleteServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>deleteServlet</servlet-name>
    <url-pattern>/deleteHero</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>editServlet</servlet-name>
    <servlet-class>servlet.EditServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>editServlet</servlet-name>
    <url-pattern>/editHero</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>updateServlet</servlet-name>
    <servlet-class>servlet.UpdateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>updateServlet</servlet-name>
    <url-pattern>/updateHero</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>addServlet</servlet-name>
    <servlet-class>servlet.AddServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>addServlet</servlet-name>
    <url-pattern>/addHero</url-pattern>
  </servlet-mapping>
     <servlet>
        <servlet-name>InquireServlet</servlet-name>
        <servlet-class>servlet.InquireServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>InquireServlet</servlet-name>
        <url-pattern>/inquireHero</url-pattern>
    </servlet-mapping>
  
</web-app>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值