JSP培训(9)——使用MVC模式完成删除和修改功能

来源:互联网 发布:广告语音制作软件 编辑:程序博客网 时间:2024/06/03 01:40

目标:
l         进一步理解MVC模式;
l         掌握删除功能的基本实现过程;
l         掌握修改功能的基本实现过程。
主要内容:
l         使用MVC完成删除功能;
l         使用MVC模式完成信息更新功能。
1、 如何使用MVC模式完成删除功能
根据MVC模式的特点,分别考虑MVC的3个部分。
n         首先考虑V部分:
u       输入:通常删除功能是在查询的基础上完成的,所以在用户信息列表界面上可以添加删除的超链。
u       输出:提示用户删除是否成功,可以采用单独的界面,也可以在其他页面中显示。我们采用第二种方式,在用户列表界面中显示提示信息。
n         其次考虑M部分:需要在User.java中添加删除用户的方法即可。
n         最后考虑C部分:获取用户要删除的用户名,然后调用M部分完成删除,最后转向用户信息列表界面。
下面分别实现。
2、 在userlist.jsp文件中添加删除超链和提示信息
1)添加删除超链(红色部份):
           <c:forEach var="user" items="${users}">
                     <tr>
                            <td>
                                   ${user.username}
                            </td>
                            <td>
                                   ${user.userpass}
                            </td>
                            <td>
                                   <a href="deleteUser?username=${user.username}">删除</a>
                            </td>
                     </tr>
              </c:forEach>
    注意:删除的时候需要知道要删除的用户的名字(这里名字作为主键),所以通过参数传递名字。
2)添加提示信息:
<font color="red"> ${deleteinfo} </font>
3)修改后的代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<font color="red"> ${addinfo} </font>
<font color="red"> ${deleteinfo} </font>
<br>
<c:if test="${pageNo!=1}">
       <a href="getAllUser?pageNo=1">第一页</a>
       <a href="getAllUser?pageNo=${pageNo-1}">上一页</a>
</c:if>
<c:if test="${pageNo!=pageCounter}">
       <a href="getAllUser?pageNo=${pageNo+1}">下一页</a>
       <a href="getAllUser?pageNo=${pageCounter}">最后一页</a>
</c:if>
<br>
<table width="200" border="1" height="56">
       <tbody>
              <tr>
                     <td>
                            用户名
                     </td>
                     <td>
                            口令
                     </td>
                     <td>
                           
                     </td>
              </tr>
              <c:forEach var="user" items="${users}">
                     <tr>
                            <td>
                                   ${user.username}
                            </td>
                            <td>
                                   ${user.userpass}
                            </td>
                            <td>
                                   <a href="deleteUser?username=${user.username}">删除</a>
                            </td>
                     </tr>
              </c:forEach>
       </tbody>
