1. 程式人生 > >MVC-結合Servlet和JSP實現查詢功能

MVC-結合Servlet和JSP實現查詢功能

使用MVC的思想,結合Servlet和JSP進行做查詢操作

  • 實體類Hero

    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;
        }
          
    }
  • HeroDAO

    使用在前面教程中用到的HeroDAO用於從資料庫查詢資料
    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",
                    "admin");
        }
       
        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;
        }
       
    }
  • HeroListServlet

    作為控制器的HeroListServlet,其作用就是通過dao獲取所有的heros物件,然後放在request中,跳轉到listHero.jsp
    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 {
     
        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);
     
        }
    }
  • web.xml

    <web-app>
        <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>
    </web-app>
  • listHero.jsp

    作為檢視的listHero.jsp,其作用就是把控制器傳過來的資料顯示出來

    <%@ 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>
    </table>