音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

JSP使用MVC模式完成删除和修改功能实例详解
日期:2021-09-07 15:48:18   来源:脚本之家

本文实例讲述了JSP使用MVC模式完成删除和修改功能的方法。分享给大家供大家参考。具体如下:

目标:

① 进一步理解MVC模式;
② 掌握删除功能的基本实现过程;
③ 掌握修改功能的基本实现过程。

主要内容:

① 使用MVC完成删除功能;
② 使用MVC模式完成信息更新功能。

1、如何使用MVC模式完成删除功能

根据MVC模式的特点,分别考虑MVC的3个部分。
① 首先考虑V部分:

输入:通常删除功能是在查询的基础上完成的,所以在用户信息列表界面上可以添加删除的超链。

输出:提示用户删除是否成功,可以采用单独的界面,也可以在其他页面中显示。我们采用第二种方式,在用户列表界面中显示提示信息。

② 其次考虑M部分:需要在User.java中添加删除用户的方法即可。

③ 最后考虑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模式:

V部分:

输入:在用户列表界面上添加“修改”超链。
输出:用户信息修改界面,把查询到的信息显示在修改界面上。

M部分:编写按照用户名查询用户信息的方法。

C部分:获取要删除的用户的名字,调用M部分的查询方法,得到用户信息,传递到修改界面,使用修改界面对用户响应。

对于第二部分,采用MVC模式:

V部分

输入:上面编写的修改界面。
输出:用户信息列表界面

M部分:编写用户信息修改的方法。

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); 
}
}

希望本文所述对大家的JSP程序设计有所帮助。

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程