</table>
3、 编写M部分:在User.java中添加方法
在User.java中添加deleteUser方法,参考代码如下:
public boolean deleteUser(String username) {
        Connection con = null;
        Statement stmt = null;
        boolean b; // 表示删除成功与否
 
        try {
               // 指出连接数据库所需要的驱动程序
               Class.forName("oracle.jdbc.driver.OracleDriver");
 
               // 建立与数据库之间的连接
               con = DriverManager.getConnection(
                             "jdbc:oracle:thin:@myserver:1521:mydb", "scott",
                             "tiger");
 
               // 编写查询数据库信息的SQL语句
               String sql = "delete from usertable where username='" + username + "'";
 
               // 创建语句对象,用于执行SQL语句
               stmt = con.createStatement();
 
               // 执行没有结果集返回的语句,返回的是影响数据库表中记录的个数
               int n = stmt.executeUpdate(sql);
 
               if (n > 0)
                      b = true;
               else
                      b = false;
        } catch (Exception e) {
               b = false;
        } finally {
              // 关闭相关对象
               if (stmt != null)
                      try {
                             stmt.close();
                      } catch (Exception ee) {
                      }
               if (con != null)
                      try {
                             con.close();
                      } catch (Exception ee) {
                      }
        }
        return b;
}
注意:红色部分需要修改成您自己的服务器和数据库。
4、 编写C部分:添加DeleteUser控制器
DeleteUser.java的代码如下:
package servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javabean.User;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class DeleteUser extends HttpServlet {
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
        //获取信息
        String username = request.getParameter("username");
       
        // 调用JavaBean
        User user = new User();
        boolean b = user.deleteUser(username);
       
        // 传递删除成功或失败的信息
        String info;
        if(b)
               info = "删除成功!";
        else
               info = "删除失败!";
    request.setAttribute("deleteinfo",info);
       
        // 选择界面对用户响应
        RequestDispatcher rd = request.getRequestDispatcher("getAllUser");
        rd.forward(request,response);
 
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
         doGet(request,response);
}
}
5、 如何使用MVC模式实现修改功能
修改功能本身包括两个过程:用户选择要修改的用户,然后把该用户的信息显示在修改界面上;用户进行修改,修改之后提交,服务器完成修改功能。
对于第一个功能,采用MVC模式:
l         V部分:
n         输入:在用户列表界面上添加“修改”超链。
n         输出:用户信息修改界面,把查询到的信息显示在修改界面上。
l         M部分:编写按照用户名查询用户信息的方法。
l         C部分:获取要删除的用户的名字,调用M部分的查询方法,得到用户信息,传递到修改界面,使用修改界面对用户响应。
对于第二部分,采用MVC模式:
l         V部分
n         输入:上面编写的修改界面。
n         输出:用户信息列表界面
l         M部分:编写用户信息修改的方法。
l         C部分:获取用户输入的信息,调用M部分完成修改,转向列表界面对用户进行响应。
下面分别介绍实现方法。
6、 修改用户信息列表界面
修改后的代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<font color="red"> ${addinfo} </font>
<font color="red"> ${deleteinfo} </font>
<font color="red"> ${updateinfo} </font>
<br>
<c:if test="${pageNo!=1}">
<a href="getAllUser?pageNo=1">第一页</a>
<a href="getAllUser?pageNo=${pageNo-1}">上一页</a>
</c:if>
<c:if test="${pageNo!=pageCounter}">
<a href="getAllUser?pageNo=${pageNo+1}">下一页</a>
<a href="getAllUser?pageNo=${pageCounter}">最后一页</a>
</c:if>
<br>
<table width="200" border="1" height="56">
<tbody>
        <tr>
               <td>
                      用户名
               </td>
               <td>
                      口令
               </td>
               <td>
                     
               </td>
        </tr>
        <c:forEach var="user" items="${users}">
               <tr>
                      <td>
                             ${user.username}
                      </td>
                      <td>
                             ${user.userpass}
                      </td>
                      <td>
                             <a href="findUser?username=${user.username}">修改</a>
                      </td>
                      <td>
                             <a href="deleteUser?username=${user.username}">删除</a>
                      </td>
               </tr>
        </c:forEach>
</tbody>
</table>
7、 编写信息修改界面
参考代码如下:
<%@ page contentType="text/html;charset=gb2312"%> 修改用户<br>
<form name="form1" method="post" action="updateUser">
   用户名:${user.username}
<input type="hidden" name="username" value="${user.username}"><br>
   口令:<input type="text" name="userpass" value="${user.userpass}"><br>
       <input type="submit" value="修改"><input type="reset" value="重置">
