快应用1000版本web组件不支持input的type为file的临时变通方法

针对快应用1000版本中无法直接通过web组件上传文件的问题,本文提出了一种变通方案,利用titlereceive事件实现文件上传功能,支持用户选择图片或拍照上传,同时介绍了如何检测网络状态和上传进度。
快应用1000及以前版本的web组件目前还不是<input type="file">的元素,所以在web组件中暂时无法直接上传文件,据说1010版本上会支持,但是不知道可以支持到什么程度,能否支持拍照上传呢???

现在自己在开发的项目原来在web页面上就有用户注册功能,在快应用上也放了注册入口,但是注册时无法通过input上传证照图片,只好变通的实现。

查看web组件的相关帮助文档   https://doc.quickapp.cn/widgets/web.html
发现有titlereceive事件,这个和原来windows应用程序开发时的webbrowser控件的titlechange事件是一样的,都可以实现web组件主动通知框架程序的功能,由此也就来思路了。

假定原来在自己的h5页面上有个<input type="file">控件,用来选择图片文件,并将图片上传到指定URL 上进行接收,URL上已经同时指定了接收后要存储的路径和存储文件名(下面简称接收URL),上传成功后可以预知已上传文件的URL(下面简称文件URL)

首先修改h5页面上的input按钮的相关功能,可以根据来源决定是否使用 <input type="file">控件,从快应用打开页面时用button代替即可,onclick时,动态的改变h5页面的title,然后定时判断文件是否上传成功
  1. function btnClick(){
  2.         //改变页面标题,用于通知快应用要上传图片啦
  3.         var tit = document.title;
  4.         document.title = "upload@@接收URL";
  5.         setTimeout(function(){document.title = tit;},1000); //设置完毕后进行title复原,保证下次调用时可以改变title
  6.         
  7.         //启动定时器,定时判断图片是否已经上传到服务器,最好指定最大判断次数
  8.         var qmImgChkTimes = 0;                
  9.         var qmImgChk = parseInt($(this).attr("intid"));
  10.         qmImgChk > 0 && clearInterval(qmImgChk);
  11.         qmImgChk = setInterval(function(){
  12.                 var iUrl = 文件URL;
  13.                 //判断文件是否上传成功
  14.                 $.ajax({
  15.                         type:'head',
  16.                         url:iUrl,
  17.                         cache:false,
  18.                         async:false, 
  19.                         success:function(data,textStatus, xhr){
  20.                                 clearInterval(qmImgChk);
  21.                                 //文件已经上传,进行后续操作        
  22.                                 
  23.                                 
  24.                         }
  25.                 });
  26.                                 
  27.                 qmImgChkTimes ++;        
  28.                 //检测30次后不再检测                
  29.                 if(qmImgChkTimes > 30){
  30.                         clearInterval(qmImgChk);
  31.                 }
  32.         }, 2000);        
  33.         $(this).attr("intid", qmImgChk);
  34. }
复制代码



快应用在界面上摆放的web组件中定义titlereceive事件

  1. <web id="web" ontitlereceive="onWebTitReceive" ></web>                
  2.                
