diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/artifacts/homework02_war_exploded.xml b/.idea/artifacts/homework02_war_exploded.xml new file mode 100644 index 0000000..721db81 --- /dev/null +++ b/.idea/artifacts/homework02_war_exploded.xml @@ -0,0 +1,16 @@ + + + $PROJECT_DIR$/out/artifacts/homework02_war_exploded + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/learn1_war_exploded.xml b/.idea/artifacts/learn1_war_exploded.xml new file mode 100644 index 0000000..d2206fd --- /dev/null +++ b/.idea/artifacts/learn1_war_exploded.xml @@ -0,0 +1,20 @@ + + + $PROJECT_DIR$/out/artifacts/learn1_war_exploded + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/test02_war_exploded.xml b/.idea/artifacts/test02_war_exploded.xml new file mode 100644 index 0000000..75c9762 --- /dev/null +++ b/.idea/artifacts/test02_war_exploded.xml @@ -0,0 +1,13 @@ + + + $PROJECT_DIR$/out/artifacts/test02_war_exploded + + + + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/test03_war_exploded.xml b/.idea/artifacts/test03_war_exploded.xml new file mode 100644 index 0000000..b3de3e5 --- /dev/null +++ b/.idea/artifacts/test03_war_exploded.xml @@ -0,0 +1,17 @@ + + + $PROJECT_DIR$/out/artifacts/test03_war_exploded + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/artifacts/test04_war_exploded.xml b/.idea/artifacts/test04_war_exploded.xml new file mode 100644 index 0000000..afa5039 --- /dev/null +++ b/.idea/artifacts/test04_war_exploded.xml @@ -0,0 +1,20 @@ + + + $PROJECT_DIR$/out/artifacts/test04_war_exploded + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a1757ae --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..a9f791d --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,28 @@ + + + + + mysql.8 + true + 317 + com.mysql.cj.jdbc.Driver + jdbc:mysql://10.19.38.253:3306 + + + + + + $ProjectFileDir$ + + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:$PROJECT_DIR$/../../database/学习/java测试数据库/db_student.db + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..2a8ecfd --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..04ca9a9 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/.idea/libraries/commons_dbcp2_2_9_0.xml b/.idea/libraries/commons_dbcp2_2_9_0.xml new file mode 100644 index 0000000..0e825e6 --- /dev/null +++ b/.idea/libraries/commons_dbcp2_2_9_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/commons_logging_1_3_4.xml b/.idea/libraries/commons_logging_1_3_4.xml new file mode 100644 index 0000000..f1d4744 --- /dev/null +++ b/.idea/libraries/commons_logging_1_3_4.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/commons_pool2_2_9_0.xml b/.idea/libraries/commons_pool2_2_9_0.xml new file mode 100644 index 0000000..7cee843 --- /dev/null +++ b/.idea/libraries/commons_pool2_2_9_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/lombok.xml b/.idea/libraries/lombok.xml new file mode 100644 index 0000000..e9dc78c --- /dev/null +++ b/.idea/libraries/lombok.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/mysql_connector.xml b/.idea/libraries/mysql_connector.xml new file mode 100644 index 0000000..9c051a4 --- /dev/null +++ b/.idea/libraries/mysql_connector.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/sqlite_jdbc_3_47_0_0.xml b/.idea/libraries/sqlite_jdbc_3_47_0_0.xml new file mode 100644 index 0000000..8100a9c --- /dev/null +++ b/.idea/libraries/sqlite_jdbc_3_47_0_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8780e86 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..dbb6ff9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..d31625c --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/webContexts.xml b/.idea/webContexts.xml new file mode 100644 index 0000000..1c4773d --- /dev/null +++ b/.idea/webContexts.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/.idea/web实验.iml b/.idea/web实验.iml new file mode 100644 index 0000000..d553ef3 --- /dev/null +++ b/.idea/web实验.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/homework02/homework02.iml b/homework02/homework02.iml new file mode 100644 index 0000000..5a1763a --- /dev/null +++ b/homework02/homework02.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/homework02/src/login/User.java b/homework02/src/login/User.java new file mode 100644 index 0000000..ec8bc26 --- /dev/null +++ b/homework02/src/login/User.java @@ -0,0 +1,39 @@ +package login; + +public class User { + private int id; + private String name; + private String password; + + public User(int id, String name, String password) { + this.id = id; + this.name = name; + this.password = password; + } + + @Override + public String toString() { + return "id:" + id + + ", name=" + name + + ", password=" + password; + } + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } +} diff --git a/homework02/src/login/UserDB.java b/homework02/src/login/UserDB.java new file mode 100644 index 0000000..14af9f4 --- /dev/null +++ b/homework02/src/login/UserDB.java @@ -0,0 +1,36 @@ +package login; + +import java.sql.*; +import java.util.*; + +public class UserDB { + private final static String DB_URL = "jdbc:mysql://10.19.38.253:3306/db_student"; + private final static String DB_USER = "admin"; + private final static String DB_PASSWORD = "1227496003131313xY"; + + public List getAllUsers() throws ClassNotFoundException { + Class.forName("com.mysql.cj.jdbc.Driver"); + List userList = new ArrayList<>(); + try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery("SELECT N_USER_ID, VC_LOGIN_NAME, VC_PASSWORD FROM t_user WHERE VC_LOGIN_NAME != 'admin';")) { + while (resultSet.next()) { + int id = resultSet.getInt("N_USER_ID"); + String name = resultSet.getString("VC_LOGIN_NAME"); + String password = resultSet.getString("VC_PASSWORD"); + User user = new User(id, name, password); + userList.add(user); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return userList; + } + + public void ShowCommonUsers() throws ClassNotFoundException { + List userList = getAllUsers(); + for (User user : userList) { + System.out.println(user); + } + } +} diff --git a/homework02/web/WEB-INF/web.xml b/homework02/web/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/homework02/web/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/homework02/web/index.jsp b/homework02/web/index.jsp new file mode 100644 index 0000000..b9d6191 --- /dev/null +++ b/homework02/web/index.jsp @@ -0,0 +1,18 @@ +<%@ page import="login.UserDB" %><%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/17 + Time: 下午9:26 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + JDBC应用 + + + <% UserDB dbBean = new UserDB(); + dbBean.ShowCommonUsers(); + %> + + diff --git a/learn1/learn1.iml b/learn1/learn1.iml new file mode 100644 index 0000000..3f1746d --- /dev/null +++ b/learn1/learn1.iml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/learn1/src/common/DBTool.java b/learn1/src/common/DBTool.java new file mode 100644 index 0000000..e0b58e1 --- /dev/null +++ b/learn1/src/common/DBTool.java @@ -0,0 +1,78 @@ +package common; + +import org.apache.commons.dbcp2.BasicDataSourceFactory; + +import javax.sql.DataSource; +import java.io.*; +import java.sql.*; +import java.util.Properties; + + +/** + * һݿ⹤࣬һݿӳ + * Ҫdatabase.propertiesݿ + * @author Awin-x + */ +public class DBTool { + static DataSource ds; + static{ + Properties prop = new Properties(); + try { + InputStream database_info = DBTool.class.getClassLoader().getResourceAsStream("database.properties"); + if (database_info != null) { + prop.load(new InputStreamReader(database_info, "GBK")); + prop.list(System.out); + }else{ + throw new FileNotFoundException("database.properties file does not exist in the classpath"); + } + } catch (IOException e) { + System.out.println("ݿüʧܣ"); + throw new RuntimeException(e); + } + try { + ds = BasicDataSourceFactory.createDataSource(prop); + } catch (Exception e) { + System.out.println("ݿӳسʼʧ"); + throw new RuntimeException(e); + } + } + + public static Connection getConnection(){ + try{ + return ds.getConnection(); + } catch (SQLException e) { + e.printStackTrace(); + return null; + } + } + + public static PreparedStatement getPreparedStatement(String sql) throws SQLException{ + //noinspection SqlSourceToSinkFlow + return ds.getConnection().prepareStatement(sql); + } + + public static void close(Connection conn, PreparedStatement ps, ResultSet rs){ + try{ + if(rs != null){ + rs.close(); + } + if(ps != null){ + ps.close(); + } + if(conn != null){ + conn.close(); + } + } catch (SQLException e) { + System.out.println("رʧ"); + e.printStackTrace(); + } + } + + public static void close(PreparedStatement ps, ResultSet rs){ + close(null, ps, rs); + } + + public static void close(PreparedStatement ps){ + close(null, ps, null); + } +} diff --git a/learn1/src/course/CourseAddAction.java b/learn1/src/course/CourseAddAction.java new file mode 100644 index 0000000..61e995f --- /dev/null +++ b/learn1/src/course/CourseAddAction.java @@ -0,0 +1,35 @@ +package course; + +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import login.UserInfo; + +import java.io.IOException; + +@WebServlet("/CourseAddAction") +public class CourseAddAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException { + String path = req.getContextPath(); + if (req.getSession().getAttribute("user") == null){ + resp.sendRedirect(path+"/login/login.jsp"); + return; + } + CourseInfo course = new CourseInfo(); + String name = req.getParameter("name"); + int type = Integer.parseInt(req.getParameter("type")); + float credit = Float.parseFloat(req.getParameter("credit")); + int grade = Integer.parseInt(req.getParameter("grade")); + int major = Integer.parseInt(req.getParameter("major")); + String detail = req.getParameter("detail"); + course.setName(name); + course.setType(type); + course.setCredit(credit); + course.setGrade(grade); + course.setMajor(major); + course.setDetail(detail); + CourseDB.insertCourse(course); + resp.sendRedirect(path+"/course/course.jsp"); + } +} diff --git a/learn1/src/course/CourseDB.java b/learn1/src/course/CourseDB.java new file mode 100644 index 0000000..766783e --- /dev/null +++ b/learn1/src/course/CourseDB.java @@ -0,0 +1,108 @@ +package course; + +import common.DBTool; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + +/** + * ǿγ̱t_courseDAO࣬ṩɾIJг + * @author Awin-x + */ +public class CourseDB { + public static ArrayList getAllCourses(){ + ArrayList courseList = new ArrayList<>(); + try{ + PreparedStatement ps = DBTool.getPreparedStatement("select * from t_course"); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + int id = rs.getInt("N_COURSE_ID"); + String name = rs.getString("VC_COURSE_NAME"); + int type = rs.getInt("N_TYPE"); + float credits = rs.getFloat("F_CREDIT"); + int grade = rs.getInt("N_GRADE"); + int major = rs.getInt("N_MAJOR"); + String detail = rs.getString("VC_DETAIL"); + courseList.add(new CourseInfo(id, name, type, credits, grade, major, detail)); + } + DBTool.close(ps, rs); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return courseList; + } + + public static CourseInfo getCourseInfo(int id){ + CourseInfo courseInfo = null; + try{ + PreparedStatement ps = DBTool.getPreparedStatement("select * from t_course WHERE N_COURSE_ID = ?"); + ps.setInt(1, id); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + String name = rs.getString("VC_COURSE_NAME"); + int type = rs.getInt("N_TYPE"); + float credits = rs.getFloat("F_CREDIT"); + int grade = rs.getInt("N_GRADE"); + int major = rs.getInt("N_MAJOR"); + String detail = rs.getString("VC_DETAIL"); + courseInfo = new CourseInfo(id, name, type, credits, grade, major, detail); + } + DBTool.close(ps, rs); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return courseInfo; + } + + public static int editCourse(CourseInfo course){ + int flag; + try{ + PreparedStatement ps = DBTool.getPreparedStatement("UPDATE t_course SET VC_COURSE_NAME = ?,"+ + " N_TYPE = ?, F_CREDIT = ?, N_GRADE = ?, N_MAJOR = ?, VC_DETAIL = ? WHERE N_COURSE_ID = ?"); + ps.setString(1, course.getName()); + ps.setInt(2, course.getType()); + ps.setFloat(3, course.getCredit()); + ps.setInt(4, course.getGrade()); + ps.setInt(5, course.getMajor()); + ps.setString(6, course.getDetail()); + ps.setInt(7, course.getId()); + flag = ps.executeUpdate(); + DBTool.close(ps); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return flag; + } + + public static void insertCourse(CourseInfo course){ + try{ + String sql = "INSERT INTO t_course (VC_COURSE_NAME, N_TYPE, F_CREDIT, N_GRADE, N_MAJOR, VC_DETAIL) VALUES(?, ?, ?, ?, ?, ?)"; + PreparedStatement ps = DBTool.getPreparedStatement(sql); + ps.setString(1, course.getName()); + ps.setInt(2, course.getType()); + ps.setFloat(3, course.getCredit()); + ps.setInt(4, course.getGrade()); + ps.setInt(5, course.getMajor()); + ps.setString(6, course.getDetail()); + ps.executeUpdate(); + DBTool.close(ps); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static void deleteCourse(int id){ + try{ + String sql = "DELETE FROM t_course WHERE N_COURSE_ID = ?"; + PreparedStatement ps = DBTool.getPreparedStatement(sql); + ps.setInt(1, id); + ps.executeUpdate(); + DBTool.close(ps); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/learn1/src/course/CourseDeleteAction.java b/learn1/src/course/CourseDeleteAction.java new file mode 100644 index 0000000..b363e17 --- /dev/null +++ b/learn1/src/course/CourseDeleteAction.java @@ -0,0 +1,23 @@ +package course; + +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; + +@WebServlet("/CourseDeleteAction") +public class CourseDeleteAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String path = req.getContextPath(); + if (req.getSession().getAttribute("user") == null){ + resp.sendRedirect(path+"/login/login.jsp"); + return; + } + int id = Integer.parseInt(req.getParameter("id")); + CourseDB.deleteCourse(id); + resp.sendRedirect(path+"/course/course.jsp"); + } +} diff --git a/learn1/src/course/CourseEditAction.java b/learn1/src/course/CourseEditAction.java new file mode 100644 index 0000000..c8d2090 --- /dev/null +++ b/learn1/src/course/CourseEditAction.java @@ -0,0 +1,40 @@ +package course; + +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; + +@WebServlet("/CourseEditAction") +public class CourseEditAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String path = req.getContextPath(); + if (req.getSession().getAttribute("user") == null){ + resp.setStatus(403); + return; + } + int id = Integer.parseInt(req.getParameter("id")); + CourseInfo course = CourseDB.getCourseInfo(id); + String name = req.getParameter("name"); + int type = Integer.parseInt(req.getParameter("type")); + float credit = Float.parseFloat(req.getParameter("credit")); + int grade = Integer.parseInt(req.getParameter("grade")); + int major = Integer.parseInt(req.getParameter("major")); + String detail = req.getParameter("detail"); + course.setName(name); + course.setType(type); + course.setCredit(credit); + course.setGrade(grade); + course.setMajor(major); + course.setDetail(detail); + + if (CourseDB.editCourse(course)>=1){ + resp.sendRedirect(path+"/course/course.jsp"); + }else { + resp.sendRedirect(req.getContextPath()+"/course/course.jsp?flag='update-failed'"); + } + } +} diff --git a/learn1/src/course/CourseInfo.java b/learn1/src/course/CourseInfo.java new file mode 100644 index 0000000..202bba5 --- /dev/null +++ b/learn1/src/course/CourseInfo.java @@ -0,0 +1,31 @@ +package course; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@ToString +@NoArgsConstructor +public class CourseInfo { + private int id; + private String name; + private int type; + private float credit; + private int grade; + private int major; + private String detail; + + public String toJSON(){ + String json="{"; + json += "\"id\":"+id+","; + json += "\"name\":\""+name+"\","; + json += "\"type\":"+type+","; + json += "\"credit\":"+credit+","; + json += "\"grade\":"+grade+","; + json += "\"major\":"+major+","; + json += "\"detail\":\""+detail+"\""; + json += "}"; + return json; + } +} diff --git a/learn1/src/course/CourseListAction.java b/learn1/src/course/CourseListAction.java new file mode 100644 index 0000000..9ed955b --- /dev/null +++ b/learn1/src/course/CourseListAction.java @@ -0,0 +1,31 @@ +package course; + +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.io.PrintWriter; +import java.util.ArrayList; + +@WebServlet("/CourseListAction") +public class CourseListAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String path = req.getContextPath(); + if (req.getSession().getAttribute("user") == null){ + resp.setStatus(403); + return; + } + ArrayList course_list = CourseDB.getAllCourses(); + StringBuilder json= new StringBuilder("["); + for (CourseInfo course : course_list) { + json.append(course.toJSON()).append(","); + } + resp.setContentType("application/json;charset=UTF-8"); + PrintWriter out = resp.getWriter(); + out.print(json.substring(0, json.length()-1)); + out.print("]"); + } +} diff --git a/learn1/src/database.properties b/learn1/src/database.properties new file mode 100644 index 0000000..8dcbcdd --- /dev/null +++ b/learn1/src/database.properties @@ -0,0 +1,41 @@ +#-------------------------------------------------------------------------------------------------- +#DriverClassName=com.mysql.cj.jdbc.Driver +#url=jdbc:mysql://10.19.38.253:3306/chat?useUnicode=true&characterEncoding=utf-8&useSSL=true +#username=admin +#password=1227496003131313xY +#-------------------------------------------------------------------------------------------------- +driverClassName=org.sqlite.JDBC +url=jdbc:sqlite:F:\\Work_Area\\desk\\database\\ѧϰ\\javaݿ\\db_student.db +#-------------------------------------------------------------------------------------------------- + +defaultAutoCommit=true + +defaultReadOnly=false + +initialSize=10 + +maxActive=20 + +maxIdle=20 + +minIdle=5 + +maxWait=10000 + +testOnBorrow=true + +testOnReturn=false + +validationQuery=select 1 + +validationQueryTimeout=1 + +testWhileIdle=false + +timeBetweenEvictionRunsMillis=1 + +numTestsPerEvictionRun=3 + +poolPreparedStatements=true + +maxOpenPreparedStatements=3 \ No newline at end of file diff --git a/learn1/src/login/UserDB.java b/learn1/src/login/UserDB.java new file mode 100644 index 0000000..4bc8705 --- /dev/null +++ b/learn1/src/login/UserDB.java @@ -0,0 +1,52 @@ +package login; + +import common.DBTool; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class UserDB { + public static UserInfo GetUserInfo(int id) { + UserInfo u = new UserInfo(); + ResultSet rs = null; + try{ + String sql = "select * from t_user where N_USER_ID = ?"; + PreparedStatement ps = DBTool.getPreparedStatement(sql); + ps.setInt(1, id); + rs = ps.executeQuery(); + if(rs.next()) { + u.setId(rs.getInt("N_USER_ID")); + u.setName(rs.getString("VC_LOGIN_NAME")); + u.setPass(rs.getString("VC_PASSWORD")); + }else{ + u = null; + } + DBTool.close(ps, rs); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return u; + } + public static UserInfo GetUserInfoByName(String username) { + UserInfo u = new UserInfo(); + ResultSet rs = null; + try{ + String sql = "select * from t_user where VC_LOGIN_NAME = ?"; + PreparedStatement ps = DBTool.getPreparedStatement(sql); + ps.setString(1, username); + rs = ps.executeQuery(); + if(rs.next()) { + u.setId(rs.getInt("N_USER_ID")); + u.setName(rs.getString("VC_LOGIN_NAME")); + u.setPass(rs.getString("VC_PASSWORD")); + }else{ + u = null; + } + DBTool.close(ps, rs); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return u; + } +} diff --git a/learn1/src/login/UserInfo.java b/learn1/src/login/UserInfo.java new file mode 100644 index 0000000..a64e8d0 --- /dev/null +++ b/learn1/src/login/UserInfo.java @@ -0,0 +1,16 @@ +package login; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@ToString +public class UserInfo { + private int id; + private String name; + private String pass; +} \ No newline at end of file diff --git a/learn1/src/login/UserLoginAction.java b/learn1/src/login/UserLoginAction.java new file mode 100644 index 0000000..562555b --- /dev/null +++ b/learn1/src/login/UserLoginAction.java @@ -0,0 +1,36 @@ +package login; + + +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; + +@WebServlet("/UserLoginAction") +public class UserLoginAction extends HttpServlet { + protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { + String path = req.getContextPath(); + if (req.getSession().getAttribute("user") != null){ + response.sendRedirect(path+"/home.jsp"); + } + String username = req.getParameter("username"); + String password = req.getParameter("password"); + int flag; + UserInfo user = UserDB.GetUserInfoByName(username); + if(user == null) { + flag = 1; + }else if (user.getPass().equals(password)) { + flag=0; + req.getSession().setAttribute("user", user); + }else{ + flag=2; + } + System.out.println(user); + } + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.sendRedirect("error.jsp"); + } +} diff --git a/learn1/src/login/UserLogoutAction.java b/learn1/src/login/UserLogoutAction.java new file mode 100644 index 0000000..8d73e36 --- /dev/null +++ b/learn1/src/login/UserLogoutAction.java @@ -0,0 +1,22 @@ +package login; + +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; + +@WebServlet("/UserLogoutAction") +public class UserLogoutAction extends HttpServlet { + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String username = request.getParameter("username"); + UserInfo user = (UserInfo)request.getSession().getAttribute("user"); + if(user != null) { + request.getSession().removeAttribute("user"); + } + String path = request.getContextPath(); + response.sendRedirect(path+"/login/login.jsp"); + } +} diff --git a/learn1/src/test/DBTest.java b/learn1/src/test/DBTest.java new file mode 100644 index 0000000..b77b309 --- /dev/null +++ b/learn1/src/test/DBTest.java @@ -0,0 +1,29 @@ +package test; + +import common.DBTool; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class DBTest { + public static void main(String[] args) { + String testSql = "select * from t_user"; + try { + Class.forName("common.DBTool"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + try { + PreparedStatement ps = DBTool.getPreparedStatement(testSql); + ResultSet rs = ps.executeQuery(); + while (rs.next()) { + System.out.println(rs.getString(1)); + System.out.println(rs.getString(2)); + System.out.println(rs.getString(3)); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + } +} diff --git a/learn1/web/WEB-INF/web.xml b/learn1/web/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/learn1/web/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/learn1/web/course/course.jsp b/learn1/web/course/course.jsp new file mode 100644 index 0000000..465510d --- /dev/null +++ b/learn1/web/course/course.jsp @@ -0,0 +1,28 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/21 + Time: 下午5:00 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" %> + + + + + 课程信息列表 + + + +
+ +
+
+
+ + + + + diff --git a/learn1/web/course/course_edit.jsp b/learn1/web/course/course_edit.jsp new file mode 100644 index 0000000..d064689 --- /dev/null +++ b/learn1/web/course/course_edit.jsp @@ -0,0 +1,87 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*代表必填
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + + + * +
+ + + 200个字符以内 +
+ + +
+
+
\ No newline at end of file diff --git a/learn1/web/course/tmp b/learn1/web/course/tmp new file mode 100644 index 0000000..9fc8bda --- /dev/null +++ b/learn1/web/course/tmp @@ -0,0 +1,82 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + +*5~20位字符 +
+ + +* +
+ + +*数值 +
+ + +*4位数年份 +
开设专业 + + + + + + + +* +
+ + +200个字符以内 +
+ +
+
\ No newline at end of file diff --git a/learn1/web/css/course.css b/learn1/web/css/course.css new file mode 100644 index 0000000..58dd320 --- /dev/null +++ b/learn1/web/css/course.css @@ -0,0 +1,62 @@ + +tr:nth-child(odd){ + background:#F4F4F4; +} + +.tr-head{ + background-color: #2bf; + text-align: center; +} + +table{ + width:100%; + border-spacing: 0; +} + +.td1 { + BACKGROUND-COLOR: #e6e6e6 +} +.td_header { + BACKGROUND-COLOR: #e6e6e6; COLOR: #000000 +} +.td_1 { + BACKGROUND-COLOR: #f8fbfb; COLOR: #000000 +} +.td_2 { + BACKGROUND-COLOR: #deecec; COLOR: #000000 +} +.td3 { + BACKGROUND-COLOR: #a3d1d2; COLOR: black +} +.underline { + BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4 +} +.button { + border:1px solid black; + background-color:white; + cursor:hand; +} +.star { + COLOR: red +} +.tb_showall +{ + background:#0078B7; + font-size: 18px; + font-weight: bold; +} +.container{ + margin: auto; + width: 80%; + text-align: center; + align-items: center; + position: relative; +} +.input-form{ + border: black solid 1px; + margin: auto; + td{ + border: black solid 1px; + } +} + diff --git a/learn1/web/css/index.css b/learn1/web/css/index.css new file mode 100644 index 0000000..c3fbe8d --- /dev/null +++ b/learn1/web/css/index.css @@ -0,0 +1,20 @@ +.nav-list{ + position: absolute; + top: 0; + left: 0; + background-color: #2bf; + height: 95%; + width: 20%; + margin: 0; + padding: 5px; +} +.content{ + position: absolute; + top: 0; + right: 0; + background-color: #eee; + height: 95%; + width: 80%; + margin: 0; + padding: 5px; +} \ No newline at end of file diff --git a/learn1/web/home.jsp b/learn1/web/home.jsp new file mode 100644 index 0000000..7cf6909 --- /dev/null +++ b/learn1/web/home.jsp @@ -0,0 +1,25 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/12/3 + Time: 上午12:17 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 主页 + + +
+

学生信息管理系统

+ <% + if(session.getAttribute("user")==null){ + out.println("登录"); + }else{ + out.println("注销"); + } + %> +
+ + diff --git a/learn1/web/index.jsp b/learn1/web/index.jsp new file mode 100644 index 0000000..1524bce --- /dev/null +++ b/learn1/web/index.jsp @@ -0,0 +1,24 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/28 + Time: 下午1:20 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 学生信息管理系统 + + + + + + + + diff --git a/learn1/web/js/course-edit.js b/learn1/web/js/course-edit.js new file mode 100644 index 0000000..05fd0b7 --- /dev/null +++ b/learn1/web/js/course-edit.js @@ -0,0 +1,122 @@ +const types = ['', '公共基础必修课', '公共选修课', '学科基础课', '专业必修课', '专业选修课', '集中性实践教学环节'] +const majors = ['', '软件工程', '空间信息', '大数据']; +let courses; +function getCourses(){ + $.ajax({ + url: path+"/CourseListAction", + method: "GET", + success: (data, status, xhr)=>{ + const course_list = document.getElementById('course-list'); + console.log(xhr.status); + course_list.innerHTML = "课程信息列表 名称 性质 学分 开设年级 开设专业 " + courses = data; + for (let i in data){ + const course_tr = document.createElement('tr'); + course_tr.innerHTML=""+ data[i].name +"" + + ""+types[data[i].type]+"" + + ""+ data[i].credit +"" + + ""+ data[i].grade + "" + + ""+ majors[data[i].major]+"" + + "编辑 删除"; + course_list.appendChild(course_tr); + } + const end_tr = document.createElement('tr'); + end_tr.innerHTML="添加" + + "刷新数据列表"; + course_list.appendChild(end_tr); + }, + error: ()=>{ + window.location=path+"/login/login.jsp"; + } + }); +} +$(document).ready(getCourses); + +function editCourse(i){ + $(".course-editor").load(path+"/course/course_edit.jsp", (response,status,xhr)=>{ + if (stauts === 403){ + window.location = path+"/login/login.jsp"; + } + const form = document.querySelector('.course-edit'); + form.action = path+"/CourseEditAction"; + form.method = "POST"; + const idInput = document.getElementById('id-input'); + idInput.value = courses[i].id; + const nameInput = document.getElementById('name-input'); + nameInput.value = courses[i].name; + const typeInput = document.getElementById('type-input'); + typeInput.value = courses[i].type; + const creditInput = document.getElementById('credit-input'); + creditInput.value = courses[i].credit; + const yearInput = document.getElementById('grade-input'); + yearInput.value = courses[i].grade; + const majorInputs = form.querySelectorAll('input[name="major"]'); + majorInputs.forEach((input) => { + if (parseInt(input.value) === courses[i].major) { + input.checked = true; + } + }); + + const noteInput = form.querySelector('#detail-input'); + noteInput.value = courses[i].detail; + + form.addEventListener('submit', function (e) { + e.preventDefault(); + const gradeInput = document.getElementById('grade-input'); + if (!/^20\d{2}$/.test(gradeInput.value)) { + alert('请输入合法的四位年份'); + return; + } + + const nameInput = document.getElementById('name-input'); + console.log(nameInput.value.length) + console.log(nameInput.value) + if (nameInput.value.length < 5 || nameInput.value.length > 20){ + alert('请输入5~20位字符'); + return; + } + const detailInput = document.getElementById('detail-input'); + if (detailInput.value.length > 200){ + alert('备注超长'); + return; + } + $(".course-edit").submit(); + }); + }); +} + +function addCourse(){ + $(".course-editor").load(path+"/course/course_edit.jsp", ()=>{ + const form = document.querySelector('.course-edit'); + form.action = path+"/CourseAddAction"; + form.addEventListener('submit', function (e) { + e.preventDefault(); + const gradeInput = document.getElementById('grade-input'); + if (!/^20\d{2}$/.test(gradeInput.value)) { + alert('请输入合法的四位年份'); + return; + } + + const nameInput = document.getElementById('name-input'); + console.log(nameInput.value.length) + console.log(nameInput.value) + if (nameInput.value.length < 5 || nameInput.value.length > 20){ + alert('请输入5~20位字符'); + return; + } + const detailInput = document.getElementById('detail-input'); + if (detailInput.value.length > 200){ + alert('备注超长'); + return; + } + $(".course-edit").submit(); + }); + }); +} + +function closeEdit(){ + const editor = document.querySelector('.course-editor'); + editor.innerHTML = ""; +} \ No newline at end of file diff --git a/learn1/web/js/index.js b/learn1/web/js/index.js new file mode 100644 index 0000000..e69de29 diff --git a/learn1/web/js/jquery-3.7.1.min.js b/learn1/web/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/learn1/web/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 登录 + + + + + + diff --git a/lib/commons-dbcp2-2.9.0.jar b/lib/commons-dbcp2-2.9.0.jar new file mode 100644 index 0000000..ddfd42c Binary files /dev/null and b/lib/commons-dbcp2-2.9.0.jar differ diff --git a/lib/commons-logging-1.3.4.jar b/lib/commons-logging-1.3.4.jar new file mode 100644 index 0000000..b6339bb Binary files /dev/null and b/lib/commons-logging-1.3.4.jar differ diff --git a/lib/commons-pool2-2.9.0.jar b/lib/commons-pool2-2.9.0.jar new file mode 100644 index 0000000..a038b36 Binary files /dev/null and b/lib/commons-pool2-2.9.0.jar differ diff --git a/lib/lombok.jar b/lib/lombok.jar new file mode 100644 index 0000000..ea0ba78 Binary files /dev/null and b/lib/lombok.jar differ diff --git a/lib/mysql-connector.jar b/lib/mysql-connector.jar new file mode 100644 index 0000000..b764ad6 Binary files /dev/null and b/lib/mysql-connector.jar differ diff --git a/lib/sqlite-jdbc-3.47.0.0.jar b/lib/sqlite-jdbc-3.47.0.0.jar new file mode 100644 index 0000000..ab27f70 Binary files /dev/null and b/lib/sqlite-jdbc-3.47.0.0.jar differ diff --git a/out/artifacts/homework02_war_exploded/WEB-INF/classes/login/User.class b/out/artifacts/homework02_war_exploded/WEB-INF/classes/login/User.class new file mode 100644 index 0000000..094f094 Binary files /dev/null and b/out/artifacts/homework02_war_exploded/WEB-INF/classes/login/User.class differ diff --git a/out/artifacts/homework02_war_exploded/WEB-INF/classes/login/UserDB.class b/out/artifacts/homework02_war_exploded/WEB-INF/classes/login/UserDB.class new file mode 100644 index 0000000..5cf0ae5 Binary files /dev/null and b/out/artifacts/homework02_war_exploded/WEB-INF/classes/login/UserDB.class differ diff --git a/out/artifacts/homework02_war_exploded/WEB-INF/lib/mysql-connector.jar b/out/artifacts/homework02_war_exploded/WEB-INF/lib/mysql-connector.jar new file mode 100644 index 0000000..b764ad6 Binary files /dev/null and b/out/artifacts/homework02_war_exploded/WEB-INF/lib/mysql-connector.jar differ diff --git a/out/artifacts/homework02_war_exploded/WEB-INF/web.xml b/out/artifacts/homework02_war_exploded/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/out/artifacts/homework02_war_exploded/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/out/artifacts/homework02_war_exploded/index.jsp b/out/artifacts/homework02_war_exploded/index.jsp new file mode 100644 index 0000000..b9d6191 --- /dev/null +++ b/out/artifacts/homework02_war_exploded/index.jsp @@ -0,0 +1,18 @@ +<%@ page import="login.UserDB" %><%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/17 + Time: 下午9:26 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + JDBC应用 + + + <% UserDB dbBean = new UserDB(); + dbBean.ShowCommonUsers(); + %> + + diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/common/DBTool.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/common/DBTool.class new file mode 100644 index 0000000..a2b27f5 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/common/DBTool.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseAddAction.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseAddAction.class new file mode 100644 index 0000000..10a213d Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseAddAction.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseDB.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseDB.class new file mode 100644 index 0000000..77b5def Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseDB.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseDeleteAction.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseDeleteAction.class new file mode 100644 index 0000000..6d22bc3 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseDeleteAction.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseEditAction.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseEditAction.class new file mode 100644 index 0000000..294fb0b Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseEditAction.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseInfo.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseInfo.class new file mode 100644 index 0000000..ae50d6d Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseInfo.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseListAction.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseListAction.class new file mode 100644 index 0000000..8fa08b9 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/course/CourseListAction.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/database.properties b/out/artifacts/learn1_war_exploded/WEB-INF/classes/database.properties new file mode 100644 index 0000000..8dcbcdd --- /dev/null +++ b/out/artifacts/learn1_war_exploded/WEB-INF/classes/database.properties @@ -0,0 +1,41 @@ +#-------------------------------------------------------------------------------------------------- +#DriverClassName=com.mysql.cj.jdbc.Driver +#url=jdbc:mysql://10.19.38.253:3306/chat?useUnicode=true&characterEncoding=utf-8&useSSL=true +#username=admin +#password=1227496003131313xY +#-------------------------------------------------------------------------------------------------- +driverClassName=org.sqlite.JDBC +url=jdbc:sqlite:F:\\Work_Area\\desk\\database\\ѧϰ\\javaݿ\\db_student.db +#-------------------------------------------------------------------------------------------------- + +defaultAutoCommit=true + +defaultReadOnly=false + +initialSize=10 + +maxActive=20 + +maxIdle=20 + +minIdle=5 + +maxWait=10000 + +testOnBorrow=true + +testOnReturn=false + +validationQuery=select 1 + +validationQueryTimeout=1 + +testWhileIdle=false + +timeBetweenEvictionRunsMillis=1 + +numTestsPerEvictionRun=3 + +poolPreparedStatements=true + +maxOpenPreparedStatements=3 \ No newline at end of file diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserDB.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserDB.class new file mode 100644 index 0000000..3bbbfc7 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserDB.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserInfo.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserInfo.class new file mode 100644 index 0000000..f83d65c Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserInfo.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserLoginAction.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserLoginAction.class new file mode 100644 index 0000000..20cdabf Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserLoginAction.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserLogoutAction.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserLogoutAction.class new file mode 100644 index 0000000..2a0f4ff Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/login/UserLogoutAction.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/classes/test/DBTest.class b/out/artifacts/learn1_war_exploded/WEB-INF/classes/test/DBTest.class new file mode 100644 index 0000000..2eb2d08 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/classes/test/DBTest.class differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-dbcp2-2.9.0.jar b/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-dbcp2-2.9.0.jar new file mode 100644 index 0000000..ddfd42c Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-dbcp2-2.9.0.jar differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-logging-1.3.4.jar b/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-logging-1.3.4.jar new file mode 100644 index 0000000..b6339bb Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-logging-1.3.4.jar differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-pool2-2.9.0.jar b/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-pool2-2.9.0.jar new file mode 100644 index 0000000..a038b36 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/lib/commons-pool2-2.9.0.jar differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/lib/mysql-connector.jar b/out/artifacts/learn1_war_exploded/WEB-INF/lib/mysql-connector.jar new file mode 100644 index 0000000..b764ad6 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/lib/mysql-connector.jar differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar b/out/artifacts/learn1_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar new file mode 100644 index 0000000..ab27f70 Binary files /dev/null and b/out/artifacts/learn1_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar differ diff --git a/out/artifacts/learn1_war_exploded/WEB-INF/web.xml b/out/artifacts/learn1_war_exploded/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/out/artifacts/learn1_war_exploded/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/out/artifacts/learn1_war_exploded/course/course.jsp b/out/artifacts/learn1_war_exploded/course/course.jsp new file mode 100644 index 0000000..465510d --- /dev/null +++ b/out/artifacts/learn1_war_exploded/course/course.jsp @@ -0,0 +1,28 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/21 + Time: 下午5:00 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" %> + + + + + 课程信息列表 + + + +
+ +
+
+
+ + + + + diff --git a/out/artifacts/learn1_war_exploded/course/course_edit.jsp b/out/artifacts/learn1_war_exploded/course/course_edit.jsp new file mode 100644 index 0000000..d064689 --- /dev/null +++ b/out/artifacts/learn1_war_exploded/course/course_edit.jsp @@ -0,0 +1,87 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*代表必填
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + + + * +
+ + + 200个字符以内 +
+ + +
+
+
\ No newline at end of file diff --git a/out/artifacts/learn1_war_exploded/course/tmp b/out/artifacts/learn1_war_exploded/course/tmp new file mode 100644 index 0000000..9fc8bda --- /dev/null +++ b/out/artifacts/learn1_war_exploded/course/tmp @@ -0,0 +1,82 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + +*5~20位字符 +
+ + +* +
+ + +*数值 +
+ + +*4位数年份 +
开设专业 + + + + + + + +* +
+ + +200个字符以内 +
+ +
+
\ No newline at end of file diff --git a/out/artifacts/learn1_war_exploded/css/course.css b/out/artifacts/learn1_war_exploded/css/course.css new file mode 100644 index 0000000..58dd320 --- /dev/null +++ b/out/artifacts/learn1_war_exploded/css/course.css @@ -0,0 +1,62 @@ + +tr:nth-child(odd){ + background:#F4F4F4; +} + +.tr-head{ + background-color: #2bf; + text-align: center; +} + +table{ + width:100%; + border-spacing: 0; +} + +.td1 { + BACKGROUND-COLOR: #e6e6e6 +} +.td_header { + BACKGROUND-COLOR: #e6e6e6; COLOR: #000000 +} +.td_1 { + BACKGROUND-COLOR: #f8fbfb; COLOR: #000000 +} +.td_2 { + BACKGROUND-COLOR: #deecec; COLOR: #000000 +} +.td3 { + BACKGROUND-COLOR: #a3d1d2; COLOR: black +} +.underline { + BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4 +} +.button { + border:1px solid black; + background-color:white; + cursor:hand; +} +.star { + COLOR: red +} +.tb_showall +{ + background:#0078B7; + font-size: 18px; + font-weight: bold; +} +.container{ + margin: auto; + width: 80%; + text-align: center; + align-items: center; + position: relative; +} +.input-form{ + border: black solid 1px; + margin: auto; + td{ + border: black solid 1px; + } +} + diff --git a/out/artifacts/learn1_war_exploded/css/index.css b/out/artifacts/learn1_war_exploded/css/index.css new file mode 100644 index 0000000..c3fbe8d --- /dev/null +++ b/out/artifacts/learn1_war_exploded/css/index.css @@ -0,0 +1,20 @@ +.nav-list{ + position: absolute; + top: 0; + left: 0; + background-color: #2bf; + height: 95%; + width: 20%; + margin: 0; + padding: 5px; +} +.content{ + position: absolute; + top: 0; + right: 0; + background-color: #eee; + height: 95%; + width: 80%; + margin: 0; + padding: 5px; +} \ No newline at end of file diff --git a/out/artifacts/learn1_war_exploded/home.jsp b/out/artifacts/learn1_war_exploded/home.jsp new file mode 100644 index 0000000..7cf6909 --- /dev/null +++ b/out/artifacts/learn1_war_exploded/home.jsp @@ -0,0 +1,25 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/12/3 + Time: 上午12:17 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 主页 + + +
+

学生信息管理系统

+ <% + if(session.getAttribute("user")==null){ + out.println("登录"); + }else{ + out.println("注销"); + } + %> +
+ + diff --git a/out/artifacts/learn1_war_exploded/index.jsp b/out/artifacts/learn1_war_exploded/index.jsp new file mode 100644 index 0000000..9d3ab68 --- /dev/null +++ b/out/artifacts/learn1_war_exploded/index.jsp @@ -0,0 +1,24 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/28 + Time: 下午1:20 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 学生信息管理系统 + + + + + + + + diff --git a/out/artifacts/learn1_war_exploded/js/course-edit.js b/out/artifacts/learn1_war_exploded/js/course-edit.js new file mode 100644 index 0000000..05fd0b7 --- /dev/null +++ b/out/artifacts/learn1_war_exploded/js/course-edit.js @@ -0,0 +1,122 @@ +const types = ['', '公共基础必修课', '公共选修课', '学科基础课', '专业必修课', '专业选修课', '集中性实践教学环节'] +const majors = ['', '软件工程', '空间信息', '大数据']; +let courses; +function getCourses(){ + $.ajax({ + url: path+"/CourseListAction", + method: "GET", + success: (data, status, xhr)=>{ + const course_list = document.getElementById('course-list'); + console.log(xhr.status); + course_list.innerHTML = "课程信息列表 名称 性质 学分 开设年级 开设专业 " + courses = data; + for (let i in data){ + const course_tr = document.createElement('tr'); + course_tr.innerHTML=""+ data[i].name +"" + + ""+types[data[i].type]+"" + + ""+ data[i].credit +"" + + ""+ data[i].grade + "" + + ""+ majors[data[i].major]+"" + + "编辑 删除"; + course_list.appendChild(course_tr); + } + const end_tr = document.createElement('tr'); + end_tr.innerHTML="添加" + + "刷新数据列表"; + course_list.appendChild(end_tr); + }, + error: ()=>{ + window.location=path+"/login/login.jsp"; + } + }); +} +$(document).ready(getCourses); + +function editCourse(i){ + $(".course-editor").load(path+"/course/course_edit.jsp", (response,status,xhr)=>{ + if (stauts === 403){ + window.location = path+"/login/login.jsp"; + } + const form = document.querySelector('.course-edit'); + form.action = path+"/CourseEditAction"; + form.method = "POST"; + const idInput = document.getElementById('id-input'); + idInput.value = courses[i].id; + const nameInput = document.getElementById('name-input'); + nameInput.value = courses[i].name; + const typeInput = document.getElementById('type-input'); + typeInput.value = courses[i].type; + const creditInput = document.getElementById('credit-input'); + creditInput.value = courses[i].credit; + const yearInput = document.getElementById('grade-input'); + yearInput.value = courses[i].grade; + const majorInputs = form.querySelectorAll('input[name="major"]'); + majorInputs.forEach((input) => { + if (parseInt(input.value) === courses[i].major) { + input.checked = true; + } + }); + + const noteInput = form.querySelector('#detail-input'); + noteInput.value = courses[i].detail; + + form.addEventListener('submit', function (e) { + e.preventDefault(); + const gradeInput = document.getElementById('grade-input'); + if (!/^20\d{2}$/.test(gradeInput.value)) { + alert('请输入合法的四位年份'); + return; + } + + const nameInput = document.getElementById('name-input'); + console.log(nameInput.value.length) + console.log(nameInput.value) + if (nameInput.value.length < 5 || nameInput.value.length > 20){ + alert('请输入5~20位字符'); + return; + } + const detailInput = document.getElementById('detail-input'); + if (detailInput.value.length > 200){ + alert('备注超长'); + return; + } + $(".course-edit").submit(); + }); + }); +} + +function addCourse(){ + $(".course-editor").load(path+"/course/course_edit.jsp", ()=>{ + const form = document.querySelector('.course-edit'); + form.action = path+"/CourseAddAction"; + form.addEventListener('submit', function (e) { + e.preventDefault(); + const gradeInput = document.getElementById('grade-input'); + if (!/^20\d{2}$/.test(gradeInput.value)) { + alert('请输入合法的四位年份'); + return; + } + + const nameInput = document.getElementById('name-input'); + console.log(nameInput.value.length) + console.log(nameInput.value) + if (nameInput.value.length < 5 || nameInput.value.length > 20){ + alert('请输入5~20位字符'); + return; + } + const detailInput = document.getElementById('detail-input'); + if (detailInput.value.length > 200){ + alert('备注超长'); + return; + } + $(".course-edit").submit(); + }); + }); +} + +function closeEdit(){ + const editor = document.querySelector('.course-editor'); + editor.innerHTML = ""; +} \ No newline at end of file diff --git a/out/artifacts/learn1_war_exploded/js/index.js b/out/artifacts/learn1_war_exploded/js/index.js new file mode 100644 index 0000000..e69de29 diff --git a/out/artifacts/learn1_war_exploded/js/jquery-3.7.1.min.js b/out/artifacts/learn1_war_exploded/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/out/artifacts/learn1_war_exploded/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 登录 + + + + + + diff --git a/out/artifacts/test02_war_exploded/WEB-INF/web.xml b/out/artifacts/test02_war_exploded/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/out/artifacts/test02_war_exploded/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/out/artifacts/test02_war_exploded/course/course_edit.html b/out/artifacts/test02_war_exploded/course/course_edit.html new file mode 100644 index 0000000..703e2f4 --- /dev/null +++ b/out/artifacts/test02_war_exploded/course/course_edit.html @@ -0,0 +1,117 @@ + + + + + 课程信息录入 + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + * +
+ + + 200个字符以内 +
+ +
+
+
+ + + \ No newline at end of file diff --git a/out/artifacts/test02_war_exploded/course/course_list.html b/out/artifacts/test02_war_exploded/course/course_list.html new file mode 100644 index 0000000..188ad86 --- /dev/null +++ b/out/artifacts/test02_war_exploded/course/course_list.html @@ -0,0 +1,54 @@ + + + + + 课程信息列表 + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息列表
名称性质学分开设年级开设专业
java专业课必修32015软件工程编辑 删除
java专业课必修32015软件工程编辑 删除
java专业课必修32015软件工程编辑 删除
添加 刷新数据列表
+
+ + \ No newline at end of file diff --git a/out/artifacts/test02_war_exploded/course/index.html b/out/artifacts/test02_war_exploded/course/index.html new file mode 100644 index 0000000..d9ed47c --- /dev/null +++ b/out/artifacts/test02_war_exploded/course/index.html @@ -0,0 +1,115 @@ + + + + + 课程信息录入 + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + * +
+ + + 200个字符以内 +
+ +
+
+
+ + + \ No newline at end of file diff --git a/out/artifacts/test02_war_exploded/css/course.css b/out/artifacts/test02_war_exploded/css/course.css new file mode 100644 index 0000000..11f9d0c --- /dev/null +++ b/out/artifacts/test02_war_exploded/css/course.css @@ -0,0 +1,67 @@ +.container{ + width: 80%; + margin: auto; +} + +tr:nth-child(odd){ + background:#F4F4F4; +} + +.tr-head{ + background-color: #2bf; + text-align: center; +} + +table{ + width:100%; + border-spacing: 0; +} + +.td1 { + BACKGROUND-COLOR: #e6e6e6 +} +.td_header { + BACKGROUND-COLOR: #e6e6e6; COLOR: #000000 +} +.td_1 { + BACKGROUND-COLOR: #f8fbfb; COLOR: #000000 +} +.td_2 { + BACKGROUND-COLOR: #deecec; COLOR: #000000 +} +.td3 { + BACKGROUND-COLOR: #a3d1d2; COLOR: black +} +.underline { + BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4 +} +.button { + border:1px solid black; + background-color:white; + cursor:hand; +} +.star { + COLOR: red +} +.tb_showall +{ + background:#0078B7; + font-size: 18px; + font-weight: bold; +} +.container{ + margin: auto; + width: 80%; + display: flex; + text-align: center; + align-items: center; + position: relative; +} +.input-form{ + border: black solid 1px; + margin: auto; + td{ + border: black solid 1px; + } +} + diff --git a/out/artifacts/test02_war_exploded/index.jsp b/out/artifacts/test02_war_exploded/index.jsp new file mode 100644 index 0000000..2314636 --- /dev/null +++ b/out/artifacts/test02_war_exploded/index.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/12 + Time: 下午9:16 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 实验2 + + + 打开课程列表页面 + + diff --git a/out/artifacts/test02war/2023081018-谢文博-实验2.docx b/out/artifacts/test02war/2023081018-谢文博-实验2.docx new file mode 100644 index 0000000..0e2f3b8 Binary files /dev/null and b/out/artifacts/test02war/2023081018-谢文博-实验2.docx differ diff --git a/out/artifacts/test02war/2023081018-谢文博-实验2.zip b/out/artifacts/test02war/2023081018-谢文博-实验2.zip new file mode 100644 index 0000000..76cd424 Binary files /dev/null and b/out/artifacts/test02war/2023081018-谢文博-实验2.zip differ diff --git a/out/artifacts/test02war/2023081018_谢文博_实验2.war b/out/artifacts/test02war/2023081018_谢文博_实验2.war new file mode 100644 index 0000000..5b1dec4 Binary files /dev/null and b/out/artifacts/test02war/2023081018_谢文博_实验2.war differ diff --git a/out/artifacts/test02war/test02打包为war.war b/out/artifacts/test02war/test02打包为war.war new file mode 100644 index 0000000..56e4537 Binary files /dev/null and b/out/artifacts/test02war/test02打包为war.war differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/classes/common/DBTool.class b/out/artifacts/test03_war_exploded/WEB-INF/classes/common/DBTool.class new file mode 100644 index 0000000..c19f758 Binary files /dev/null and b/out/artifacts/test03_war_exploded/WEB-INF/classes/common/DBTool.class differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserAction.class b/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserAction.class new file mode 100644 index 0000000..302fb97 Binary files /dev/null and b/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserAction.class differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserDB.class b/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserDB.class new file mode 100644 index 0000000..7b651ae Binary files /dev/null and b/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserDB.class differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserInfo.class b/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserInfo.class new file mode 100644 index 0000000..6e40a33 Binary files /dev/null and b/out/artifacts/test03_war_exploded/WEB-INF/classes/login/UserInfo.class differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/lib/mysql-connector.jar b/out/artifacts/test03_war_exploded/WEB-INF/lib/mysql-connector.jar new file mode 100644 index 0000000..b764ad6 Binary files /dev/null and b/out/artifacts/test03_war_exploded/WEB-INF/lib/mysql-connector.jar differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar b/out/artifacts/test03_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar new file mode 100644 index 0000000..ab27f70 Binary files /dev/null and b/out/artifacts/test03_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar differ diff --git a/out/artifacts/test03_war_exploded/WEB-INF/web.xml b/out/artifacts/test03_war_exploded/WEB-INF/web.xml new file mode 100644 index 0000000..ffd17a0 --- /dev/null +++ b/out/artifacts/test03_war_exploded/WEB-INF/web.xml @@ -0,0 +1,15 @@ + + + + userAction + login.UserAction + + + userAction + /userAction + + + diff --git a/out/artifacts/test03_war_exploded/css/login.css b/out/artifacts/test03_war_exploded/css/login.css new file mode 100644 index 0000000..edcfd67 --- /dev/null +++ b/out/artifacts/test03_war_exploded/css/login.css @@ -0,0 +1,6 @@ +.login-table{ + border: black 1px solid; + td{ + border: black 1px solid; + } +} \ No newline at end of file diff --git a/out/artifacts/test03_war_exploded/index.jsp b/out/artifacts/test03_war_exploded/index.jsp new file mode 100644 index 0000000..95d4a05 --- /dev/null +++ b/out/artifacts/test03_war_exploded/index.jsp @@ -0,0 +1,12 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/12 + Time: 下午11:41 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<% + String path = request.getContextPath(); + response.sendRedirect(path+"/login.jsp"); +%> diff --git a/out/artifacts/test03_war_exploded/login.jsp b/out/artifacts/test03_war_exploded/login.jsp new file mode 100644 index 0000000..f773727 --- /dev/null +++ b/out/artifacts/test03_war_exploded/login.jsp @@ -0,0 +1,49 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/18 + Time: 上午10:52 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 登录页面 + + + +
+ + + + + + + + + + + + + + + + +
+ + + + diff --git a/out/artifacts/test03_war_exploded/user_info.jsp b/out/artifacts/test03_war_exploded/user_info.jsp new file mode 100644 index 0000000..bfb5f1f --- /dev/null +++ b/out/artifacts/test03_war_exploded/user_info.jsp @@ -0,0 +1,24 @@ +<%@ page import="login.UserInfo" %><%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/18 + Time: 上午10:52 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 用户信息 + + +登录成功 +

欢迎< +<% + UserInfo user = (UserInfo) session.getAttribute("user"); + out.print(user.getName()); +%> +> +

+ + + diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/common/DBTool.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/common/DBTool.class new file mode 100644 index 0000000..5305a9b Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/common/DBTool.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseAddAction.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseAddAction.class new file mode 100644 index 0000000..c6c0aa0 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseAddAction.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseDB.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseDB.class new file mode 100644 index 0000000..e5e9706 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseDB.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseDeleteAction.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseDeleteAction.class new file mode 100644 index 0000000..fbe1843 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseDeleteAction.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseEditAction.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseEditAction.class new file mode 100644 index 0000000..08ac961 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseEditAction.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseInfo.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseInfo.class new file mode 100644 index 0000000..07337ed Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseInfo.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseListAction.class b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseListAction.class new file mode 100644 index 0000000..50019a0 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/classes/course/courseListAction.class differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-dbcp2-2.9.0.jar b/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-dbcp2-2.9.0.jar new file mode 100644 index 0000000..ddfd42c Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-dbcp2-2.9.0.jar differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-logging-1.3.4.jar b/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-logging-1.3.4.jar new file mode 100644 index 0000000..b6339bb Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-logging-1.3.4.jar differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-pool2-2.9.0.jar b/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-pool2-2.9.0.jar new file mode 100644 index 0000000..a038b36 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/lib/commons-pool2-2.9.0.jar differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar b/out/artifacts/test04_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar new file mode 100644 index 0000000..ab27f70 Binary files /dev/null and b/out/artifacts/test04_war_exploded/WEB-INF/lib/sqlite-jdbc-3.47.0.0.jar differ diff --git a/out/artifacts/test04_war_exploded/WEB-INF/web.xml b/out/artifacts/test04_war_exploded/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/out/artifacts/test04_war_exploded/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/out/artifacts/test04_war_exploded/course/course.jsp b/out/artifacts/test04_war_exploded/course/course.jsp new file mode 100644 index 0000000..ecfe381 --- /dev/null +++ b/out/artifacts/test04_war_exploded/course/course.jsp @@ -0,0 +1,145 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/21 + Time: 下午5:00 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" %> + + + + + 课程信息列表 + + + +
+ +
+
+
+ + + + diff --git a/out/artifacts/test04_war_exploded/course/course_edit.jsp b/out/artifacts/test04_war_exploded/course/course_edit.jsp new file mode 100644 index 0000000..dd8b76a --- /dev/null +++ b/out/artifacts/test04_war_exploded/course/course_edit.jsp @@ -0,0 +1,93 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*代表必填
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + + + * +
+ + + 200个字符以内 +
+ + +
+
+
+ \ No newline at end of file diff --git a/out/artifacts/test04_war_exploded/course/tmp b/out/artifacts/test04_war_exploded/course/tmp new file mode 100644 index 0000000..9fc8bda --- /dev/null +++ b/out/artifacts/test04_war_exploded/course/tmp @@ -0,0 +1,82 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + +*5~20位字符 +
+ + +* +
+ + +*数值 +
+ + +*4位数年份 +
开设专业 + + + + + + + +* +
+ + +200个字符以内 +
+ +
+
\ No newline at end of file diff --git a/out/artifacts/test04_war_exploded/css/course.css b/out/artifacts/test04_war_exploded/css/course.css new file mode 100644 index 0000000..58dd320 --- /dev/null +++ b/out/artifacts/test04_war_exploded/css/course.css @@ -0,0 +1,62 @@ + +tr:nth-child(odd){ + background:#F4F4F4; +} + +.tr-head{ + background-color: #2bf; + text-align: center; +} + +table{ + width:100%; + border-spacing: 0; +} + +.td1 { + BACKGROUND-COLOR: #e6e6e6 +} +.td_header { + BACKGROUND-COLOR: #e6e6e6; COLOR: #000000 +} +.td_1 { + BACKGROUND-COLOR: #f8fbfb; COLOR: #000000 +} +.td_2 { + BACKGROUND-COLOR: #deecec; COLOR: #000000 +} +.td3 { + BACKGROUND-COLOR: #a3d1d2; COLOR: black +} +.underline { + BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4 +} +.button { + border:1px solid black; + background-color:white; + cursor:hand; +} +.star { + COLOR: red +} +.tb_showall +{ + background:#0078B7; + font-size: 18px; + font-weight: bold; +} +.container{ + margin: auto; + width: 80%; + text-align: center; + align-items: center; + position: relative; +} +.input-form{ + border: black solid 1px; + margin: auto; + td{ + border: black solid 1px; + } +} + diff --git a/out/artifacts/test04_war_exploded/index.jsp b/out/artifacts/test04_war_exploded/index.jsp new file mode 100644 index 0000000..cbc783d --- /dev/null +++ b/out/artifacts/test04_war_exploded/index.jsp @@ -0,0 +1,12 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/21 + Time: 下午4:33 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<% + String path = request.getContextPath(); + response.sendRedirect(path+"/course/course.jsp"); +%> diff --git a/out/artifacts/test04_war_exploded/js/jquery-3.7.1.min.js b/out/artifacts/test04_war_exploded/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/out/artifacts/test04_war_exploded/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test02/web/WEB-INF/web.xml b/test02/web/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/test02/web/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/test02/web/course/course_edit.html b/test02/web/course/course_edit.html new file mode 100644 index 0000000..703e2f4 --- /dev/null +++ b/test02/web/course/course_edit.html @@ -0,0 +1,117 @@ + + + + + 课程信息录入 + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + * +
+ + + 200个字符以内 +
+ +
+
+
+ + + \ No newline at end of file diff --git a/test02/web/course/course_list.html b/test02/web/course/course_list.html new file mode 100644 index 0000000..188ad86 --- /dev/null +++ b/test02/web/course/course_list.html @@ -0,0 +1,54 @@ + + + + + 课程信息列表 + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息列表
名称性质学分开设年级开设专业
java专业课必修32015软件工程编辑 删除
java专业课必修32015软件工程编辑 删除
java专业课必修32015软件工程编辑 删除
添加 刷新数据列表
+
+ + \ No newline at end of file diff --git a/test02/web/course/index.html b/test02/web/course/index.html new file mode 100644 index 0000000..d9ed47c --- /dev/null +++ b/test02/web/course/index.html @@ -0,0 +1,115 @@ + + + + + 课程信息录入 + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + * +
+ + + 200个字符以内 +
+ +
+
+
+ + + \ No newline at end of file diff --git a/test02/web/css/course.css b/test02/web/css/course.css new file mode 100644 index 0000000..11f9d0c --- /dev/null +++ b/test02/web/css/course.css @@ -0,0 +1,67 @@ +.container{ + width: 80%; + margin: auto; +} + +tr:nth-child(odd){ + background:#F4F4F4; +} + +.tr-head{ + background-color: #2bf; + text-align: center; +} + +table{ + width:100%; + border-spacing: 0; +} + +.td1 { + BACKGROUND-COLOR: #e6e6e6 +} +.td_header { + BACKGROUND-COLOR: #e6e6e6; COLOR: #000000 +} +.td_1 { + BACKGROUND-COLOR: #f8fbfb; COLOR: #000000 +} +.td_2 { + BACKGROUND-COLOR: #deecec; COLOR: #000000 +} +.td3 { + BACKGROUND-COLOR: #a3d1d2; COLOR: black +} +.underline { + BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4 +} +.button { + border:1px solid black; + background-color:white; + cursor:hand; +} +.star { + COLOR: red +} +.tb_showall +{ + background:#0078B7; + font-size: 18px; + font-weight: bold; +} +.container{ + margin: auto; + width: 80%; + display: flex; + text-align: center; + align-items: center; + position: relative; +} +.input-form{ + border: black solid 1px; + margin: auto; + td{ + border: black solid 1px; + } +} + diff --git a/test02/web/index.jsp b/test02/web/index.jsp new file mode 100644 index 0000000..2314636 --- /dev/null +++ b/test02/web/index.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/12 + Time: 下午9:16 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 实验2 + + + 打开课程列表页面 + + diff --git a/test03/src/common/DBTool.java b/test03/src/common/DBTool.java new file mode 100644 index 0000000..455dd83 --- /dev/null +++ b/test03/src/common/DBTool.java @@ -0,0 +1,44 @@ +package common; + +import lombok.Getter; + +import java.sql.*; + +public class DBTool { + @Getter + private final Connection conn; + ResultSet rs; + + public DBTool() throws ClassNotFoundException, SQLException { + Class.forName("com.mysql.cj.jdbc.Driver"); + Class.forName("org.sqlite.JDBC"); + + //String url = "jdbc:mysql://10.19.38.253:3306/chat?useUnicode=true&characterEncoding=utf-8&useSSL=true"; + String url = "jdbc:sqlite:F:\\Work_Area\\desk\\database\\学习\\java测试数据库\\db_student.db"; + String username = "admin"; + String password = "1227496003131313xY"; + + conn = DriverManager.getConnection(url, username, password); + } + +// public ResultSet doQuery(String sql) throws SQLException { +// rs = stmt.executeQuery(sql); +// return rs; +// } + + public ResultSet runSQL(PreparedStatement ps) throws SQLException { + rs = ps.executeQuery(); + return rs; + } + +// public int doUpdate(String sql) throws SQLException { +// return stmt.executeUpdate(sql); +// } + + public void close() throws SQLException { + if(rs!=null){ + rs.close(); + } + conn.close(); + } +} diff --git a/test03/src/login/UserAction.java b/test03/src/login/UserAction.java new file mode 100644 index 0000000..6f3eae3 --- /dev/null +++ b/test03/src/login/UserAction.java @@ -0,0 +1,40 @@ +package login; + +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; + +public class UserAction extends HttpServlet { + public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + String path = req.getContextPath(); + String username = req.getParameter("username"); + String password = req.getParameter("password"); + int flag; + try{ + UserDB userdb = new UserDB(); + UserInfo user = userdb.GetUserInfoByName(username); + if(user == null) { + flag = 1; + }else if (user.getPass().equals(password)) { + flag=0; + req.getSession().setAttribute("user", userdb.GetUserInfoByName(username)); + }else{ + flag=2; + } + System.out.println(user); + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + flag=3; + } + if(flag==0){ + res.sendRedirect(path+"/user_info.jsp"); + }else{ + res.sendRedirect(path+"/login.jsp?loginflag="+flag+"&username="+username); + } + } +} diff --git a/test03/src/login/UserDB.java b/test03/src/login/UserDB.java new file mode 100644 index 0000000..43fc186 --- /dev/null +++ b/test03/src/login/UserDB.java @@ -0,0 +1,60 @@ +package login; + +import common.DBTool; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class UserDB { + static private DBTool dbtool; + public UserDB() throws SQLException, ClassNotFoundException { + if(dbtool == null){ + dbtool = new DBTool(); + } + } + public UserInfo GetUserInfo(int id) { + UserInfo u = new UserInfo(); + PreparedStatement ps = null; + ResultSet rs = null; + try{ + String sql = "select * from t_user where N_USER_ID = ?"; + ps = dbtool.getConn().prepareStatement(sql); + ps.setInt(1, id); + rs = ps.executeQuery(); + if(rs.next()) { + u.setId(rs.getInt("N_USER_ID")); + u.setName(rs.getString("VC_LOGIN_NAME")); + u.setPass(rs.getString("VC_PASSWORD")); + }else{ + u = null; + } + ps.close(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return u; + } + public UserInfo GetUserInfoByName(String username) { + UserInfo u = new UserInfo(); + PreparedStatement ps = null; + ResultSet rs = null; + try{ + String sql = "select * from t_user where VC_LOGIN_NAME = ?"; + ps = dbtool.getConn().prepareStatement(sql); + ps.setString(1, username); + rs = ps.executeQuery(); + if(rs.next()) { + u.setId(rs.getInt("N_USER_ID")); + u.setName(rs.getString("VC_LOGIN_NAME")); + u.setPass(rs.getString("VC_PASSWORD")); + }else{ + u = null; + } + ps.close(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + return u; + } +} diff --git a/test03/src/login/UserInfo.java b/test03/src/login/UserInfo.java new file mode 100644 index 0000000..44b6edf --- /dev/null +++ b/test03/src/login/UserInfo.java @@ -0,0 +1,15 @@ +package login; + +import lombok.*; + +import java.util.Objects; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@ToString +public class UserInfo { + private int id; + private String name; + private String pass; +} \ No newline at end of file diff --git a/test03/test03.iml b/test03/test03.iml new file mode 100644 index 0000000..e161586 --- /dev/null +++ b/test03/test03.iml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test03/web/WEB-INF/web.xml b/test03/web/WEB-INF/web.xml new file mode 100644 index 0000000..ffd17a0 --- /dev/null +++ b/test03/web/WEB-INF/web.xml @@ -0,0 +1,15 @@ + + + + userAction + login.UserAction + + + userAction + /userAction + + + diff --git a/test03/web/css/login.css b/test03/web/css/login.css new file mode 100644 index 0000000..edcfd67 --- /dev/null +++ b/test03/web/css/login.css @@ -0,0 +1,6 @@ +.login-table{ + border: black 1px solid; + td{ + border: black 1px solid; + } +} \ No newline at end of file diff --git a/test03/web/error.jsp b/test03/web/error.jsp new file mode 100644 index 0000000..0c76b48 --- /dev/null +++ b/test03/web/error.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/28 + Time: 下午4:01 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 错误 + + +

服务器遇到了错误

+ + diff --git a/test03/web/index.jsp b/test03/web/index.jsp new file mode 100644 index 0000000..95d4a05 --- /dev/null +++ b/test03/web/index.jsp @@ -0,0 +1,12 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/12 + Time: 下午11:41 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<% + String path = request.getContextPath(); + response.sendRedirect(path+"/login.jsp"); +%> diff --git a/test03/web/login.jsp b/test03/web/login.jsp new file mode 100644 index 0000000..f773727 --- /dev/null +++ b/test03/web/login.jsp @@ -0,0 +1,49 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/18 + Time: 上午10:52 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 登录页面 + + + +
+ + + + + + + + + + + + + + + + +
+ + + + diff --git a/test03/web/user_info.jsp b/test03/web/user_info.jsp new file mode 100644 index 0000000..bfb5f1f --- /dev/null +++ b/test03/web/user_info.jsp @@ -0,0 +1,24 @@ +<%@ page import="login.UserInfo" %><%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/18 + Time: 上午10:52 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + 用户信息 + + +登录成功 +

欢迎< +<% + UserInfo user = (UserInfo) session.getAttribute("user"); + out.print(user.getName()); +%> +> +

+ + + diff --git a/test04/src/common/DBTool.java b/test04/src/common/DBTool.java new file mode 100644 index 0000000..c68a3eb --- /dev/null +++ b/test04/src/common/DBTool.java @@ -0,0 +1,44 @@ +package common; + +import lombok.Getter; + +import java.sql.*; + +public class DBTool { + @Getter + private final Connection conn; + ResultSet rs; + + public DBTool() throws ClassNotFoundException, SQLException { + //Class.forName("com.mysql.cj.jdbc.Driver"); + Class.forName("org.sqlite.JDBC"); + + //String url = "jdbc:mysql://10.19.38.253:3306/chat?useUnicode=true&characterEncoding=utf-8&useSSL=true"; + String url = "jdbc:sqlite:F:\\Work_Area\\desk\\database\\ѧϰ\\javaݿ\\db_student.db"; + String username = "admin"; + String password = "1227496003131313xY"; + + conn = DriverManager.getConnection(url, username, password); + } + +// public ResultSet doQuery(String sql) throws SQLException { +// rs = stmt.executeQuery(sql); +// return rs; +// } + + public ResultSet runSQL(PreparedStatement ps) throws SQLException { + rs = ps.executeQuery(); + return rs; + } + +// public int doUpdate(String sql) throws SQLException { +// return stmt.executeUpdate(sql); +// } + + public void close() throws SQLException { + if(rs!=null){ + rs.close(); + } + conn.close(); + } +} diff --git a/test04/src/course/courseAddAction.java b/test04/src/course/courseAddAction.java new file mode 100644 index 0000000..fa09504 --- /dev/null +++ b/test04/src/course/courseAddAction.java @@ -0,0 +1,33 @@ +package course; + +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; + +@WebServlet("/courseAddAction") +public class courseAddAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + courseDB coursedb = new courseDB(); + int id = Integer.parseInt(req.getParameter("id")); + courseInfo course = new courseInfo(); + String name = req.getParameter("name"); + int type = Integer.parseInt(req.getParameter("type")); + float credit = Float.parseFloat(req.getParameter("credit")); + int grade = Integer.parseInt(req.getParameter("grade")); + int major = Integer.parseInt(req.getParameter("major")); + String detail = req.getParameter("detail"); + course.setName(name); + course.setType(type); + course.setCredit(credit); + course.setGrade(grade); + course.setMajor(major); + course.setDetail(detail); + coursedb.insertCourse(course); + String path = req.getContextPath(); + resp.sendRedirect(path+"/course/course.jsp"); + } +} diff --git a/test04/src/course/courseDB.java b/test04/src/course/courseDB.java new file mode 100644 index 0000000..c1a0e45 --- /dev/null +++ b/test04/src/course/courseDB.java @@ -0,0 +1,104 @@ +package course; + +import common.DBTool; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + +public class courseDB { + public ArrayList getAllCourses(){ + ArrayList courseList = new ArrayList<>(); + try{ + DBTool db = new DBTool(); + PreparedStatement ps = db.getConn().prepareStatement("select * from t_course"); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + int id = rs.getInt("N_COURSE_ID"); + String name = rs.getString("VC_COURSE_NAME"); + int type = rs.getInt("N_TYPE"); + float credits = rs.getFloat("F_CREDIT"); + int grade = rs.getInt("N_GRADE"); + int major = rs.getInt("N_MAJOR"); + String detail = rs.getString("VC_DETAIL"); + courseList.add(new courseInfo(id, name, type, credits, grade, major, detail)); + } + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + return courseList; + } + + public courseInfo getCourseInfo(int id){ + courseInfo courseInfo = null; + try{ + DBTool db = new DBTool(); + PreparedStatement ps = db.getConn().prepareStatement("select * from t_course WHERE N_COURSE_ID = ?"); + ps.setInt(1, id); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + String name = rs.getString("VC_COURSE_NAME"); + int type = rs.getInt("N_TYPE"); + float credits = rs.getFloat("F_CREDIT"); + int grade = rs.getInt("N_GRADE"); + int major = rs.getInt("N_MAJOR"); + String detail = rs.getString("VC_DETAIL"); + courseInfo = new courseInfo(id, name, type, credits, grade, major, detail); + } + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + return courseInfo; + } + + public int editCourse(courseInfo course){ + int flag; + try{ + DBTool db = new DBTool(); + PreparedStatement ps = db.getConn().prepareStatement("UPDATE t_course SET VC_COURSE_NAME = ?,"+ + " N_TYPE = ?, F_CREDIT = ?, N_GRADE = ?, N_MAJOR = ?, VC_DETAIL = ? WHERE N_COURSE_ID = ?"); + ps.setString(1, course.getName()); + ps.setInt(2, course.getType()); + ps.setFloat(3, course.getCredit()); + ps.setInt(4, course.getGrade()); + ps.setInt(5, course.getMajor()); + ps.setString(6, course.getDetail()); + ps.setInt(7, course.getId()); + flag = ps.executeUpdate(); + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + return flag; + } + + public void insertCourse(courseInfo course){ + try{ + String sql = "INSERT INTO t_course (VC_COURSE_NAME, N_TYPE, F_CREDIT, N_GRADE, N_MAJOR, VC_DETAIL) VALUES(?, ?, ?, ?, ?, ?)"; + DBTool db = new DBTool(); + PreparedStatement ps = db.getConn().prepareStatement(sql); + ps.setString(1, course.getName()); + ps.setInt(2, course.getType()); + ps.setFloat(3, course.getCredit()); + ps.setInt(4, course.getGrade()); + ps.setInt(5, course.getMajor()); + ps.setString(6, course.getDetail()); + ps.executeUpdate(); + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + public void deleteCourse(int id){ + try{ + String sql = "DELETE FROM t_course WHERE N_COURSE_ID = ?"; + DBTool db = new DBTool(); + PreparedStatement ps = db.getConn().prepareStatement(sql); + ps.setInt(1, id); + ps.executeUpdate(); + } catch (SQLException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/test04/src/course/courseDeleteAction.java b/test04/src/course/courseDeleteAction.java new file mode 100644 index 0000000..f2d3e5b --- /dev/null +++ b/test04/src/course/courseDeleteAction.java @@ -0,0 +1,20 @@ +package course; + +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; + +@WebServlet("/courseDeleteAction") +public class courseDeleteAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + int id = Integer.parseInt(req.getParameter("id")); + courseDB coursedb = new courseDB(); + coursedb.deleteCourse(id); + String path = req.getContextPath(); + resp.sendRedirect(path+"/course/course.jsp"); + } +} diff --git a/test04/src/course/courseEditAction.java b/test04/src/course/courseEditAction.java new file mode 100644 index 0000000..7c1e3a0 --- /dev/null +++ b/test04/src/course/courseEditAction.java @@ -0,0 +1,37 @@ +package course; + +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; + +@WebServlet("/courseEditAction") +public class courseEditAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + courseDB coursedb = new courseDB(); + int id = Integer.parseInt(req.getParameter("id")); + courseInfo course = coursedb.getCourseInfo(id); + String name = req.getParameter("name"); + int type = Integer.parseInt(req.getParameter("type")); + float credit = Float.parseFloat(req.getParameter("credit")); + int grade = Integer.parseInt(req.getParameter("grade")); + int major = Integer.parseInt(req.getParameter("major")); + String detail = req.getParameter("detail"); + course.setName(name); + course.setType(type); + course.setCredit(credit); + course.setGrade(grade); + course.setMajor(major); + course.setDetail(detail); + + if (coursedb.editCourse(course)>=1){ + String path = req.getContextPath(); + resp.sendRedirect(path+"/course/course.jsp"); + }else { + resp.sendRedirect(req.getContextPath()+"/course/course.jsp?flag='update-failed'"); + } + } +} diff --git a/test04/src/course/courseInfo.java b/test04/src/course/courseInfo.java new file mode 100644 index 0000000..d4eca53 --- /dev/null +++ b/test04/src/course/courseInfo.java @@ -0,0 +1,31 @@ +package course; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@ToString +@NoArgsConstructor +public class courseInfo { + private int id; + private String name; + private int type; + private float credit; + private int grade; + private int major; + private String detail; + + public String toJSON(){ + String json="{"; + json += "\"id\":"+id+","; + json += "\"name\":\""+name+"\","; + json += "\"type\":"+type+","; + json += "\"credit\":"+credit+","; + json += "\"grade\":"+grade+","; + json += "\"major\":"+major+","; + json += "\"detail\":\""+detail+"\""; + json += "}"; + return json; + } +} diff --git a/test04/src/course/courseListAction.java b/test04/src/course/courseListAction.java new file mode 100644 index 0000000..24530d7 --- /dev/null +++ b/test04/src/course/courseListAction.java @@ -0,0 +1,27 @@ +package course; + +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.io.PrintWriter; +import java.util.ArrayList; + +@WebServlet("/courseListAction") +public class courseListAction extends HttpServlet { + protected void service(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { + courseDB coursedb = new courseDB(); + ArrayList course_list = coursedb.getAllCourses(); + StringBuilder json= new StringBuilder("["); + for (courseInfo course : course_list) { + json.append(course.toJSON()).append(","); + } + rsp.setContentType("application/json;charset=utf-8"); + PrintWriter out = rsp.getWriter(); + out.print(json.substring(0, json.length()-1)); + out.print("]"); + } +} diff --git a/test04/test04.iml b/test04/test04.iml new file mode 100644 index 0000000..0eddcde --- /dev/null +++ b/test04/test04.iml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test04/web/WEB-INF/web.xml b/test04/web/WEB-INF/web.xml new file mode 100644 index 0000000..0bf2fcb --- /dev/null +++ b/test04/web/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/test04/web/course/course.jsp b/test04/web/course/course.jsp new file mode 100644 index 0000000..ecfe381 --- /dev/null +++ b/test04/web/course/course.jsp @@ -0,0 +1,145 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/21 + Time: 下午5:00 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" %> + + + + + 课程信息列表 + + + +
+ +
+
+
+ + + + diff --git a/test04/web/course/course_edit.jsp b/test04/web/course/course_edit.jsp new file mode 100644 index 0000000..dd8b76a --- /dev/null +++ b/test04/web/course/course_edit.jsp @@ -0,0 +1,93 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*代表必填
+ + + *5~20位字符 +
+ + + * +
+ + + *数值 +
+ + + *4位数年份 +
开设专业 + + + + + + + + * +
+ + + 200个字符以内 +
+ + +
+
+
+ \ No newline at end of file diff --git a/test04/web/course/tmp b/test04/web/course/tmp new file mode 100644 index 0000000..9fc8bda --- /dev/null +++ b/test04/web/course/tmp @@ -0,0 +1,82 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
课程信息录入,*
+ + +*5~20位字符 +
+ + +* +
+ + +*数值 +
+ + +*4位数年份 +
开设专业 + + + + + + + +* +
+ + +200个字符以内 +
+ +
+
\ No newline at end of file diff --git a/test04/web/css/course.css b/test04/web/css/course.css new file mode 100644 index 0000000..58dd320 --- /dev/null +++ b/test04/web/css/course.css @@ -0,0 +1,62 @@ + +tr:nth-child(odd){ + background:#F4F4F4; +} + +.tr-head{ + background-color: #2bf; + text-align: center; +} + +table{ + width:100%; + border-spacing: 0; +} + +.td1 { + BACKGROUND-COLOR: #e6e6e6 +} +.td_header { + BACKGROUND-COLOR: #e6e6e6; COLOR: #000000 +} +.td_1 { + BACKGROUND-COLOR: #f8fbfb; COLOR: #000000 +} +.td_2 { + BACKGROUND-COLOR: #deecec; COLOR: #000000 +} +.td3 { + BACKGROUND-COLOR: #a3d1d2; COLOR: black +} +.underline { + BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4 +} +.button { + border:1px solid black; + background-color:white; + cursor:hand; +} +.star { + COLOR: red +} +.tb_showall +{ + background:#0078B7; + font-size: 18px; + font-weight: bold; +} +.container{ + margin: auto; + width: 80%; + text-align: center; + align-items: center; + position: relative; +} +.input-form{ + border: black solid 1px; + margin: auto; + td{ + border: black solid 1px; + } +} + diff --git a/test04/web/index.jsp b/test04/web/index.jsp new file mode 100644 index 0000000..cbc783d --- /dev/null +++ b/test04/web/index.jsp @@ -0,0 +1,12 @@ +<%-- + Created by IntelliJ IDEA. + User: 25589 + Date: 2024/11/21 + Time: 下午4:33 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<% + String path = request.getContextPath(); + response.sendRedirect(path+"/course/course.jsp"); +%> diff --git a/test04/web/js/jquery-3.7.1.min.js b/test04/web/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/test04/web/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0