利用Servlet做一套增刪改查


 真的,穩住,考上研,利用兩年逆襲。一步一步來,實在不行,最后最差也不過就是就回家種地,想想也不錯。

前期准備配置

建一個動態web項目

新建Dynamic Web Project
File->New->Other->Web->Dynamic Web Project

新建web.xml文件並新建幾個包

開始寫代碼

在entity在新建兩個類,User(用來登錄)和Hero(用來增刪改查)

user表和用戶表,代建。

數據庫連接放util中包中

package util;

import java.sql.Connection;
import java.sql.DriverManager;

import javax.sound.midi.Soundbank;

public class DbUtil {

    private String dbUrl="jdbc:mysql://localhost:3306/how2java";
    private String dbUserName="root";
    private String dbPassword="123456";
    private String jdbcName="com.mysql.jdbc.Driver";
    
    /**
     * 獲取數據庫連接
     * @return
     * @throws Exception
     */
    public Connection getCon() throws Exception{
        Class.forName(jdbcName);
        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
        System.out.println("數據庫連接成功!");
        return con;
    }
    
    /**
     * 關閉數據庫連接
     * @param con
     * @throws Exception
     */
    public void closeCon(Connection con) throws Exception{
        if(con!=null){
            con.close();
        }
    }
    
}

hero的增刪查改的方法實現放在dao包下

package dao;

import java.util.ArrayList;
import java.util.List;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;

import entity.Hero;
import util.DbUtil;