复制代码
然后在titlereceive事件中检测是否有文件上传的请求,有上传请求时弹出上传提示,可以选择拍照上传或从图库中选择
  1. import prompt from '@system.prompt'
  2. import webview from '@system.webview' 
  3. import request from '@system.request'
  4. import media from '@system.media' 
  5. import network from '@system.network' 



  6. onWebTitChange(obj){
  7.         var that = this;
  8.         if(!obj.title){return}
  9.         if(obj.title.indexOf('upload@') == 0){
  10.                 var finfo = obj.title.substr(8, 100000);                
  11.                 that.onNetworkType(function(m, tp){
  12.                         if(tp == "none"){
  13.                                 msgbox("当前网络不可用,无法上传文件!")
  14.                                 return;
  15.                         }
  16.                         var msg = (m ? '您当前正在使用 ' + tp.toUpperCase() + ' 模式上网,上传文件会耗费流量,确定继续吗?\r\n\r\n' : '') + '继续请选择文件上传方式';
  17.                         var btnA = [{
  18.                                         text: '拍照上传',
  19.                                         color: '#3CC51F'
  20.                         },{
  21.                                         text: '图库中选择',
  22.                                         color: '#00a7e6'
  23.                         }];
  24.                         if(m){
  25.                                 btnA.push({text: '取消',color: '#f44336'})
  26.                         }
  27.                         prompt.showDialog({
  28.                                 title: '文件上传',
  29.                                 message: msg,
  30.                                 buttons: btnA,
  31.                                 success: function (res) {
  32.                                         if (res.index == 0) {
  33.                                                 media.takePhoto({
  34.                                                         success: function (data) {
  35.                                                                 that.onFileUpload(finfo, data.uri);
  36.                                                         }
  37.                                                 });
  38.                                         }else if (res.index == 1){
  39.                                                 media.pickImage({
  40.                                                         success: function (data) {
  41.                                                                 that.onFileUpload(finfo, data.uri);
  42.                                                         }
  43.                                                 });
  44.                                         }
  45.                                 }
  46.                         });        
  47.                 });                                
  48.         }
  49. },
  50. onFileUpload(furl, furi){                        
  51.         //furl为接收URL, furi为本地文件路径
  52.         var that = this;
  53.         var fname = 解析furl获取文件名
  54.         //开始上传文件...');
  55.         request.upload({
  56.                 url: furl,
  57.                 files: [
  58.                         {
  59.                                 uri: furi,
  60.                                 name: 'file',
  61.                                 filename: fname
  62.                         }
  63.                 ],
  64.                 success: function (data) {
  65.                         //上传成功
  66.                 },
  67.                 fail: function (data, code) {
  68.                         //上传失败
  69.                 }
  70.         });
  71. },
  72. onNetworkType(callback){
  73.         network.getType({
  74.                 success: function (data) {
  75.                         if(callback){
  76.                                 callback(data.metered, data.type);
  77.                         }
  78.                 }
  79.         })
  80. }
复制代码




这种做法的弊端是h5页面中要定时去判断文件是否上传,会消耗一定的流量,同时h5和快应用都需要进行改动适配。
优势就是可以选择图片上传,也可以拍照上传,还可以在上传前判断手机端的网络状况。(下一版本的快应用据说也会支持选择非图片文件的接口)

