您的位置:首页 > Web前端 > JavaScript

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

2017-05-31 13:41 471 查看
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界面;这种动态的感觉很高大上啊;
共勉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: