本文实例讲述了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">删除</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">第一页</a> <a href="getAllUser">上一页</a> </c:if> <c:if test="${pageNo!=pageCounter}"> <a href="getAllUser">下一页</a> <a href="getAllUser">最后一页</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">删除</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">第一页</a> <a href="getAllUser">上一页</a> </c:if> <c:if test="${pageNo!=pageCounter}"> <a href="getAllUser">下一页</a> <a href="getAllUser">最后一页</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">修改</a> </td> <td> <a href="deleteUser">删除</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程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]