下一版本即便支持了h5页面中的input上传功能,也不能确定是否支持拍照上传,所以上述变通方法也许在版本升级后还会有使用的意义
package com.example.crud; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/student_course?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "123456"; static { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } } package com.example.crud.dao; import com.example.crud.DBUtil; import com.example.crud.model.Course; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class CourseDao { public void addCourse(String cno, String cname, String cpno, int ccredit) throws SQLException { String sql = "INSERT INTO c (Cno, Cname, Cpno, ccredit) VALUES (?, ?, ?, ?)"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, cno); ps.setString(2, cname); ps.setString(3, cpno); ps.setInt(4, ccredit); ps.executeUpdate(); } } public void deleteCourse(String cno) throws SQLException { String sql = "DELETE FROM c WHERE Cno = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, cno); ps.executeUpdate(); } } public void updateCourse(String cno, String cname, String cpno, int ccredit) throws SQLException { String sql = "UPDATE c SET Cname = ?, Cpno = ?, ccredit = ? WHERE Cno = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, cname); ps.setString(2, cpno); ps.setInt(3, ccredit); ps.setString(4, cno); ps.executeUpdate(); } } public List<Course> getAllCourses() throws SQLException { String sql = "SELECT * FROM c"; List<Course> courses = new ArrayList<>(); try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) { while (rs.next()) { Course course = new Course(); course.setCno(rs.getString("Cno")); course.setCname(rs.getString("Cname")); course.setCpno(rs.getString("Cpno")); course.setCcredit(rs.getInt("ccredit")); courses.add(course); } } return courses; } } package com.example.crud.dao; import com.example.crud.DBUtil; import com.example.crud.model.Enrollment; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class EnrollmentDao { public void addEnrollment(String sno, String cno, int grade) throws SQLException { String sql = "INSERT INTO sc (Sno, Cno, grade) VALUES (?, ?, ?)"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, sno); ps.setString(2, cno); ps.setInt(3, grade); ps.executeUpdate(); } } public void deleteEnrollment(String sno, String cno) throws SQLException { String sql = "DELETE FROM sc WHERE Sno = ? AND Cno = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, sno); ps.setString(2, cno); ps.executeUpdate(); } } public void updateEnrollment(String sno, String cno, int grade) throws SQLException { String sql = "UPDATE sc SET grade = ? WHERE Sno = ? AND Cno = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setInt(1, grade); ps.setString(2, sno); ps.setString(3, cno); ps.executeUpdate(); } } public List<Enrollment> getAllEnrollments() throws SQLException { String sql = "SELECT * FROM sc"; List<Enrollment> enrollments = new ArrayList<>(); try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) { while (rs.next()) { Enrollment enrollment = new Enrollment(); enrollment.setSno(rs.getString("Sno")); enrollment.setCno(rs.getString("Cno")); enrollment.setGrade(rs.getInt("grade")); enrollments.add(enrollment); } } return enrollments; } } package com.example.crud.dao; import com.example.crud.DBUtil; import com.example.crud.model.Student; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class StudentDao { public void addStudent(String sno, String sname, String ssex, int sage, String sdept, String sbirthday) throws SQLException { String sql = "INSERT INTO s (Sno, Sname, Ssex, Sage, sdept, Sbirthday) VALUES (?, ?, ?, ?, ?, ?)"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, sno); ps.setString(2, sname); ps.setString(3, ssex); ps.setInt(4, sage); ps.setString(5, sdept); ps.setString(6, sbirthday); ps.executeUpdate(); } } public void deleteStudent(String sno) throws SQLException { String sql = "DELETE FROM s WHERE Sno = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, sno); ps.executeUpdate(); } } public void updateStudent(String sno, String sname, String ssex, int sage, String sdept, String sbirthday) throws SQLException { String sql = "UPDATE s SET Sname = ?, Ssex = ?, Sage = ?, sdept = ?, Sbirthday = ? WHERE Sno = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, sname); ps.setString(2, ssex); ps.setInt(3, sage); ps.setString(4, sdept); ps.setString(5, sbirthday); ps.setString(6, sno); ps.executeUpdate(); } } public List<Student> getAllStudents() throws SQLException { String sql = "SELECT * FROM s"; List<Student> students = new ArrayList<>(); try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) { while (rs.next()) { Student student = new Student(); student.setSno(rs.getString("Sno")); student.setSname(rs.getString("Sname")); student.setSsex(rs.getString("Ssex")); student.setSage(rs.getInt("Sage")); student.setSdept(rs.getString("sdept")); student.setSbirthday(rs.getDate("Sbirthday")); students.add(student); } } return students; } } package com.example.crud.model; public class Course { private String cno; private String cname; private String cpno; private int ccredit; // Constructors public Course() {} public Course(String cno, String cname, String cpno, int ccredit) { this.cno = cno; this.cname = cname; this.cpno = cpno; this.ccredit = ccredit; } // Getters and Setters public String getCno() { return cno; } public void setCno(String cno) { this.cno = cno; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public String getCpno() { return cpno; } public void setCpno(String cpno) { this.cpno = cpno; } public int getCcredit() { return ccredit; } public void setCcredit(int ccredit) { this.ccredit = ccredit; } } package com.example.crud.model; public class Enrollment { private String sno; private String cno; private int grade; // Constructors public Enrollment() {} public Enrollment(String sno, String cno, int grade) { this.sno = sno; this.cno = cno; this.grade = grade; } // Getters and Setters public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getCno() { return cno; } public void setCno(String cno) { this.cno = cno; } public int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; } } package com.example.crud.model; import java.util.Date; public class Student { private String sno; private String sname; private String ssex; private int sage; private String sdept; private Date sbirthday; // Constructors public Student() {} public Student(String sno, String sname, String ssex, int sage, String sdept, Date sbirthday) { this.sno = sno; this.sname = sname; this.ssex = ssex; this.sage = sage; this.sdept = sdept; this.sbirthday = sbirthday; } // Getters and Setters public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSsex() { return ssex; } public void setSsex(String ssex) { this.ssex = ssex; } public int getSage() { return sage; } public void setSage(int sage) { this.sage = sage; } public String getSdept() { return sdept; } public void setSdept(String sdept) { this.sdept = sdept; } public Date getSbirthday() { return sbirthday; } public void setSbirthday(Date sbirthday) { this.sbirthday = sbirthday; } } package com.example.crud.servlet; import com.example.crud.dao.CourseDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/AddCourseServlet") public class AddCourseServlet extends HttpServlet { private CourseDao courseDao = new CourseDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cno = request.getParameter("cno"); String cname = request.getParameter("cname"); String cpno = request.getParameter("cpno"); String ccredit = request.getParameter("ccredit"); try { courseDao.addCourse(cno, cname, cpno, Integer.parseInt(ccredit)); response.sendRedirect("courses.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.CourseDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/AddCourseServlet") public class AddCourseServlet extends HttpServlet { private CourseDao courseDao = new CourseDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cno = request.getParameter("cno"); String cname = request.getParameter("cname"); String cpno = request.getParameter("cpno"); String ccredit = request.getParameter("ccredit"); try { courseDao.addCourse(cno, cname, cpno, Integer.parseInt(ccredit)); response.sendRedirect("courses.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.StudentDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/AddStudentServlet") public class AddStudentServlet extends HttpServlet { private StudentDao studentDao = new StudentDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); String sname = request.getParameter("sname"); String ssex = request.getParameter("ssex"); String sage = request.getParameter("sage"); String sdept = request.getParameter("sdept"); String sbirthday = request.getParameter("sbirthday"); try { studentDao.addStudent(sno, sname, ssex, Integer.parseInt(sage), sdept, sbirthday); response.sendRedirect("students.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.CourseDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/DeleteCourseServlet") public class DeleteCourseServlet extends HttpServlet { private CourseDao courseDao = new CourseDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cno = request.getParameter("cno"); try { courseDao.deleteCourse(cno); response.sendRedirect("courses.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.EnrollmentDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/DeleteEnrollmentServlet") public class DeleteEnrollmentServlet extends HttpServlet { private EnrollmentDao enrollmentDao = new EnrollmentDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); String cno = request.getParameter("cno"); try { enrollmentDao.deleteEnrollment(sno, cno); response.sendRedirect("enrollments.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.StudentDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/DeleteStudentServlet") public class DeleteStudentServlet extends HttpServlet { private StudentDao studentDao = new StudentDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); try { studentDao.deleteStudent(sno); response.sendRedirect("students.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.CourseDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/UpdateCourseServlet") public class UpdateCourseServlet extends HttpServlet { private CourseDao courseDao = new CourseDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cno = request.getParameter("cno"); String cname = request.getParameter("cname"); String cpno = request.getParameter("cpno"); String ccredit = request.getParameter("ccredit"); try { courseDao.updateCourse(cno, cname, cpno, Integer.parseInt(ccredit)); response.sendRedirect("courses.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.EnrollmentDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/UpdateEnrollmentServlet") public class UpdateEnrollmentServlet extends HttpServlet { private EnrollmentDao enrollmentDao = new EnrollmentDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); String cno = request.getParameter("cno"); String grade = request.getParameter("grade"); try { enrollmentDao.updateEnrollment(sno, cno, Integer.parseInt(grade)); response.sendRedirect("enrollments.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } package com.example.crud.servlet; import com.example.crud.dao.StudentDao; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/UpdateStudentServlet") public class UpdateStudentServlet extends HttpServlet { private StudentDao studentDao = new StudentDao(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); String sname = request.getParameter("sname"); String ssex = request.getParameter("ssex"); String sage = request.getParameter("sage"); String sdept = request.getParameter("sdept"); String sbirthday = request.getParameter("sbirthday"); try { studentDao.updateStudent(sno, sname, ssex, Integer.parseInt(sage), sdept, sbirthday); response.sendRedirect("students.jsp"); } catch (SQLException e) { e.printStackTrace(); response.sendRedirect("error.jsp"); } } } <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd " version="4.0"> <servlet> <servlet-name>AddStudentServlet</servlet-name> <servlet-class>com.example.crud.servlet.AddStudentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddStudentServlet</servlet-name> <url-pattern>/AddStudentServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>DeleteStudentServlet</servlet-name> <servlet-class>com.example.crud.servlet.DeleteStudentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DeleteStudentServlet</servlet-name> <url-pattern>/DeleteStudentServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>UpdateStudentServlet</servlet-name> <servlet-class>com.example.crud.servlet.UpdateStudentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UpdateStudentServlet</servlet-name> <url-pattern>/UpdateStudentServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>AddCourseServlet</servlet-name> <servlet-class>com.example.crud.servlet.AddCourseServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddCourseServlet</servlet-name> <url-pattern>/AddCourseServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>DeleteCourseServlet</servlet-name> <servlet-class>com.example.crud.servlet.DeleteCourseServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DeleteCourseServlet</servlet-name> <url-pattern>/DeleteCourseServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>UpdateCourseServlet</servlet-name> <servlet-class>com.example.crud.servlet.UpdateCourseServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UpdateCourseServlet</servlet-name> <url-pattern>/UpdateCourseServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>AddEnrollmentServlet</servlet-name> <servlet-class>com.example.crud.servlet.AddEnrollmentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddEnrollmentServlet</servlet-name> <url-pattern>/AddEnrollmentServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>DeleteEnrollmentServlet</servlet-name> <servlet-class>com.example.crud.servlet.DeleteEnrollmentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DeleteEnrollmentServlet</servlet-name> <url-pattern>/DeleteEnrollmentServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>UpdateEnrollmentServlet</servlet-name> <servlet-class>com.example.crud.servlet.UpdateEnrollmentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UpdateEnrollmentServlet</servlet-name> <url-pattern>/UpdateEnrollmentServlet</url-pattern> </servlet-mapping> </web-app> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <%@ page import="com.example.crud.dao.CourseDao" %> <%@ page import="com.example.crud.model.Course" %> <!DOCTYPE html> <html> <head> <title>Course List</title> </head> <body> <h2>Course List</h2> <!-- Add Course Form --> <h3>Add Course</h3> <form action="AddCourseServlet" method="post"> <label for="cno">Cno:</label> <input type="text" id="cno" name="cno" required><br><br> <label for="cname">Cname:</label> <input type="text" id="cname" name="cname" required><br><br> <label for="cpno">Cpno:</label> <input type="text" id="cpno" name="cpno"><br><br> <label for="ccredit">Ccredit:</label> <input type="number" id="ccredit" name="ccredit" required><br><br> <input type="submit" value="Submit"> </form> <!-- Course List Table --> <h3>Course List</h3> <table border="1"> <tr> <th>Cno</th> <th>Cname</th> <th>Cpno</th> <th>Ccredit</th> <th>Action</th> </tr> <% CourseDao courseDao = new CourseDao(); List<Course> courses = null; try { courses = courseDao.getAllCourses(); } catch (Exception e) { e.printStackTrace(); } if (courses != null) { for (Course course : courses) { %> <tr> <td><%= course.getCno() %></td> <td><%= course.getCname() %></td> <td><%= course.getCpno() %></td> <td><%= course.getCcredit() %></td> <td> <form action="DeleteCourseServlet" method="post"> <input type="hidden" name="cno" value="<%= course.getCno() %>"> <input type="submit" value="Delete"> </form> <form action="UpdateCourseServlet" method="post"> <input type="hidden" name="cno" value="<%= course.getCno() %>"> <input type="hidden" name="cname" value="<%= course.getCname() %>"> <input type="hidden" name="cpno" value="<%= course.getCpno() %>"> <input type="hidden" name="ccredit" value="<%= course.getCcredit() %>"> <input type="submit" value="Update"> </form> </td> </tr> <% } } %> </table> </body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <%@ page import="com.example.crud.dao.EnrollmentDao" %> <%@ page import="com.example.crud.model.Enrollment" %> <!DOCTYPE html> <html> <head> <title>Enrollment List</title> </head> <body> <h2>Enrollment List</h2> <!-- Add Enrollment Form --> <h3>Add Enrollment</h3> <form action="AddEnrollmentServlet" method="post"> <label for="sno">Sno:</label> <input type="text" id="sno" name="sno" required><br><br> <label for="cno">Cno:</label> <input type="text" id="cno" name="cno" required><br><br> <label for="grade">Grade:</label> <input type="number" id="grade" name="grade" required><br><br> <input type="submit" value="Submit"> </form> <!-- Enrollment List Table --> <h3>Enrollment List</h3> <table border="1"> <tr> <th>Sno</th> <th>Cno</th> <th>Grade</th> <th>Action</th> </tr> <% EnrollmentDao enrollmentDao = new EnrollmentDao(); List<Enrollment> enrollments = null; try { enrollments = enrollmentDao.getAllEnrollments(); } catch (Exception e) { e.printStackTrace(); } if (enrollments != null) { for (Enrollment enrollment : enrollments) { %> <tr> <td><%= enrollment.getSno() %></td> <td><%= enrollment.getCno() %></td> <td><%= enrollment.getGrade() %></td> <td> <form action="DeleteEnrollmentServlet" method="post"> <input type="hidden" name="sno" value="<%= enrollment.getSno() %>"> <input type="hidden" name="cno" value="<%= enrollment.getCno() %>"> <input type="submit" value="Delete"> </form> <form action="UpdateEnrollmentServlet" method="post"> <input type="hidden" name="sno" value="<%= enrollment.getSno() %>"> <input type="hidden" name="cno" value="<%= enrollment.getCno() %>"> <input type="hidden" name="grade" value="<%= enrollment.getGrade() %>"> <input type="submit" value="Update"> </form> </td> </tr> <% } } %> </table> </body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <%@ page import="com.example.crud.dao.StudentDao" %> <%@ page import="com.example.crud.model.Student" %> <!DOCTYPE html> <html> <head> <title>Student List</title> </head> <body> <h2>Student List</h2> <!-- Add Student Form --> <h3>Add Student</h3> <form action="AddStudentServlet" method="post"> <label for="sno">Sno:</label> <input type="text" id="sno" name="sno" required><br><br> <label for="sname">Sname:</label> <input type="text" id="sname" name="sname" required><br><br> <label for="ssex">Ssex:</label> <input type="text" id="ssex" name="ssex" required><br><br> <label for="sage">Sage:</label> <input type="number" id="sage" name="sage" required><br><br> <label for="sdept">Sdept:</label> <input type="text" id="sdept" name="sdept" required><br><br> <label for="sbirthday">Sbirthday:</label> <input type="date" id="sbirthday" name="sbirthday" required><br><br> <input type="submit" value="Submit"> </form> <!-- Student List Table --> <h3>Student List</h3> <table border="1"> <tr> <th>Sno</th> <th>Sname</th> <th>Ssex</th> <th>Sage</th> <th>Sdept</th> <th>Sbirthday</th> <th>Action</th> </tr> <% StudentDao studentDao = new StudentDao(); List<Student> students = null; try { students = studentDao.getAllStudents(); // 调用 getAllStudents 方法 } catch (Exception e) { e.printStackTrace(); } if (students != null) { for (Student student : students) { %> <tr> <td><%= student.getSno() %></td> <td><%= student.getSname() %></td> <td><%= student.getSsex() %></td> <td><%= student.getSage() %></td> <td><%= student.getSdept() %></td> <td><%= student.getSbirthday() %></td> <td> <form action="DeleteStudentServlet" method="post"> <input type="hidden" name="sno" value="<%= student.getSno() %>"> <input type="submit" value="Delete"> </form> <form action="UpdateStudentServlet" method="post"> <input type="hidden" name="sno" value="<%= student.getSno() %>"> <input type="hidden" name="sname" value="<%= student.getSname() %>"> <input type="hidden" name="ssex" value="<%= student.getSsex() %>"> <input type="hidden" name="sage" value="<%= student.getSage() %>"> <input type="hidden" name="sdept" value="<%= student.getSdept() %>"> <input type="hidden" name="sbirthday" value="<%= student.getSbirthday() %>"> <input type="submit" value="Update"> </form> </td> </tr> <% } } %> </table> </body> </html> 我的所有代码为以上内容,数据库中的表为图中三张,想要实现在网页上对这三个表的增删改查,为什么我的http://localhost:8080/网页显示HTTP状态 404 - 未找到 类型 状态报告 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
05-24
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值