前言javascript
這是一篇最第一版本的mvc設計模式的demo。弄明白這其中的邏輯,對後面掌握ssh,ssm等框架大有裨益。css
另外計算機系的同窗們也要爲畢設作準備了,但願能夠幫大家邁出本身作畢設的第一步(微笑臉.jgp)。html
特別提示:不要被文章篇幅嚇到(再次微笑臉.jpg)。文中貼出了部分過程圖片便於你們理解,而且代碼部分未摺疊,拿來即用!java
補充:因爲部分同窗在根聽說明搭建demo的過程當中會遇到一些問題,因此我把代碼在個人github上放了一份。你們能夠先下載再看下面的搭建過程,也能夠先本身動手搭建,遇到問題再對比異同,隨意咯~mysql
github地址:https://github.com/QubingHuo/javabean-jsp-servlet-jdbcgit
使用方法:github
1.新建一個名爲MyServlet的Dynamic Web Project,不論你使用的是idea,eclipse,仍是STS,均可以web
2.將github中的代碼下載sql
3.分別用從github中下載的代碼裏面的src目錄和webContent目錄,替換你新建的MyServlet項目中的src目錄和webContent目錄數據庫
4.修改helper.DbHelper中鏈接數據庫的用戶名和密碼
5.使用tomcat啓動項目,並經過 http://localhost:8080/MyServlet/list 訪問項目
下面進入詳細解說環節:
本篇採用javabean+jsp+servlet+jdbc,附源碼。
環境:win7 64位,jdk1.8,tomcat7,mysql 5.5
工具:eclipse,Navicat premium
jar包:mysql-connector-java-5.1.13-bin.jar
一. 新建數據表
在mysql中新建一個名爲my-db的數據庫,並在其中新建一個user數據表,包含三個字段:id,name,age,如圖
ps:在這裏給各位同窗安利一個叫作Navicat的數據庫操做軟件,功能十分強大。有了它,能夠大幅減小在cmd中輸入creat table...之類的命令數量,推薦Navicat Premium。
注意:將id設爲自動遞增,不然後面新增會出錯。id設爲自增,新增時就只需關注user的其它屬性。
二. 新建web項目
1. eclipse新建一個名爲MyServlet的Dynamic Web Project
修改class的默認輸出目錄爲:WebContent/WEB-INF/classes
勾選自動生成web.xml
生成的項目在java EE透視圖中的結構以下,
2. 將鏈接mysql的驅動jar包(mysql-connector-java-5.1.7-bin.jar)copy到WEB-INF下的lib目錄下
3. 新建4個包,common存放實體類(User),dao存放數據庫操做類(UserDao),servlet存放控制類(addServlet,updateServlet,deleteServlet,listServlet),helper存放開發幫助類(這裏是數據庫操做幫助類,封裝了數據庫鏈接部分代碼,避免大量重複代碼)
4. 新建類(最愉快的搬磚環節 -.-),java類放在對應包中,jsp頁面放在WebContent目錄下,替換web.xml中內容,結構如圖
User.java
package common; public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
UserDao.java
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import common.User; import helper.DbHelper; public class UserDao { /** * 查詢全部用戶信息 * @return */ public List<User> getAllUser(){ List<User> list = new ArrayList<User>(); Connection conn = DbHelper.getConnection();//鏈接數據庫 String sql = "select * from user"; try { PreparedStatement pst = conn.prepareStatement(sql); ResultSet rst = pst.executeQuery(); while (rst.next()) { User user = new User(); user.setId(rst.getInt("id")); user.setName(rst.getString("name")); user.setAge(rst.getInt("age")); list.add(user); } rst.close(); pst.close(); } catch (SQLException e) { e.printStackTrace(); } return list; } /** * 添加用戶 * @param user * @return */ public boolean addUser(User user){ String sql = "INSERT INTO `user`(`name`,`age`) VALUES (?,?)"; Connection conn = DbHelper.getConnection(); try { PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, user.getName()); pst.setInt(2, user.getAge()); int count = pst.executeUpdate(); pst.close(); return count>0?true:false; } catch (SQLException e) { e.printStackTrace(); } return false; } /** * 修改用戶信息 * @param user * @return */ public boolean updateUser(User user){ String sql = "UPDATE `user` SET `name`=?,`age`=? WHERE `id` = ?"; Connection conn = DbHelper.getConnection(); try { PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, user.getName()); pst.setInt(2, user.getAge()); pst.setInt(3, user.getId()); int count = pst.executeUpdate(); pst.close(); return count>0?true:false; } catch (SQLException e) { e.printStackTrace(); } return false; } /** * 刪除用戶 * @param id * @return */ public boolean deleteUser(int id){ String sql = "delete from user where id = ?"; Connection conn = DbHelper.getConnection(); try { PreparedStatement pst = conn.prepareStatement(sql); pst.setInt(1, id); int count = pst.executeUpdate(); pst.close(); return count>0?true:false; } catch (SQLException e) { e.printStackTrace(); } return false; } /** * 根據ID進行查詢用戶 * @param id * @return */ public User selectUserById(int id){ Connection conn = DbHelper.getConnection(); String sql = "select * from user where id = "+id; User user = null; try { PreparedStatement pst = conn.prepareStatement(sql); ResultSet rst = pst.executeQuery(); while (rst.next()) { user = new User(); user.setId(rst.getInt("id")); user.setName(rst.getString("name")); user.setAge(rst.getInt("age")); } rst.close(); pst.close(); } catch (SQLException e) { e.printStackTrace(); } return user; } }
DbHelper.java
package helper; import java.sql.Connection; import java.sql.DriverManager; public class DbHelper { private static String url = "jdbc:mysql://localhost:3306/my-db"; //數據庫地址 private static String userName = "root"; //數據庫用戶名 private static String passWord = "123456"; //數據庫密碼 private static Connection conn = null; private DbHelper(){ } public static Connection getConnection(){ if(null == conn){ try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, userName, passWord); } catch (Exception e) { e.printStackTrace(); } } return conn; } public static void main(String[] args) { //測試數據庫是否連通 System.out.println(getConnection()); } }
AddServlet.java
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 common.User; import dao.UserDao; public class AddServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); Integer age = Integer.valueOf(req.getParameter("age")); User user = new User();//建立user對象 user.setName(name); user.setAge(age); UserDao dao = new UserDao(); dao.addUser(user);//添加到數據庫中 req.getRequestDispatcher("list").forward(req, resp); } }
DeleteServlet.java
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.UserDao; public class DeleteServlet extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String idStr = req.getParameter("id"); // 刪除數據的ID,根據ID刪除 if (idStr != null && !idStr.equals("")) { int id = Integer.valueOf(idStr); UserDao dao = new UserDao(); dao.deleteUser(id); } req.getRequestDispatcher("list").forward(req, resp); } }
ListServlet.java
package servlet; import java.io.IOException; import java.util.List; 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 common.User; import dao.UserDao; //@WebServlet("/list") //上面註釋的是WebServlet3.0的使用方式,經過這樣的註解,不須要配置web.xml也可運行程序 public class ListServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { UserDao dao = new UserDao(); List<User> list = dao.getAllUser(); req.setAttribute("userInfoList", list); req.getRequestDispatcher("list.jsp").forward(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
UpdateServlet.java
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 common.User; import dao.UserDao; public class UpdateServlet extends HttpServlet { /** * 查詢到選中ID的值所對應的數據 */ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String idStr = req.getParameter("id"); if (idStr != null && !idStr.equals("")) { int id = Integer.valueOf(idStr); UserDao dao = new UserDao(); User user = dao.selectUserById(id); req.setAttribute("user", user); } req.getRequestDispatcher("update.jsp").forward(req, resp); } /** * 根據此ID對數據的值進行修改 */ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String idStr = req.getParameter("id"); if (idStr != null && !idStr.equals("")) { int id = Integer.valueOf(idStr); String name = req.getParameter("name"); Integer age = Integer.valueOf(req.getParameter("age")); User user = new User(); user.setId(id); user.setName(name); user.setAge(age); UserDao dao = new UserDao(); dao.updateUser(user); } req.getRequestDispatcher("list").forward(req, resp); } }
jsp頁面放在WebContent目錄下
add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>新增用戶</title> <script type="text/javascript"> function check(form) { with (form) { if (name.value == "") { alert("用戶名不能爲空"); return false; } } } </script> </head> <body> <form action="add" method="post" onsubmit="check(this)"> <table align="center" width="450"> <tr> <td align="center" colspan="2"> <h2>添加用戶信息</h2> <hr> </td> </tr> <tr> <td align="right">用戶名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td align="right">年齡:</td> <td><input type="text" name="age"></td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" value="添 加"> </td> </tr> </table> </form> </body> </html>
list.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@page import="java.util.List"%> <%@page import="common.User"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>全部用戶</title> <style type="text/css"> td { font-size: 12px; } h2 { margin: 0px } </style> <script type="text/javascript"> </script> </head> <body> <h2 align="center"> <a href="add.jsp">添加新用戶</a> </h2> <br> <table align="center" width="450" border="1" height="180" bordercolor="white" bgcolor="black" cellpadding="1" cellspacing="1"> <tr bgcolor="white"> <td align="center" colspan="7"> <h2>全部用戶信息</h2> </td> </tr> <tr align="center" bgcolor="#e1ffc1"> <td><b>ID</b></td> <td><b>姓名</b></td> <td><b>年齡</b></td> <td colspan="2"><b>操做</b></td> </tr> <% // 獲取用戶信息集合 List<User> list = (List<User>) request.getAttribute("userInfoList"); // 判斷是否有數據 if (list == null || list.size() < 1) { %> <tr bgcolor="white"><td colspan="5" ><h4 align="center">沒有數據</h4></td></tr> <% } else { // 遍歷用戶集合中的數據 for (User user : list) { %> <tr align="center" bgcolor="white"> <td><%=user.getId()%></td> <td><%=user.getName()%></td> <td><%=user.getAge()%></td> <td > <a href="update?id=<%=user.getId()%>">修改</a> </td> <td> <a href="delete?id=<%=user.getId()%>">刪除</a> </td> </tr> <% } } %> </table> </body> </html>
update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="common.User"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>修改用戶信息頁面</title> </head> <body> <div> <table> <thead><tr><td><h1>修改用戶信息</h1></td></tr></thead> <tbody> <form action="update" method="post"> <tr> <td>ID:</td> <td><input type="text" name="id" value="${user.id}" readonly="readonly" /></td> </tr> <tr> <td>name:</td> <td><input type="text" name="name" value="${user.name}" /></td> </tr> <tr> <td>age:</td> <td><input type="text" name="age" value="${user.age}" /></td> </tr> <tr> <td><input class="btn" type="submit" value="提交" /> <input class="btn" type="reset" value="重置" /></td> </tr> </tbody> </form> </table> </div> </body> </html>
替換web.xml中內容
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MyServlet</display-name> <servlet> <!-- servlet的註冊名稱,自定義。每一個servlet的name不同 --> <servlet-name>listServ</servlet-name> <!-- servlet的完整類名: 包名+類名;若是ctrl+鼠標左擊能 點開,說明成功--> <servlet-class>servlet.ListServlet</servlet-class> </servlet> <!-- servlet的映射配置 --> <servlet-mapping> <!-- servlet的註冊名稱,必定要和上面的內部名稱保持一致!! --> <servlet-name>listServ</servlet-name> <!-- servlet的對外訪問路徑(訪問servlet的名稱) --> <url-pattern>/list</url-pattern> </servlet-mapping> <!-- ps:同一個servlet能夠配置多個servlet-mapping,舉個栗子 --> <servlet-mapping> <!-- 仍是上面的那個servlet --> <servlet-name>listServ</servlet-name> <!-- 除了/ListServlet,又配置了一個list2,經過這兩個路徑均可訪問listServ這個servlet --> <url-pattern>/list2</url-pattern> </servlet-mapping> <servlet> <servlet-name>addServ</servlet-name> <servlet-class>servlet.AddServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>addServ</servlet-name> <url-pattern>/add</url-pattern> </servlet-mapping> <servlet> <servlet-name>updateServ</servlet-name> <servlet-class>servlet.UpdateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>updateServ</servlet-name> <url-pattern>/update</url-pattern> </servlet-mapping> <servlet> <servlet-name>delServ</servlet-name> <servlet-class>servlet.DeleteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>delServ</servlet-name> <url-pattern>/delete</url-pattern> </servlet-mapping> </web-app>
注意:代碼copy完成以後,須要將DbHelper.java中的鏈接數據庫的用戶名密碼修改成鏈接本身的數據庫的用戶名和密碼
三. 可能遇到的問題
有些同窗可能會遇到這樣的報錯:
這是因爲沒有將以上報錯的類所在的包添加到項目中,解決辦法:
右鍵項目->build path->configure bulid path->add library->server runtime->next->finish
四. 愉快的運行
發佈到tomcat並運行,訪問 http://localhost:8080/MyServlet/list