Web基础之Servlet+JDBC+JSP项目实战记录(一)
一、项目说明:
通过前面的学习,我们已经对Servlet有了一定的了解;接下来我们要结合数据库和JSP技术一步一步完成一个小型的动态web服务工程;
二、需求分析:
结合JDBC和Servlet以及JSP技术,实现对新增班级信息的功能;并要求显示新增加的班级;
三、项目思路分析:
1、安装数据库,新建班级表(字段:班级cid和班级名称cname)
2、由于一张表对应一个相应的实体;所以在Ecplise中新建一个JavaBean(ClassInfoBean)类;用来和数据库中班级表相对应;
3、加载数据库驱动,连接数据库;
4、前台界面编写
5、逻辑实现
四、项目原代码:
项目整体架构:
数据库表的建立:
ClassInfoBean类:
package com.huaxin.bean;public class ClassInfoBean {/*** 属性和数据库中的字段相对应*/private Integer cid;private String cname;public ClassInfoBean() {}public Integer getCid() {return cid;}public void setCid(Integer cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}
}
数据库驱动类加载以及定义操作类:
package com.huaxin.dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;import com.huaxin.bean.ClassInfoBean;public class ClassInfoDao {static {// 加载数据库驱动try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public void addClassInfo(ClassInfoBean bean) {Connection conn = null;Statement stmt = null;try {// 获取数据库连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentsystem?useUnicode=true&characterEncoding=UTF-8","root", "zhou");// 整理一条SQL语句String sql = "INSERT INTO class_info (cname) VALUES ('"+ bean.getCname() + "')";// 创建SQL执行对象stmt = conn.createStatement();// 执行sql语句int row = stmt.executeUpdate(sql);if (row != 1) {throw new RuntimeException("新增班级失败!");}} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}}}public List<ClassInfoBean> findAll() {Connection conn = null;Statement stmt = null;List<ClassInfoBean> classList= new ArrayList<ClassInfoBean>();try {// 获取连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentsystem?useUnicode=true&characterEncoding=UTF-8","root", "zhou");// 整理一条SQL语句String sql = "select cid,cname from class_info";// 创建执行sql的对象stmt = conn.createStatement();//执行sql语句ResultSet rs =stmt.executeQuery(sql);//遍历结果集while(rs.next()){int cid =rs.getInt("cid");String cname=rs.getString("cname");ClassInfoBean bean = new ClassInfoBean();bean.setCid(cid);bean.setCname(cname);classList.add(bean);}} catch (SQLException e) {e.printStackTrace();}return classList;}}

前台页面用JSP书写(JSP是实现动态页面效果的技术之一,因为JSP里面可以嵌入Java代码;还记得Request作用域吗?我们首先需要将查询出来的结果保存到Request作用域中。然后通过在服务器端执行JSP后生成响应正文给客户端;这里需要明白的是,JSP里面的Java代码是在服务器端执行完毕后,才通过响应正文到达客户端;平时我们自己写得html页面访问的是本地的资源,就相当于在本地打开了一份Word文档;JSP这部分后面会有详解;)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ page import ="com.huaxin.bean.ClassInfoBean" %>
<%@ page import ="java.util.List" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>班级信息界面</title>
<style type="text/css">
th{text-align: center;
}
td{text-align: center;
}
</style>
</head>
<body><div style="margin:0 auto;margin-top: 40px;">
<form action="classInfoReq" method="POST">
<center>
<table width="40%"; border="1"; bgcolor="#FFFFC6">
<caption style="margin-bottom: 20px">新增班级信息</caption>
<tr><td >班级名称:</td><td><input type="text" name="className"></td></tr>
<tr><td><input type="reset" value="重置"></td><td><input type="submit" value="确定"></td></tr>
</table>
</center>
</form>
</div><div style="margin:0 auto;margin-top: 40px;">
<center>
<table  width="40%"; border="1"; bgcolor="#FFFFC6">
<caption style="margin-bottom: 20px">班级信息列表</caption>
<tr><th>班级序号</th><th>班级名称</th></tr>
<% List<ClassInfoBean> classInfo=(List<ClassInfoBean>)request.getAttribute("classInfo");if(classInfo!=null && !classInfo.isEmpty()){for(ClassInfoBean classes : classInfo){%>         <tr><td><%=classes.getCid() %></td><td><%=classes.getCname()%></td></tr>
<% }}
%>
</table>
</center>
</div>
</body>
</html>

Servlet类处理请求:
package com.huaxin.servlet;import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.huaxin.bean.ClassInfoBean;
import com.huaxin.dao.ClassInfoDao;public class ClassInfoServlet extends HttpServlet{private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {this.doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置编码,防止请求乱码req.setCharacterEncoding("UTF-8");//获取参数String className=req.getParameter("className");//创建ClassInfoBean对象保存信息ClassInfoBean bean =new ClassInfoBean();bean.setCname(className);//创建数据库操作对象ClassInfoDao dao =new ClassInfoDao();//新增班级信息到数据库dao.addClassInfo(bean);//查询所有班级信息List<ClassInfoBean> classInfo=dao.findAll();//保存查询的班级信息  req.setAttribute("classInfo", classInfo);//转发请求req.getRequestDispatcher("/classInfo.jsp").forward(req, resp);}
}

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>JDBC</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>classInfo</servlet-name><servlet-class>com.huaxin.servlet.ClassInfoServlet</servlet-class></servlet><servlet-mapping><servlet-name>classInfo</servlet-name><url-pattern>/classInfoReq</url-pattern></servlet-mapping>
</web-app>

五、项目运行效果:
注意地址栏中的后缀是.jsp而不是html
注意地址栏中地址的变化:

六、总结

1.通过这个小项目终于把所有学习的东西串起来了;知道了前台如何和后台数据库打交道了;
2.对数据库表和实体的映射有了更深的理解;
3.由于第一次使用JSP感觉好神奇;JSP里面原来可以内嵌Java代码;这也是动态WEB工程的特色;可以根据不同的请求得到不同的结果;不像我们以前写的html界面;这种动态的感觉很高大上啊;
共勉!

Web基础之Servlet+JDBC+JSP项目实战记录(一)相关推荐

  1. Web基础(从入门到项目实战)

    文章目录 一 .知识急救箱 1.知识框架 a. HTML 内容元素 表单元素 功能元素 其他元素 b. CSS CSS选择器 CSS文本样式 CSS单位与颜色值 CSS字体与文本.段落样式控制 背景颜 ...

  2. 零基础学习嵌入式入门以及项目实战开发【手把手教+国内独家+原创】

    零基础学习嵌入式入门以及项目实战开发[手把手教+国内独家+原创] 独家拥有,绝对经典                            创 科 之 龙 嵌入式开发经典系列教程 [第一期] 主讲人: ...

  3. request、response揭秘(备java基础,servlet,jsp,javaee)-任亮-专题视频课程

    request.response揭秘(备java基础,servlet,jsp,javaee)-3658人已学习 课程介绍         掌握Request对象的作用,期属性,response特点. ...

  4. Servlet+jdbc+jsp增删改查

    Servlet+jdbc+jsp增删改查 目录 Servlet 1. 新建一个工程名为servletStudy 2. tomcat xml配置 3. servlet类 User类 Function类 ...

  5. 【创科之龙】零基础学习嵌入式开发以及项目实战开发【第二期视频】

    [创科之龙]零基础学习嵌入式开发以及项目实战开发[学习交流零基础火热进行ing] 大家好,我是aiku,上期的项目学习资料在电子发烧友论坛上分享,大家觉得都很好. 在这里我首先要感谢电子发烧友给我们的 ...

  6. 【网络通信 -- WebRTC】项目实战记录 -- Chrome 启动参数总结

    [网络通信 -- WebRTC]项目实战记录 -- Chrome 启动参数总结 1 -- 报告伪分配跟踪.伪跟踪从当前活动的跟踪事件派生. 2 --/prefetch:1 /prefetch:启动各种 ...

  7. 【网络通信 -- SIP 电话】项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试

    [网络通信 -- SIP 电话]项目实战记录 -- SIP 服务器 OPENSIPS 搭建测试与 SIP 客户端 PJSIP 编译安装测试 [1]SIP 服务器 OPENSIPS 搭建 1.1 安装环 ...

  8. python数据分析与挖掘项目实战记录

    python数据挖掘项目实战记录 取自<Python数据分析与挖掘实战>一书,整理各个项目中用到的数据处理方法: 数据预处理方法 建立模型方法 绘制图形 对于分类问题:用模型分类:混淆矩阵 ...

  9. 【网络通信 -- 直播】项目实战记录 -- 弱网模拟工具

    [网络通信 -- 直播]项目实战记录 -- 弱网模拟工具 [1]Windows 系统中弱网模拟工具 Windows 系统中可以使用 Clumsy 工具模拟弱网环境 Lag(延迟),把数据包缓存一段时间 ...

最新文章

  1. 不动的,稳定的,有序的东西就是低熵,相反的就是动的,不稳定的
  2. 07-狄克斯特拉算法
  3. 面试题系列(10):一个大型电商网有大量的图片,加载很慢,你有哪些方法优化这些图片的加载?...
  4. php开发当中遇到的各种问题,PHP项目开发中遇到过的问题
  5. 自定义音乐播放器的歌词显示view
  6. 计算机组老师颁奖词,学校优秀老师颁奖词
  7. 存储崩溃、虚拟磁盘丢失、分区表丢失这些故障如何解决
  8. 因为计算机丢失user32.dll,电脑丢失USER32.dll怎么处理
  9. 启动docker时映射到宿主机时出现 /usr/bin/docker-current: Error response from daemon: driver failed……的解决方案
  10. 安卓模拟器刷小米系统_小米安卓模拟器|小米手游模拟器下载 v1.0.0.8 电脑版_小皮网...
  11. 洛谷题单 算法1-3 暴力枚举
  12. 机器学习,深度学习,环境搭建 #博学谷IT学习技术支持#
  13. 【线下沙龙免费报名】像阿里巴巴一样工作_听干货分享欣赏阿里西溪园区风景
  14. 【三维重建学习之路01】点云ply文件的读写、修改
  15. SpringBoot系统整理|基础篇|黑马视频
  16. Kali实现局域网ARP欺骗和ARP攻击
  17. PVE 安装群晖img文件 non-existent or non-regular file故障解决办法
  18. 后台开发,从基础到高级,有什么好的书籍推荐?
  19. 数据结构学习(C++)——队列应用(事件驱动模拟)
  20. [ctf.show.reverse] BJDCTF2020 encode

热门文章

  1. Day11OSI与TCP/IP协议簇以及物理层
  2. 解决:java.lang.IllegalStateException: Failed to load property source from ‘file:~application.yml
  3. java redis geo_Redis GEO
  4. HTML5七夕情人节表白网页(圣诞雪花飘落) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱心表白
  5. 【尚硅谷-Java学习】scanner.next()和scanner.nextLine()
  6. 《动手学深度学习》(PyTorch版)避坑总结 - 1 【d2lzh_pytorch模块导入方法详解及提示错误的解决方法】
  7. Revit版本对应的.NET框架版本
  8. 火山PC布局器套布局器
  9. 这半年没批版号了,那些手游是怎么通过广电审核这一关并成功上架的?
  10. C++基础知识与开发环境【修订版】