public class HeroDAO {
    DbUtil dbutil = new DbUtil();
//添加新英雄
    public void add(Hero hero) {
        String sql = "insert into hero values(null,?,?,?)";
        try {
            Connection c = (Connection) dbutil.getCon();
            PreparedStatement ps = (PreparedStatement) c.prepareStatement(sql);
            ps.setString(1, hero.name);
            ps.setFloat(2, hero.hp);
            ps.setInt(3, hero.damage);

            ps.execute();

            ResultSet rs = (ResultSet) ps.getGeneratedKeys();
            if (rs.next()) {
                int id = rs.getInt(1);
                hero.id = id;
            }
        } catch (Exception e) {

            e.printStackTrace();
        }
    }
//更新英雄
    public void update(Hero hero) {

        String sql = "update hero set name= ?, hp = ? , damage = ? where id = ?";
        try (Connection c = (Connection) dbutil.getCon();
                PreparedStatement ps = (PreparedStatement) 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 (Exception e) {

            e.printStackTrace();
        }

    }
//刪除英雄
    public void delete(int id) {

        try (Connection c = (Connection) dbutil.getCon();

                Statement s = (Statement) c.createStatement();) {

            String sql = "delete from hero where id = " + id;

            s.execute(sql);

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
//根據id號獲得英雄
    public Hero get(int id) {
        Hero hero = null;

        try (Connection c = (Connection) dbutil.getCon(); Statement s = (Statement) c.createStatement();) {

            String sql = "select * from hero where id = " + id;

            ResultSet rs = (ResultSet) 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 (Exception 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 asc limit ?,? ";

        try (Connection c = (Connection) dbutil.getCon();
                PreparedStatement ps = (PreparedStatement) c.prepareStatement(sql);) {

            ps.setInt(1, start);
            ps.setInt(2, count);

            ResultSet rs = (ResultSet) 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 (Exception e) {

            e.printStackTrace();
        }
        return heros;
    }
}

 

登錄模塊

login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登錄頁面</title>
</head>
<body>
  
<form action="login" method="POST">
賬號: <input type="text" name="name"> <br>
密碼: <input type="password" name="password"> <br>
<input type="submit" value="登錄">
</form>
  
</body>
</html>
從<form action="login" method="POST">可以看出,action為login,method為post
現在需要在web.xml中配置映射
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <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>  
</web-app>

現在編寫LoginServlet類

package servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;

import util.DbUtil;

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        System.out.println(name + "  " + password);
        String sql = "select * from user where name = '" + name +"' and password = '" + password+"'";
        DbUtil dbConnect = new DbUtil();
        try {
            Connection con = (Connection) dbConnect.getCon();
            Statement s = (Statement) con.createStatement();
            ResultSet set = (ResultSet) s.executeQuery(sql);
            if (set.next()) {
                System.out.println("賬號密碼正確");
                request.getSession().setAttribute("userName", name);
                request.getRequestDispatcher("/listHero").forward(request, response);//服務器跳轉
            } else {
                response.sendRedirect("fail.html");// 客戶端跳轉
                System.out.println("賬號密碼錯誤");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客戶端跳轉我設置了登錄信息錯誤跳轉到的頁面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>密碼或賬號錯誤</h1>
<a href="login.html">回到登陸界面重新登陸</a>
</body>
</html>

服務器跳轉是在web.xml中映射一個路徑,然后在相應的servlet中執行操作

 <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>

編寫HeroListServlet,以html形式展示出英雄列表

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

public class HeroListServlet extends HttpServlet{
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         String userName = (String) request.getSession().getAttribute("userName");
         System.out.println("歡迎"+userName);
        if (null == userName) {
            response.sendRedirect("login.html");
            return;
        }
        response.setContentType("text/html; charset=UTF-8");
        
        
        List<Hero> heros = new HeroDAO().list();

        StringBuffer sb = new StringBuffer();
        
        sb.append("<h1 align='center'>Welcome:</h1>");
        String ps = ("<h2 align='center'>%s</h2>");
        String ps1 = String.format(ps, userName);
        sb.append(ps1);
        
        ps1 = ("<div align='center'><a href='addHero.html'>增加成員</a></div>");//增加添加新成員的連接
        sb.append(ps1);
        
        
        sb.append("<table align='center' border='1' cellspacing='0'>\r\n");
        sb.append("<tr><td>id</td><td>name</td><td>hp</td><td>damage</td><td>delete</td><td>edit</td></tr>\r\n");

        String trFormat = "<tr><td>%d</td><td>%s</td><td>%f</td><td>%d</td>"
                + "<td><a href='deleteHero?id=%d'>delete</a></td>"//添加刪除連接
                + "<td><a href='editHero?id=%d'>edit</a></td></tr>\r\n";//添加修改連接

        for (Hero hero : heros) {
            //System.out.println(hero);
            String tr = String.format(trFormat, hero.getId(), hero.getName(), hero.getHp(),
                    hero.getDamage(),hero.getId(),hero.getId());//設置刪除和修改連接下的id就是相對應英雄的id
            sb.append(tr);
        }
        sb.append("</table>");
        response.getWriter().write(sb.toString());
    }
}

增加新成員鏈接下的操作

轉到添加頁面addHero.html

<!DOCTYPE html>
 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
<form action="addHero" method="post">
     名字 : <input type="text" name="name"> <br>
血量 : <input type="text" name="hp"> <br>
傷害: <input type="text" name="damage"> <br>
         <input type="submit" value="增加 ">
</form>

添加英雄

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.HeroDAO;
import entity.Hero;
import net.sf.json.JSONObject;

public class HeroAddServlet extends HttpServlet{
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException{
        
        request.setCharacterEncoding("UTF-8");
        
        String name = request.getParameter("name");
        String hp = request.getParameter("hp");
        String damage = request.getParameter("damage");
        
        Hero hero = new Hero();
        hero.setName(name);
        hero.setHp(Float.parseFloat(hp));
        hero.setDamage(Integer.parseInt(damage));
        
        new HeroDAO().add(hero);
        System.out.println("添加成功"+hero.toString());
        
        request.getRequestDispatcher("/listHero").forward(request, response);
    }
}

配置web.xml(添加編輯刪除的)

<servlet-mapping>
        <servlet-name>HeroAddServlet</servlet-name>
        <url-pattern>/addHero</url-pattern>
    </servlet-mapping>  
    
    <servlet>
        <servlet-name>HeroDeleteServlet</servlet-name>
        <servlet-class>servlet.HeroDeleteServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>HeroDeleteServlet</servlet-name>
        <url-pattern>/deleteHero</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>HeroEditServlet</servlet-name>
        <servlet-class>servlet.HeroEditServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>HeroEditServlet</servlet-name>
        <url-pattern>/editHero</url-pattern>
    </servlet-mapping>

刪除操作

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.HeroDAO;

public class HeroDeleteServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        int id = Integer.parseInt(request.getParameter("id"));//獲得要刪除的id

        new HeroDAO().delete(id);//調用刪除英雄方法
        
        request.getRequestDispatcher("/listHero").forward(request, response);//跳轉到展示hero頁面
    }
}

編輯操作

package servlet;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.HeroDAO;
import entity.Hero;

public class HeroEditServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        
        int id = Integer.parseInt(request.getParameter("id"));
        Hero hero = new HeroDAO().get(id);
        StringBuffer format = new StringBuffer();
        response.setContentType("text/html; charset=UTF-8");

        format.append("<!DOCTYPE html>");

        format.append("<form action='updateHero' method='post'>");
        format.append("名字 : <input type='text' name='name' value='%s' > <br>");
        format.append("血量 : <input type='text' name='hp'  value='%f' > <br>");
        format.append("傷害: <input type='text' name='damage'  value='%d' > <br>");
        format.append("<input type='hidden' name='id' value='%d'>");
        format.append("<input type='submit' value='更新'>");
        format.append("</form>");

        String html = String.format(format.toString(), hero.getName(), hero.getHp(), hero.getDamage(), hero.getId());

        response.getWriter().write(html);
    }
}
<form action='updateHero' method='post'>添加更新
更新操作
package servlet;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import dao.HeroDAO;
import entity.Hero;
 
public class HeroUpdateServlet extends HttpServlet {
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        request.setCharacterEncoding("UTF-8");
 
        Hero hero = new Hero();
        hero.setId(Integer.parseInt(request.getParameter("id")));
        hero.setName(request.getParameter("name"));
        hero.setHp(Float.parseFloat(request.getParameter("hp")));
        hero.setDamage(Integer.parseInt(request.getParameter("damage")));
 
        new HeroDAO().update(hero);
 
        request.getRequestDispatcher("/listHero").forward(request, response);
 
    }
}

小結:

  •  前端的數據可以在服務端通過其name屬性,利用request.getParameter("xxx");來獲取
  • 設置session,request.getSession().setAttribute("userName", name);這樣在服務端就可以通過 request.getSession().getAttribute("userName");獲取存入session的username
  • 服務端跳轉 request.getRequestDispatcher("success.html").forward(request, response);服務端跳轉可以看到瀏覽器的地址依然是之前的路徑路徑,並不會變成success.html
  • 客戶端跳轉 response.sendRedirect("fail.html");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM