javascript
[JSP暑假实训] 四.MyEclipse+Servlet+JSP实现火车票网站查询、修改、删除操作
本系列文章是作者暑假給學(xué)生進(jìn)行實(shí)訓(xùn)分享的筆記,主要介紹MyEclipse環(huán)境下JSP網(wǎng)站開(kāi)發(fā),包括JAVA基礎(chǔ)、網(wǎng)頁(yè)布局、數(shù)據(jù)庫(kù)基礎(chǔ)、Servlet、前端后臺(tái)數(shù)據(jù)庫(kù)交互、DAO等知識(shí)。
前一篇文章講解了通過(guò)Servlet獲取所提交的數(shù)據(jù),這篇文章將詳細(xì)講解MyEclipse+Servlet+JSP實(shí)現(xiàn)火車票管理系統(tǒng)的查詢頁(yè)面、模糊查詢、修改車票信息、刪除車票等操作。基礎(chǔ)性文章,希望對(duì)讀者有所幫助 ,尤其是我的學(xué)生。
參考前文:
Java+MyEclipse+Tomcat (一)配置過(guò)程及jsp網(wǎng)站開(kāi)發(fā)入門
Java+MyEclipse+Tomcat (二)配置Servlet及簡(jiǎn)單實(shí)現(xiàn)表單提交
Java+MyEclipse+Tomcat (三)配置MySQL及查詢數(shù)據(jù)顯示在JSP網(wǎng)頁(yè)中
Java+MyEclipse+Tomcat (四)Servlet提交表單和數(shù)據(jù)庫(kù)操作
Java+MyEclipse+Tomcat (五)DAO和Java Bean實(shí)現(xiàn)數(shù)據(jù)庫(kù)和界面分開(kāi)操作
Java+MyEclipse+Tomcat (六)詳解Servlet和DAO數(shù)據(jù)庫(kù)增刪改查操作
前文:
[JSP暑假實(shí)訓(xùn)] 一.MyEclipse安裝及JAVA基礎(chǔ)知識(shí)
[JSP暑假實(shí)訓(xùn)] 二.JSP網(wǎng)站創(chuàng)建及Servlet實(shí)現(xiàn)注冊(cè)表單提交、計(jì)算器運(yùn)算
[JSP暑假實(shí)訓(xùn)] 三.MySQL數(shù)據(jù)庫(kù)基本操作及Servlet網(wǎng)站連接顯示數(shù)據(jù)庫(kù)信息
下載地址:https://download.csdn.net/download/eastmount/11293780
文章目錄
- 一.查詢操作
- 二.刪除操作
- 三.查看詳情
- 四.修改操作
- 五.總結(jié)
一.查詢操作
1.新建Web工程,命名為“test0706_hcp”。
2.在工程中新建“imgs”文件夾,并放入圖片及連接MySQL的jar包。
3.創(chuàng)建數(shù)據(jù)庫(kù)hcp,新建表info,SQL語(yǔ)句如下所示:
-- ---------------------------- -- Table structure for `info` -- ---------------------------- DROP TABLE IF EXISTS `info`; CREATE TABLE `info` (`id` int(11) NOT NULL AUTO_INCREMENT,`start` varchar(40) DEFAULT NULL,`end` varchar(40) DEFAULT NULL,`name` varchar(40) DEFAULT NULL,`starttime` datetime DEFAULT NULL,`price` float DEFAULT NULL,`other` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;-- ---------------------------- -- Records of info -- ---------------------------- INSERT INTO `info` VALUES ('1', 'guiyang', 'kunming', 'T61', '2019-06-29 12:00:00', '56', null); INSERT INTO `info` VALUES ('2', 'guiyang', 'kaili', 'T88', '2019-06-29 12:00:00', '26', null); INSERT INTO `info` VALUES ('3', '貴陽(yáng)', '西安', 'T98', '2019-07-04 12:00:00', '126', null); INSERT INTO `info` VALUES ('4', '貴陽(yáng)', '武漢', 'T34', '2019-07-04 12:00:00', '86', null); INSERT INTO `info` VALUES ('5', '貴定', '西安', 'T51', '2019-07-04 12:00:00', '134', null); INSERT INTO `info` VALUES ('6', '昆明', '武漢', 'T21', '2019-06-29 12:00:00', '123', null);4.修改index.jsp網(wǎng)頁(yè)布局,代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>火車票管理系統(tǒng)</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><div align="center"><img src="imgs/bg.jpg" height="200" width="80%" /><br /><hr width="90%" color="red" size="3" /><h2>火車票查詢</h2><form method="post" action="index.jsp">起始地: <input type="text" name="start" size="20" />發(fā)車時(shí)間:<input type="date" name="sj" size="20" /><input type="submit" name="sub" value="查詢"></form><br /><br /><table border="2" width="80%"><tr><td>序號(hào)</td><td>起始地</td><td>目的地</td><td>車次</td><td>時(shí)間</td><td>價(jià)格</td><td>備注</td></tr></table><br /><hr width="90%" color="red" size="3" />?2019 YXZ 使用訂票系統(tǒng)前必讀 意見(jiàn)反饋 貴ICP證0000號(hào) <br />貴州財(cái)經(jīng)大學(xué)信息學(xué)院楊秀璋及16級(jí)軟工所有 貴財(cái)0000000000001號(hào) </div></body> </html>此時(shí)運(yùn)行結(jié)果如下圖所示:
5.在 index.jsp 中添加連接數(shù)據(jù)庫(kù)的JDBC代碼,并進(jìn)行起始地模糊查詢、時(shí)間查詢。
完整代碼如下:
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>火車票管理系統(tǒng)</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><div align="center"><img src="imgs/bg.jpg" height="200" width="80%" /><br /><hr width="90%" color="red" size="3" /><h2>火車票查詢</h2><%//驅(qū)動(dòng)的名稱String driverName = "com.mysql.jdbc.Driver";//數(shù)據(jù)庫(kù)用戶名密碼String userName = "root";String userPwd = "123456";//數(shù)據(jù)庫(kù)名字String dbName = "hcp";//表名String tableName = "info";//拼接字符串鏈接數(shù)據(jù)庫(kù)String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="+ userName + "&password=" +userPwd +"&useUnicode=true&characterEncoding=UTF-8";//鏈接數(shù)據(jù)庫(kù)Class.forName("com.mysql.jdbc.Driver").newInstance();//設(shè)置編碼方式request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");//獲取查詢的值String start = request.getParameter("start");System.out.println(start);String sj = request.getParameter("sj");System.out.println(sj);//SQL查詢ResultSet re;Connection con = DriverManager.getConnection(url);Statement statement = con.createStatement();String sql;//起始地為空判斷if(start==null||start=="") {if(sj==null||sj=="") { //查詢所有結(jié)果sql = "select * from " + tableName;System.out.println(sql);re = statement.executeQuery(sql);} else { //按時(shí)間查詢sql = "select * from " + tableName + " where date(starttime)='" + sj+ "';";System.out.println(sql);re = statement.executeQuery(sql);}}else {if(sj==null||sj=="") { //按起始點(diǎn)模糊查詢sql = "select * from " + tableName + " where start like '%" + start + "%';";System.out.println(sql);re = statement.executeQuery(sql);} else { //兩個(gè)字段查詢sql = "select * from " + tableName + " where start like '%" + start + "%' and date(starttime)='" + sj+ "';";System.out.println(sql);re = statement.executeQuery(sql);}}%><table border="2" width="80%"><tr><td>序號(hào)</td><td>起始地</td><td>目的地</td><td>車次</td><td>時(shí)間</td><td>價(jià)格</td><td>備注</td></tr><%while(re.next()) {%><tr><td><% out.print(re.getString(1)); %></td><td><% out.print(re.getString(2)); %></td><td><% out.print(re.getString(3)); %></td><td><% out.print(re.getString(4)); %></td><td><% out.print(re.getString(5)); %></td><td><% out.print(re.getString(6)); %></td><td><% out.print(re.getString(7)); %></td></tr><%} //end while//關(guān)閉連接re.close(); statement.close(); con.close(); %></table><br /><hr width="90%" color="red" size="3" />?2019 YXZ 使用訂票系統(tǒng)前必讀 意見(jiàn)反饋 貴ICP證0000號(hào) <br />貴州財(cái)經(jīng)大學(xué)信息學(xué)院楊秀璋及16級(jí)軟工所有 貴財(cái)0000000000001號(hào) </div></body> </html>初始化顯示結(jié)果如下所示:
select * from info;
模糊查詢結(jié)果:
select * from info where start like ‘%貴%’;
時(shí)間查詢:
select * from info where date(starttime)=‘2019-06-29’;
多字段查詢:
select * from info where start like ‘%貴陽(yáng)%’ and date(starttime)=‘2019-07-04’;
寫到這里,查詢功能基本實(shí)現(xiàn),接下來(lái)補(bǔ)充常見(jiàn)的錯(cuò)誤:
(1)中文編碼錯(cuò)誤是最常見(jiàn)的錯(cuò)誤,需要全部設(shè)置為“UTF-8”,包括數(shù)據(jù)庫(kù)、JSP、JAVA等。
(2)這里使用的傳遞參數(shù)為“post”方法,同時(shí)部分學(xué)生會(huì)出現(xiàn)SQL語(yǔ)句正常顯示,但無(wú)反饋結(jié)果,此時(shí)設(shè)置url需要增加編碼,如下:
String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="+ userName + "&password=" +userPwd +"&useUnicode=true&characterEncoding=UTF-8";(3)JAVA在調(diào)用SQL語(yǔ)句時(shí),注意字符串拼接,建議同學(xué)們用 System.out.print 輸出SQL語(yǔ)句,再觀察其是否錯(cuò)誤。尤其是from和where前后的空格、單引號(hào)等,其拼接代碼如下:
sql = "select * from " + tableName + " where start like '%" + start + "%' and date(starttime)='" + sj+ "';";(4)while循環(huán)輸出結(jié)果時(shí),注意 { 和 } 之間的內(nèi)容,它們把table布局嵌入其間。
<%while(re.next()) { %><tr><td><% out.print(re.getString(1)); %></td><td><% out.print(re.getString(2)); %></td><td><% out.print(re.getString(3)); %></td><td><% out.print(re.getString(4)); %></td><td><% out.print(re.getString(5)); %></td><td><% out.print(re.getString(6)); %></td><td><% out.print(re.getString(7)); %></td></tr> <%} //end while//關(guān)閉連接re.close(); statement.close(); con.close(); %>二.刪除操作
1.繼續(xù)修改 index.jsp 主頁(yè)內(nèi)容,如下所示:
<table border="2" width="80%"><tr align="center"><td>序號(hào)</td><td>起始地</td><td>目的地</td><td>車次</td><td>時(shí)間</td><td>價(jià)格</td><td>備注</td><td>詳情</td><td>刪除</td><td>更新</td></tr><%while(re.next()) { %><tr align="center"><td><% out.print(re.getString(1)); %></td><td><% out.print(re.getString(2)); %></td><td><% out.print(re.getString(3)); %></td><td><% out.print(re.getString(4)); %></td><td><% out.print(re.getString(5)); %></td><td><% out.print(re.getString(6)); %></td><td><% out.print(re.getString(7)); %></td><td><a href="Show.jsp?id=<% out.print(re.getString(1)); %>">詳情</a></td><td><a href="DeleteServlet?id=<% out.print(re.getString(1)); %>">刪除</a></td><td><a href="Update.jsp?id=<% out.print(re.getString(1)); %>">更新</a></td></tr><%} //end while//關(guān)閉連接re.close(); statement.close(); con.close(); %></table>此時(shí)顯示界面如下所示,注意 < a href=“DeleteServlet?id=<% out.print(re.getString(1)); %>”>刪除</ a> 表示跳轉(zhuǎn)到DeleteServlet頁(yè)面,id是傳遞的參數(shù),對(duì)應(yīng)數(shù)據(jù)庫(kù)火車票表的主鍵ID(序號(hào))。
2.創(chuàng)建DeleteServlet類,如下所示。
3.接著在 DeleteServlet.java 中撰寫代碼,導(dǎo)入 java.sql. * 擴(kuò)展包,并將連接數(shù)據(jù)庫(kù)的代碼復(fù)制到 doGet()函數(shù)中。它會(huì)提示如下所示錯(cuò)誤,數(shù)據(jù)庫(kù)相關(guān)操作需要放置在try/catch異常捕獲中,雙擊它就能自動(dòng)加載try-catch。
完整代碼如下所示,主要是doGet()函數(shù):
package servlet;import java.sql.*;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class DeleteServlet extends HttpServlet {public DeleteServlet() {super();}public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//獲取URL傳遞參數(shù)int id = Integer.valueOf(request.getParameter("id"));//驅(qū)動(dòng)的名稱String driverName = "com.mysql.jdbc.Driver";//數(shù)據(jù)庫(kù)用戶名密碼String userName = "root";String userPwd = "123456";//數(shù)據(jù)庫(kù)名字String dbName = "hcp";//表名String tableName = "info";//拼接字符串鏈接數(shù)據(jù)庫(kù)String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="+ userName + "&password=" +userPwd +"&useUnicode=true&characterEncoding=UTF-8";//鏈接數(shù)據(jù)庫(kù)try {Class.forName("com.mysql.jdbc.Driver").newInstance();//設(shè)置編碼方式request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");//SQL查詢ResultSet re;Connection con = DriverManager.getConnection(url);Statement statement = con.createStatement();String sql = "delete from " + tableName + " where id='" + id + "'";System.out.println(sql);//執(zhí)行SQL語(yǔ)句statement.execute(sql);} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.println("<h2><a href='index.jsp'>返回</a></h2>");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the POST method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}public void init() throws ServletException {// Put your code here} }此時(shí)運(yùn)行代碼,點(diǎn)擊“刪除”操作,可能會(huì)報(bào)錯(cuò)誤如下所示:
這是因?yàn)樘D(zhuǎn)路徑的問(wèn)題,有兩種處理方法:
< td >< a href=“DeleteServlet?id=<% out.print(re.getString(1)); %>”>刪除</ a></ td >
方法一:修改 web.xml 文件中的URL訪問(wèn)路徑,即除去 “servlet/” 字段。
方法二:創(chuàng)建Servlet類時(shí),設(shè)置它的URL訪問(wèn)路徑,如下圖所示。
4.運(yùn)行代碼,成果實(shí)現(xiàn)刪除功能。
三.查看詳情
新建 Show.jsp 頁(yè)面,編輯代碼如下所示:
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'Show.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><div align="center"><img src="imgs/bg.jpg" height="200" width="80%" /><br /><hr width="90%" color="red" size="3" /><h2>火車票信息更新</h2><%//驅(qū)動(dòng)的名稱String driverName = "com.mysql.jdbc.Driver";//數(shù)據(jù)庫(kù)用戶名密碼String userName = "root";String userPwd = "123456";//數(shù)據(jù)庫(kù)名字String dbName = "hcp";//表名String tableName = "info";//拼接字符串鏈接數(shù)據(jù)庫(kù)String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="+ userName + "&password=" +userPwd +"&useUnicode=true&characterEncoding=UTF-8";//鏈接數(shù)據(jù)庫(kù)Class.forName("com.mysql.jdbc.Driver").newInstance();//設(shè)置編碼方式request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");//獲取查詢的值String start = request.getParameter("start");System.out.println(start);String sj = request.getParameter("sj");System.out.println(sj);//SQL查詢ResultSet re;Connection con = DriverManager.getConnection(url);Statement statement = con.createStatement();int id = Integer.valueOf(request.getParameter("id"));String sql = "select * from " + tableName + " where id=" + id;System.out.println(sql);re = statement.executeQuery(sql); while(re.next()) {%><form action="index.jsp" method="get"><table border="0" width="30%"><tr align="left"><td>車次</td><td><input type="text" name="upcc" readonly="readonly" value="<% out.print(re.getString(2)); %>"></td></tr><tr align="left"><td>起始點(diǎn)</td><td><input type="text" name="upstart" readonly="readonly"value="<% out.print(re.getString(3)); %>"></td></tr><tr align="left"><td>目的地</td><td><input type="text" name="upend" readonly="readonly" value="<% out.print(re.getString(4)); %>"></td></tr><tr align="left"><td>時(shí)間</td><td><input type="text" name="uptime" readonly="readonly"value="<% out.print(re.getString(5)); %>"></td></tr><tr align="left"><td>價(jià)格</td><td><input type="text" name="upprice" readonly="readonly"value="<% out.print(re.getString(6)); %>"></td></tr><tr align="left"><td>備注</td><td><input type="text" name="upother" readonly="readonly"value="<% out.print(re.getString(7)); %>"></td></tr><tr align="center"><td colspan="2"><input type="submit" name="upsub" value="返回"></td></tr><%}%></table></form><hr width="90%" color="red" size="3" />?2019 YXZ 使用訂票系統(tǒng)前必讀 意見(jiàn)反饋 京ICP證030173號(hào) <br />貴州財(cái)經(jīng)大學(xué)信息學(xué)院YXZ所有 京公網(wǎng)安備11000002000001號(hào) </div></body> </html>運(yùn)行結(jié)果如下圖所示,均為只讀。點(diǎn)擊“返回”又繼續(xù)返回主頁(yè),需要注意的是URL包含id值,即:
http://desktop-2ptb11k:8080/test0706_hcp/Show.jsp?id=1
PS:比如新聞詳情頁(yè)面,通常都會(huì)用這種方式,顯示的結(jié)果直接用文本內(nèi)容即可,而不像這里的input控件。
四.修改操作
1創(chuàng)建一個(gè)Update.jsp文件,然后添加如下代碼,其中表單為:
< form action=“UpdateServlet” method=“get” >。
完整代碼如下:
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'Update.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><div align="center"><img src="imgs/bg.jpg" height="200" width="80%" /><br /><hr width="90%" color="red" size="3" /><h2>火車票信息更新</h2><%//驅(qū)動(dòng)的名稱String driverName = "com.mysql.jdbc.Driver";//數(shù)據(jù)庫(kù)用戶名密碼String userName = "root";String userPwd = "123456";//數(shù)據(jù)庫(kù)名字String dbName = "hcp";//表名String tableName = "info";//拼接字符串鏈接數(shù)據(jù)庫(kù)String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="+ userName + "&password=" +userPwd +"&useUnicode=true&characterEncoding=UTF-8";//鏈接數(shù)據(jù)庫(kù)Class.forName("com.mysql.jdbc.Driver").newInstance();//設(shè)置編碼方式request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");//獲取查詢的值String start = request.getParameter("start");System.out.println(start);String sj = request.getParameter("sj");System.out.println(sj);//SQL查詢ResultSet re;Connection con = DriverManager.getConnection(url);Statement statement = con.createStatement();int id = Integer.valueOf(request.getParameter("id"));String sql = "select * from " + tableName + " where id=" + id;System.out.println(sql);re = statement.executeQuery(sql); while(re.next()) {%><form action="UpdateServlet" method="get"><table border="0" width="30%"><tr align="left"><td>車次</td><td><input type="text" name="upcc" value="<% out.print(re.getString(2)); %>"></td></tr><tr align="left"><td>起始點(diǎn)</td><td><input type="text" name="upstart" value="<% out.print(re.getString(3)); %>"></td></tr><tr align="left"><td>目的地</td><td><input type="text" name="upend" value="<% out.print(re.getString(4)); %>"></td></tr><tr align="left"><td>時(shí)間</td><td><input type="text" name="uptime" value="<% out.print(re.getString(5)); %>"></td></tr><tr align="left"><td>價(jià)格</td><td><input type="text" name="upprice" value="<% out.print(re.getString(6)); %>"></td></tr><tr align="left"><td>備注</td><td><input type="text" name="upother" value="<% out.print(re.getString(7)); %>"></td></tr><tr align="left"><td colspan="2"><input type="hidden" name="id" value="<% out.print(re.getString(1)); %>"></td></tr><tr align="center"><td><input type="submit" name="upsub" value="提交"></td><td><input type="reset" name="upreset" value="撤銷"></td></tr><%}%></table></form> <hr width="90%" color="red" size="3" />?2019 YXZ 使用訂票系統(tǒng)前必讀 意見(jiàn)反饋 京ICP證030173號(hào) <br />貴州財(cái)經(jīng)大學(xué)信息學(xué)院YXZ所有 京公網(wǎng)安備11000002000001號(hào) </div></body> </html>注意:隱藏了一個(gè)input控件作為id值獲取,UpdateServlet中SQL語(yǔ)句需要通過(guò)它更新數(shù)據(jù)。
2.此時(shí)運(yùn)行結(jié)果如下圖所示,其內(nèi)容是可以替換的。
比如修改信息如下所示,包括時(shí)間、票價(jià)、備注,點(diǎn)擊“提交”按鈕。
其運(yùn)行結(jié)果如下所示,這是因?yàn)镾ervlet還沒(méi)有創(chuàng)建。
3.創(chuàng)建UpdateServlet類,并添加相關(guān)代碼,需要注意訪問(wèn)路徑設(shè)置如下。
package servlet;import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class UpdateServlet extends HttpServlet {public UpdateServlet() {super();}public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//設(shè)置編碼方式request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");//驅(qū)動(dòng)的名稱String driverName = "com.mysql.jdbc.Driver";//數(shù)據(jù)庫(kù)用戶名密碼String userName = "root";String userPwd = "123456";//數(shù)據(jù)庫(kù)名字String dbName = "hcp";//表名String tableName = "info";//拼接字符串鏈接數(shù)據(jù)庫(kù)String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="+ userName + "&password=" +userPwd +"&useUnicode=true&characterEncoding=UTF-8";//鏈接數(shù)據(jù)庫(kù)try {Class.forName("com.mysql.jdbc.Driver").newInstance();//獲取URL傳遞參數(shù) 中文亂碼??????????轉(zhuǎn)換int id = Integer.valueOf(request.getParameter("id"));String upcc = new String(request.getParameter("upcc").getBytes("ISO-8859-1"), "UTF-8"); //車次String upstart = new String(request.getParameter("upstart").getBytes("ISO-8859-1"), "UTF-8"); //起始點(diǎn)String upend = new String(request.getParameter("upend").getBytes("ISO-8859-1"), "UTF-8"); //目的地String uptime = new String(request.getParameter("uptime").getBytes("ISO-8859-1"), "UTF-8"); //時(shí)間String upprice = new String(request.getParameter("upprice").getBytes("ISO-8859-1"), "UTF-8"); //價(jià)格String upother = new String(request.getParameter("upother").getBytes("ISO-8859-1"), "UTF-8"); //備注System.out.println(upother);//SQL查詢Connection con = DriverManager.getConnection(url);Statement statement = con.createStatement();String sql = "update " + tableName + " set start='" + upstart + "' , end='" + upend + "' , name='" + upcc + "' , starttime='" + uptime + "' , price='" + upprice+ "' , other='" + upother + "' where id=" + id + ";";System.out.println(sql);//執(zhí)行SQL語(yǔ)句statement.execute(sql);//關(guān)閉連接 statement.close(); con.close();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}//重定向到//response.sendRedirect("index.jsp");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE>");out.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");out.println("<HEAD>");out.println(" <BODY>");out.println ("<script language=javascript>alert('更新成功!!!');window.location='index.jsp'</script>");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close(); }public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the POST method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}public void init() throws ServletException {// Put your code here} }此時(shí)的文件結(jié)果如下圖所示:
update info set start=‘武漢’ , end=‘T34’ , name=‘貴陽(yáng)’ , starttime=‘2019-07-06 12:00:00.0’ ,
price=‘188’ , other=‘這是一張很棒的火車票。’ where id=4;
輸出結(jié)果如下圖所示:
注意:GET方法可能存在中文編碼錯(cuò)誤,輸出“???”,修改方法主要是request調(diào)用setCharacterEncoding(“UTF-8”)方法設(shè)置為UTF-8。同時(shí),下面獲取的值也轉(zhuǎn)碼成UTF-8。
五.總結(jié)
目前雖然實(shí)現(xiàn)了網(wǎng)站的功能,但其代碼非常雜亂,JSP中嵌套這JAVA,JAVA中又嵌套著HTML,而我想實(shí)現(xiàn)的功能是:JSP就賦值布局,顯示界面;Java就負(fù)責(zé)連接數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)增刪改查,處理結(jié)果再返回給JSP中顯示,而不是相互嵌套的。換句話說(shuō):JSP中點(diǎn)擊“提交”按鈕,TextBox中傳遞出發(fā)地,Java中接著請(qǐng)求,數(shù)據(jù)庫(kù)查詢,得到的結(jié)果再返回給JSP中顯示。
那怎么實(shí)現(xiàn)呢?
接下來(lái)我們將介紹DAO和Java Bean對(duì)JDBC進(jìn)行分層、模塊化的最有效兩個(gè)方法。DAO(數(shù)據(jù)庫(kù)操作對(duì)象,Database Access Object)是JDBC下常用模式,DAO出現(xiàn)之前,操作數(shù)據(jù)庫(kù)的代碼與業(yè)務(wù)代碼都出現(xiàn)在Servlet或者JSP中,不利用業(yè)務(wù)代碼的分離。DAO出現(xiàn)后,所有與數(shù)據(jù)庫(kù)相關(guān)的操作全被拿到了DAO層實(shí)現(xiàn),Servlet或JSP只操作Java Bean或者DAP層,而DAO層值操作數(shù)據(jù)庫(kù)。
周末的深夜,呆在辦公室準(zhǔn)備明天的JAVA網(wǎng)站開(kāi)發(fā)實(shí)訓(xùn),不同的是,這次有學(xué)生陪伴。各行各業(yè)都很辛苦,996和5+2讓我們更珍惜生活,學(xué)生也更應(yīng)該抓住編程的時(shí)光。看到學(xué)生開(kāi)始學(xué)會(huì)分享博客、分享知識(shí),真的很高興,又拉了一些人“入坑”,傳道授業(yè)解惑,為之而努力。
夜色已深,月光打在身上,勾勒出你看書(shū)時(shí)最美的側(cè)臉,吹滅讀書(shū)燈,一身都是月,任是尋常動(dòng)人,想你了。接著在辦公室寫代碼了,fighting
(By:Eastmount 2019-07-06 夜9點(diǎn) http://blog.csdn.net/eastmount/)
總結(jié)
以上是生活随笔為你收集整理的[JSP暑假实训] 四.MyEclipse+Servlet+JSP实现火车票网站查询、修改、删除操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [JSP暑假实训] 三.MySQL数据库
- 下一篇: [网络安全自学篇] 三.Burp Sui