使用数据库连接池C3P0及JDBC技术,并结合JSP、Servlet以及Filter等JavaWeb技术实现数据库中的学生信息数据实现增加、修改、删除、查询等操作。 【需求说明】 (1)学生信息包括:学号、姓名、性别、出生日期、所在院系、爱好、个人简介等信息; (2)分别设计: addStu.jsp、editStu.jsp和stuList.jsp用于实现用户交互; (3)分别设计:SaveStudentServlet、EditStudentServlet、DelStudentServlet和SearchStudentServlet四个Servlet程序,用于实现对学生信息数据的增加、修改、删除、查询等功能。 (4)Filter过滤器解决POST提交方式时的中文乱码问

时间: 2023-07-04 15:06:28 浏览: 78
题。 这是一个比较全面的JavaWeb应用,需要涉及到数据库操作、JSP页面、Servlet程序以及Filter过滤器等多个方面。下面我会分别介绍一下各个方面的实现。 一、数据库连接池C3P0及JDBC技术 1.1 数据库准备 首先需要准备好一个数据库,在本例中我们使用MySQL数据库。创建一个名为student的数据库,并在该数据库中创建一个名为stu_info的表,包含学号、姓名、性别、出生日期、所在院系、爱好、个人简介等信息。 1.2 C3P0连接池配置 使用C3P0连接池可以有效地提高数据库连接的效率和稳定性。在项目中,我们需要在web.xml文件中配置一个参数,用来指定C3P0配置文件的路径。 ```xml <context-param> <param-name>configLocation</param-name> <param-value>/WEB-INF/c3p0-config.xml</param-value> </context-param> ``` 然后在项目的WEB-INF目录下创建一个名为c3p0-config.xml的文件,并在其中进行连接池的配置。 ```xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="jdbcUrl">jdbc:mysql://localhost:3306/student</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">123456</property> <property name="maxPoolSize">50</property> <property name="minPoolSize">5</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">1800</property> <property name="acquireIncrement">3</property> <property name="idleConnectionTestPeriod">60</property> <property name="checkoutTimeout">10000</property> </default-config> </c3p0-config> ``` 1.3 JDBC编程 在JavaWeb应用中,我们需要使用JDBC技术来连接数据库并进行数据的增删改查。在本例中,我们可以使用以下代码来连接数据库并查询学生信息。 ```java public class StudentDao { private ComboPooledDataSource dataSource; public StudentDao() throws Exception { dataSource = new ComboPooledDataSource(); } // 获取学生信息 public List<Student> getStudents() { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; List<Student> students = new ArrayList<Student>(); try { conn = dataSource.getConnection(); String sql = "SELECT * FROM stu_info"; stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { Student student = new Student(); student.setSno(rs.getString("sno")); student.setName(rs.getString("name")); student.setSex(rs.getString("sex")); student.setBirthday(rs.getDate("birthday")); student.setDepartment(rs.getString("department")); student.setHobby(rs.getString("hobby")); student.setIntro(rs.getString("intro")); students.add(student); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return students; } } ``` 二、JSP页面 在JavaWeb应用中,我们通常需要使用JSP页面来实现前端页面的展示和用户交互。在本例中,我们需要设计三个JSP页面,分别是addStu.jsp、editStu.jsp和stuList.jsp。其中,addStu.jsp页面用来添加学生信息,editStu.jsp页面用来编辑学生信息,stuList.jsp页面用来展示学生信息列表。 addStu.jsp页面代码: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>添加学生信息</title> </head> <body> <h1>添加学生信息</h1> <form action="${pageContext.request.contextPath}/saveStudent" method="post"> <table> <tr> <td>学号:</td> <td><input type="text" name="sno"></td> </tr> <tr> <td>姓名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>性别:</td> <td> <input type="radio" name="sex" value="男">男 <input type="radio" name="sex" value="女">女 </td> </tr> <tr> <td>出生日期:</td> <td><input type="date" name="birthday"></td> </tr> <tr> <td>所在院系:</td> <td><input type="text" name="department"></td> </tr> <tr> <td>爱好:</td> <td><input type="text" name="hobby"></td> </tr> <tr> <td>个人简介:</td> <td><textarea name="intro"></textarea></td> </tr> <tr> <td colspan="2"> <input type="submit" value="保存"> <input type="reset" value="重置"> </td> </tr> </table> </form> </body> </html> ``` editStu.jsp页面代码: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>编辑学生信息</title> </head> <body> <h1>编辑学生信息</h1> <form action="${pageContext.request.contextPath}/editStudent" method="post"> <table> <tr> <td>学号:</td> <td><input type="text" name="sno" value="${student.sno}" readonly></td> </tr> <tr> <td>姓名:</td> <td><input type="text" name="name" value="${student.name}"></td> </tr> <tr> <td>性别:</td> <td> <input type="radio" name="sex" value="男" ${student.sex == '男' ? 'checked' : ''}>男 <input type="radio" name="sex" value="女" ${student.sex == '女' ? 'checked' : ''}>女 </td> </tr> <tr> <td>出生日期:</td> <td><input type="date" name="birthday" value="${student.birthday}"></td> </tr> <tr> <td>所在院系:</td> <td><input type="text" name="department" value="${student.department}"></td> </tr> <tr> <td>爱好:</td> <td><input type="text" name="hobby" value="${student.hobby}"></td> </tr> <tr> <td>个人简介:</td> <td><textarea name="intro">${student.intro}</textarea></td> </tr> <tr> <td colspan="2"> <input type="submit" value="保存"> <input type="reset" value="重置"> </td> </tr> </table> </form> </body> </html> ``` stuList.jsp页面代码: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>学生信息列表</title> </head> <body> <h1>学生信息列表</h1> <table border="1"> <tr> <th>学号</th> <th>姓名</th> <th>性别</th> <th>出生日期</th> <th>所在院系</th> <th>爱好</th> <th>个人简介</th> <th>操作</th> </tr> <c:forEach items="${students}" var="student"> <tr> <td>${student.sno}</td> <td>${student.name}</td> <td>${student.sex}</td> <td>${student.birthday}</td> <td>${student.department}</td> <td>${student.hobby}</td> <td>${student.intro}</td> <td> <a href="${pageContext.request.contextPath}/editStu?sno=${student.sno}">编辑</a> <a href="${pageContext.request.contextPath}/delStudent?sno=${student.sno}">删除</a> </td> </tr> </c:forEach> </table> <br> <a href="${pageContext.request.contextPath}/addStu.jsp">添加学生信息</a> </body> </html> ``` 三、Servlet程序 在JavaWeb应用中,我们需要使用Servlet程序来处理HTTP请求和响应。在本例中,我们需要设计四个Servlet程序,分别是SaveStudentServlet、EditStudentServlet、DelStudentServlet和SearchStudentServlet。 SaveStudentServlet用来保存学生信息,EditStudentServlet用来编辑学生信息,DelStudentServlet用来删除学生信息,SearchStudentServlet用来查询学生信息。 SaveStudentServlet代码: ```java public class SaveStudentServlet extends HttpServlet { private static final long serialVersionUID = 1L; private StudentDao studentDao; public SaveStudentServlet() { super(); } public void init() throws ServletException { try { studentDao = new StudentDao(); } catch (Exception e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String sno = request.getParameter("sno"); String name = request.getParameter("name"); String sex = request.getParameter("sex"); String birthday = request.getParameter("birthday"); String department = request.getParameter("department"); String hobby = request.getParameter("hobby"); String intro = request.getParameter("intro"); Student student = new Student(); student.setSno(sno); student.setName(name); student.setSex(sex); student.setBirthday(Date.valueOf(birthday)); student.setDepartment(department); student.setHobby(hobby); student.setIntro(intro); try { studentDao.addStudent(student); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect(request.getContextPath() + "/stuList"); } } ``` EditStudentServlet代码: ```java public class EditStudentServlet extends HttpServlet { private static final long serialVersionUID = 1L; private StudentDao studentDao; public EditStudentServlet() { super(); } public void init() throws ServletException { try { studentDao = new StudentDao(); } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); Student student = null; try { student = studentDao.getStudent(sno); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("student", student); request.getRequestDispatcher("/editStu.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String sno = request.getParameter("sno"); String name = request.getParameter("name"); String sex = request.getParameter("sex"); String birthday = request.getParameter("birthday"); String department = request.getParameter("department"); String hobby = request.getParameter("hobby"); String intro = request.getParameter("intro"); Student student = new Student(); student.setSno(sno); student.setName(name); student.setSex(sex); student.setBirthday(Date.valueOf(birthday)); student.setDepartment(department); student.setHobby(hobby); student.setIntro(intro); try { studentDao.updateStudent(student); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect(request.getContextPath() + "/stuList"); } } ``` DelStudentServlet代码: ```java public class DelStudentServlet extends HttpServlet { private static final long serialVersionUID = 1L; private StudentDao studentDao; public DelStudentServlet() { super(); } public void init() throws ServletException { try { studentDao = new StudentDao(); } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sno = request.getParameter("sno"); try { studentDao.delStudent(sno); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect(request.getContextPath() + "/stuList"); } } ``` SearchStudentServlet代码: ```java public class SearchStudentServlet extends HttpServlet { private static final long serialVersionUID = 1L; private StudentDao studentDao; public SearchStudentServlet() { super(); } public void init() throws ServletException { try { studentDao = new StudentDao(); } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String keyword = request.getParameter("keyword"); List<Student> students = null; try { students = studentDao.searchStudent(keyword); } catch (Exception e) { e.printStackTrace(); } request.setAttribute("students", students); request.getRequestDispatcher("/stuList.jsp").forward(request, response); } } ``` 四、Filter过滤器 在JavaWeb应用中,我们需要使用Filter过滤器来对HTTP请求和响应进行过滤处理。在本例中,我们需要使用Filter过滤器来解决POST提交方式时的中文乱码问题。 Filter过滤器代码: ```java public class EncodingFilter implements Filter { private String encoding = "UTF-8"; public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); filterChain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { String encodingParam = filterConfig.getInitParameter("encoding"); if (encodingParam != null) { encoding = encodingParam; } } public void destroy() { } } ``` 在web.xml文件中配置Filter过滤器: ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>com.example.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 以上就是本例中JavaWeb应用的实现,包括C3P0连接池的配置、JSP页面的设计、Servlet程序的编写以及Filter过滤器的使用。

相关推荐

最新推荐

recommend-type

javaweb中mysql数据库连接步骤方法及其实例

这一步使得Java程序能够识别并使用MySQL提供的数据库连接接口。例如:`Class.forName("com.mysql.jdbc.Driver")`。 3. **建立连接**:使用`DriverManager.getConnection()`方法创建数据库连接。需要提供数据库URL、...
recommend-type

javaee 实验报告 实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用

实验一 JSP+Servlet+Javabean+jdbc-基于MVC模式的数据库的应用 实验二 JSF+JPA实现用户注册 实验三 struts+spring+hibernate框架访问数据库的应用 实验四 使用WebService和EJBean访问数据库的应用
recommend-type

JavaWeb 中Cookie实现记住密码的功能示例

cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。Cookie的目的就是为用户带来方便,为网站带来增值。这篇文章主要介绍了JavaWeb 中Cookie实现记住密码的功能示例,需要的朋友可以参考下
recommend-type

JavaWeb JDBC + MySql 通讯录实现简单的增删改查功能案例详解

主要介绍了JavaWeb JDBC + MySql 通讯录实现简单的增删改查功能,结合具体案例形式详细分析了JavaWeb JDBC + MySql数据库连接、增删改查等相关操作技巧与注意事项,需要的朋友可以参考下
recommend-type

JavaWeb使用Cookie模拟实现自动登录功能(不需用户名和密码)

总之,JavaWeb中利用Cookie实现自动登录的关键在于创建和管理Cookie,以及在用户访问时正确读取和验证Cookie。这个简单示例展示了基本的流程,但在实际开发中还需要考虑更多的安全性和用户体验因素。希望通过这个...
recommend-type

BSC绩效考核指标汇总 (2).docx

BSC(Balanced Scorecard,平衡计分卡)是一种战略绩效管理系统,它将企业的绩效评估从传统的财务维度扩展到非财务领域,以提供更全面、深入的业绩衡量。在提供的文档中,BSC绩效考核指标主要分为两大类:财务类和客户类。 1. 财务类指标: - 部门费用的实际与预算比较:如项目研究开发费用、课题费用、招聘费用、培训费用和新产品研发费用,均通过实际支出与计划预算的百分比来衡量,这反映了部门在成本控制上的效率。 - 经营利润指标:如承保利润、赔付率和理赔统计,这些涉及保险公司的核心盈利能力和风险管理水平。 - 人力成本和保费收益:如人力成本与计划的比例,以及标准保费、附加佣金、续期推动费用等与预算的对比,评估业务运营和盈利能力。 - 财务效率:包括管理费用、销售费用和投资回报率,如净投资收益率、销售目标达成率等,反映公司的财务健康状况和经营效率。 2. 客户类指标: - 客户满意度:通过包装水平客户满意度调研,了解产品和服务的质量和客户体验。 - 市场表现:通过市场销售月报和市场份额,衡量公司在市场中的竞争地位和销售业绩。 - 服务指标:如新契约标保完成度、续保率和出租率,体现客户服务质量和客户忠诚度。 - 品牌和市场知名度:通过问卷调查、公众媒体反馈和总公司级评价来评估品牌影响力和市场认知度。 BSC绩效考核指标旨在确保企业的战略目标与财务和非财务目标的平衡,通过量化这些关键指标,帮助管理层做出决策,优化资源配置,并驱动组织的整体业绩提升。同时,这份指标汇总文档强调了财务稳健性和客户满意度的重要性,体现了现代企业对多维度绩效管理的重视。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【进阶】Flask中的会话与用户管理

![python网络编程合集](https://media.geeksforgeeks.org/wp-content/uploads/20201021201514/pythonrequests.PNG) # 2.1 用户注册和登录 ### 2.1.1 用户注册表单的设计和验证 用户注册表单是用户创建帐户的第一步,因此至关重要。它应该简单易用,同时收集必要的用户信息。 * **字段设计:**表单应包含必要的字段,如用户名、电子邮件和密码。 * **验证:**表单应验证字段的格式和有效性,例如电子邮件地址的格式和密码的强度。 * **错误处理:**表单应优雅地处理验证错误,并提供清晰的错误消
recommend-type

卷积神经网络实现手势识别程序

卷积神经网络(Convolutional Neural Network, CNN)在手势识别中是一种非常有效的机器学习模型。CNN特别适用于处理图像数据,因为它能够自动提取和学习局部特征,这对于像手势这样的空间模式识别非常重要。以下是使用CNN实现手势识别的基本步骤: 1. **输入数据准备**:首先,你需要收集或获取一组带有标签的手势图像,作为训练和测试数据集。 2. **数据预处理**:对图像进行标准化、裁剪、大小调整等操作,以便于网络输入。 3. **卷积层(Convolutional Layer)**:这是CNN的核心部分,通过一系列可学习的滤波器(卷积核)对输入图像进行卷积,以
recommend-type

BSC资料.pdf

"BSC资料.pdf" 战略地图是一种战略管理工具,它帮助企业将战略目标可视化,确保所有部门和员工的工作都与公司的整体战略方向保持一致。战略地图的核心内容包括四个相互关联的视角:财务、客户、内部流程和学习与成长。 1. **财务视角**:这是战略地图的最终目标,通常表现为股东价值的提升。例如,股东期望五年后的销售收入达到五亿元,而目前只有一亿元,那么四亿元的差距就是企业的总体目标。 2. **客户视角**:为了实现财务目标,需要明确客户价值主张。企业可以通过提供最低总成本、产品创新、全面解决方案或系统锁定等方式吸引和保留客户,以实现销售额的增长。 3. **内部流程视角**:确定关键流程以支持客户价值主张和财务目标的实现。主要流程可能包括运营管理、客户管理、创新和社会责任等,每个流程都需要有明确的短期、中期和长期目标。 4. **学习与成长视角**:评估和提升企业的人力资本、信息资本和组织资本,确保这些无形资产能够支持内部流程的优化和战略目标的达成。 绘制战略地图的六个步骤: 1. **确定股东价值差距**:识别与股东期望之间的差距。 2. **调整客户价值主张**:分析客户并调整策略以满足他们的需求。 3. **设定价值提升时间表**:规划各阶段的目标以逐步缩小差距。 4. **确定战略主题**:识别关键内部流程并设定目标。 5. **提升战略准备度**:评估并提升无形资产的战略准备度。 6. **制定行动方案**:根据战略地图制定具体行动计划,分配资源和预算。 战略地图的有效性主要取决于两个要素: 1. **KPI的数量及分布比例**:一个有效的战略地图通常包含20个左右的指标,且在四个视角之间有均衡的分布,如财务20%,客户20%,内部流程40%。 2. **KPI的性质比例**:指标应涵盖财务、客户、内部流程和学习与成长等各个方面,以全面反映组织的绩效。 战略地图不仅帮助管理层清晰传达战略意图,也使员工能更好地理解自己的工作如何对公司整体目标产生贡献,从而提高执行力和组织协同性。