</form>
8、 在User.java中添加查询信息的方法
    public User findUserByName(String username) {
              Connection con = null;
              Statement stmt = null;
              ResultSet rs = null;
             
              try {
                     // 指出连接数据库所需要的驱动程序
                     Class.forName("oracle.jdbc.driver.OracleDriver");
 
                     // 建立与数据库之间的连接
                     con = DriverManager.getConnection(
                                   "jdbc:oracle:thin:@myserver:1521:mydb", "scott",
                                   "tiger");
 
                     // 编写查询数据库信息的SQL语句
                     String sql = "select * from usertable where username='" + username + "'";
 
                     // 创建语句对象,用于执行SQL语句
                     stmt = con.createStatement();
 
                     // 执行没有结果集返回的语句,返回的是影响数据库表中记录的个数
                     rs = stmt.executeQuery(sql);
                    
                     if(rs.next()){
                            User user = new User();
                            String userpass = rs.getString(2);
                            user.setUsername(username);
                            user.setUserpass(userpass);
                            return user;
                     }                  
              } catch (Exception e) {
                     return null;
              } finally {
                     // 关闭相关对象
                     try{
                            rs.close();
                     }catch(Exception e){}
                     if (stmt != null)
                            try {
                                   stmt.close();
                            } catch (Exception ee) {
                            }
                     if (con != null)
                            try {
                                   con.close();
                            } catch (Exception ee) {
                            }
              }
              return null;
       }
注意:红色部分需要修改成您自己的服务器和数据库。
9、 在User.java中添加“修改信息”的方法
public boolean update() {
        Connection con = null;
        Statement stmt = null;
        boolean b;
       
        try {
               // 指出连接数据库所需要的驱动程序
               Class.forName("oracle.jdbc.driver.OracleDriver");
 
               // 建立与数据库之间的连接
               con = DriverManager.getConnection(
                             "jdbc:oracle:thin:@myserver:1521:mydb", "scott",
                             "tiger");
 
               // 编写更新的sQL语句
               String sql = "update usertable set userpass = '"+userpass+"' where username='" + username + "'";
 
               // 创建语句对象,用于执行SQL语句
               stmt = con.createStatement();
 
               // 执行没有结果集返回的语句,返回的是影响数据库表中记录的个数
               int n = stmt.executeUpdate(sql);
              
               if(n>0)
                      b=true;
               else
                      b=false;
        } catch (Exception e) {
               b = false;
        } finally {
               if (stmt != null)
                      try {
                             stmt.close();
                      } catch (Exception ee) {
                      }
               if (con != null)
                      try {
                             con.close();
                      } catch (Exception ee) {
                      }
        }
        return b;
}
注意:红色部分需要修改成您自己的服务器和数据库。
10、              编写查询信息的Servlet
参考代码如下:
package servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javabean.User;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class FindUser extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
        doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
       // 获取信息
        String username = request.getParameter("username");
       
        //调用Javabean
        User user = new User();
        user = user.findUserByName(username);
       
        // 传递值
        request.setAttribute("user", user);
 
        // 选择界面对用户进行响应
        RequestDispatcher rd = request.getRequestDispatcher("updateuser.jsp");
        rd.forward(request, response);                         
}
}
11、              编写修改信息的Servlet
参考代码如下:
package servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javabean.User;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class UpdateUser extends HttpServlet {
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
        doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
   // 获取信息
        String username = request.getParameter("username");
        String userpass = request.getParameter("userpass");
       
        //调用Javabean
        User user = new User();
        user.setUsername(username);
        user.setUserpass(userpass);
        boolean b = user.update();
       
        // 传递值
        String info ;
        if(b)
               info="修改成功!";
        else
               info="修改失败!";
 
        // 选择界面对用户进行响应
        RequestDispatcher rd = request.getRequestDispatcher("getAllUser");
        rd.forward(request, response);    
 
}
}
参考教材:《Java Web程序设计基础教程》

JSP培训目录:

JSP培训(1)——概述
JSP培训(2)——运行原理、文档结构、简单输入输出
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
JSP培训(5)——使用JavaBean完成业务逻辑
JSP培训(6)——使用Servlet作为控制器实现MVC模式
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
JSP培训(8)——添加功能和分页显示
JSP培训(9)——使用MVC模式完成删除和修改功能
JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用
JSP培训(11)——Java Web中的安全控制
JSP培训(12)——Java Web应用国际化
JSP培训(13)——异常处理
JSP培训(14)——购物车实例(上)
JSP培训(15)——购物车实例(下)及小结
返回JSP培训目录