Servlet增删改查案例经典实现
- 格式:doc
- 大小:84.00 KB
- 文档页数:10
JDBC+Servlet+JSP的学⽣案例增删改查数据库信息传输到页⾯实现。
先进⾏学⽣信息页⾯展⽰:接⼝IStudentDaopublic interface IStudentDao {/*** 保存操作* @param stu 学⽣对象,封装了需要保存的对象*/void save(Student stu);/*** 删除操作* @param id 被删除学⽣的主键操作*/void delete(Long id);/**** @param id 被更改学⽣的主键值* @param newStu 学⽣新的信息*/void update(Student newStu);/*** 查询指定id的学⽣对象* @param id 被查询学⽣的主键值* @return如果id存在,返回学⽣对象,否则为null*/Student get(Long id);/*** 查询并返回所有学⽣对象* @return如果结果集为空,返回⼀个空的list对象*/List<Student> listall();}IStudentDaoImplpublic class IStudentDaoImpl implements IStudentDao{public void save(Student stu) {String sql ="insert into t_student (name,age) values (?,?)";PreparedStatement ps = null;//贾琏Connection conn = null;try {conn = JDBCUtil.getConn();ps = conn.prepareStatement(sql);//欲ps.setString(1, stu.getName());ps.setInt(2, stu.getAge());ps.executeUpdate();//执⾏} catch (SQLException e) {e.printStackTrace();}JDBCUtil.close(conn, ps, null);//事务}@Overridepublic void delete(Long id) {String sql ="delete from t_student where id = ?";PreparedStatement ps =null;//贾琏Connection conn = null;try {conn = JDBCUtil.getConn();ps =conn.prepareStatement(sql);ps.setLong(1, id);ps.executeUpdate();}JDBCUtil.close(conn, ps, null);}//update t_student set name='xx',age=17 where id=12@Overridepublic void update(Student stu) {String sql="update t_student set name =? ,age=? where id=?"; PreparedStatement ps =null;//贾琏Connection conn =null;try {conn = JDBCUtil.getConn();ps=conn.prepareStatement(sql);ps.setString(1, stu.getName());ps.setInt(2, stu.getAge());ps.setLong(3, stu.getId());ps.executeUpdate();} catch (Exception e) {e.printStackTrace();}JDBCUtil.close(conn, ps, null);}public Student get(Long id) {String sql ="select * from t_student where id=?";PreparedStatement ps =null;//贾琏Connection conn =null;ResultSet rs = null;try {conn = JDBCUtil.getConn();ps = conn.prepareStatement(sql);ps.setLong(1, id);rs= ps.executeQuery();if (rs.next()) {Student stu = new Student();stu.setId(rs.getLong("id"));stu.setName(rs.getString("name"));stu.setAge(rs.getInt("age"));return stu;}} catch (Exception e) {e.printStackTrace();}JDBCUtil.close(conn, ps, rs);return null;}@Overridepublic List<Student> listall() {List<Student> list = new ArrayList<>();String sql ="select * from t_student";PreparedStatement ps = null;Connection conn = null;ResultSet rs =null;try {conn = JDBCUtil.getConn();ps = conn.prepareStatement(sql);rs = ps.executeQuery();while(rs.next()){Student stu = new Student();stu.setId(rs.getLong("id"));stu.setName(rs.getString("name"));stu.setAge(rs.getInt("age"));list.add(stu);}}finally {JDBCUtil.close(conn, ps, rs);}return list;}domain类public class Student {private Long id;private String name;private Integer age;public Student(){}public Student(String name,Integer age){this.age=age;=name;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";}}设计个util类,⽅便维护public class JDBCUtil {private static DataSource ds =null;static{//当JDBCUtil执⾏后,直接加载⾄JVM就⽴即执⾏try {Properties p = new Properties();p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")); ds = DruidDataSourceFactory.createDataSource(p);} catch (Exception e) {e.printStackTrace();}}public static Connection getConn(){try {return ds.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}public static void close(Connection conn,Statement st,ResultSet rs){try {if (rs!=null) {rs.close();}} catch (Exception e) {}finally {try {if (st!=null) {st.close();}} catch (Exception e) {e.printStackTrace();}finally {try {if (conn!=null) {conn.close();}} catch (Exception e) {e.printStackTrace();}}}}}在⽹页展⽰全部信息,将数据⽤student传输过去,在前台获取。
最简单的jsp+servlet的增删改查代码package .dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import .model.Admin;public class AdminDao {public List<Admin> getAllAdmin(){ //查询所有信息List<Admin> list = new ArrayList<Admin>(); //创建集合Connection conn = DbHelper.getConnection();String sql = "select * from admin"; //SQL查询语句try {PreparedStatement pst = conn.prepareStatement(sql);ResultSet rst = pst.executeQuery();while (rst.next()) {Admin admin = new Admin();admin.setId(rst.getInt("id")); //得到IDadmin.setUsername(rst.getString("username"));admin.setUserpwd(rst.getString("userpwd"));list.add(admin);}rst.close(); //关闭pst.close(); //关闭} catch (SQLException e) {e.printStackTrace(); //抛出异常}return list; //返回⼀个集合}public boolean addAdmin(Admin admin){ //添加信息String sql = "INSERT INTO `admin`(`id`,`username`,`userpwd`) VALUES (?,?,?)"; //添加的SQL语句Connection conn = DbHelper.getConnection();try {PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, admin.getId());pst.setString(2, admin.getUsername());pst.setString(3, admin.getUserpwd());int count = pst.executeUpdate();pst.close();return count>0?true:false; //是否添加的判断} catch (SQLException e) {e.printStackTrace();}return false;}public boolean updateAdmin(Admin admin){ //修改String sql = "UPDATE `admin` SET `username`=?,`userpwd`=? WHERE `id` = ?"; //修改的SQL语句,根据ID修改Connection conn = DbHelper.getConnection();try {PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, admin.getUsername());pst.setString(2, admin.getUserpwd());pst.setInt(3, admin.getId()); //根据的IDint count = pst.executeUpdate();pst.close(); //关闭return count>0?true:false; //是否修改的判断} catch (SQLException e) {e.printStackTrace();}return false;}public boolean deleteAdmin(int id){ //删除String sql = "delete from admin where id = ?"; //删除的SQL语句,根据ID删除Connection conn = DbHelper.getConnection();try {PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, id);int count = pst.executeUpdate();pst.close();return count>0?true:false; //是否删除的判断} catch (SQLException e) {e.printStackTrace();}return false;}public Admin selectAdminById(int id){ //根据ID进⾏查询Connection conn = DbHelper.getConnection();String sql = "select * from admin where id = "+id;Admin admin = null;try {PreparedStatement pst = conn.prepareStatement(sql);ResultSet rst = pst.executeQuery();while (rst.next()) {admin = new Admin();admin.setId(rst.getInt("id"));admin.setUsername(rst.getString("username"));admin.setUserpwd(rst.getString("userpwd"));}rst.close();pst.close();} catch (SQLException e) {e.printStackTrace();}return admin; //返回}}package .dao;import java.sql.Connection;import java.sql.DriverManager;/*** 连接数据库* @author画船听⾬眠**/public class DbHelper {private static String url = "jdbc:mysql://localhost:3306/admin"; //数据库地址private static String userName = "root"; //数据库⽤户名private static String passWord = "359129127"; //数据库密码private static Connection conn = null;private DbHelper(){}public static Connection getConnection(){if(null == conn){try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(url, userName, passWord);} catch (Exception e) {e.printStackTrace();}}return conn;}public static void main(String[] args) { //测试数据库是否连通System.err.println(getConnection());}}package .model;import java.io.Serializable;public class Admin implements Serializable{ //数据封装类private static final long serialVersionUID = 1L;private int id;private String username;private String userpwd;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpwd() {return userpwd;}public void setUserpwd(String userpwd) {erpwd = userpwd;}}package .servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import .dao.AdminDao;import .model.Admin;public class AddServlet 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 {String username = req.getParameter("username");String userpwd = req.getParameter("userpwd");Admin admin = new Admin();admin.setUsername(new String(username.getBytes("ISO-8859-1"),"UTF-8")); //转值,中⽂需要转换为utf-8 admin.setUserpwd(new String(userpwd.getBytes("ISO-8859-1"),"UTF-8"));AdminDao dao = new AdminDao();dao.addAdmin(admin);req.getRequestDispatcher("ShowServlet").forward(req, resp);}}package .servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import .dao.AdminDao;public class DeleteServlet 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 {String idStr = req.getParameter("id"); //删除数据的ID,根据ID删除if(idStr != null && !idStr.equals("")){int id = Integer.valueOf(idStr);AdminDao dao = new AdminDao();dao.deleteAdmin(id);}req.getRequestDispatcher("ShowServlet").forward(req, resp);}}package .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 .dao.AdminDao;import .model.Admin;public class ShowServlet 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 {AdminDao dao = new AdminDao();List<Admin> list = dao.getAllAdmin();req.setAttribute("list", list);req.getRequestDispatcher("index.jsp").forward(req, resp);}}package .servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import .dao.AdminDao;import .model.Admin;public class UpdateServlet extends HttpServlet{ //修改private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //查询到选中ID的值所对应的数据 String idStr = req.getParameter("id");if(idStr != null && !idStr.equals("")){int id = Integer.valueOf(idStr);AdminDao dao = new AdminDao();Admin admin = dao.selectAdminById(id);req.setAttribute("admin", admin);}req.getRequestDispatcher("update.jsp").forward(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //根据此ID对数据的值进⾏修改 String username = req.getParameter("username");String userpwd = req.getParameter("userpwd");String idStr = req.getParameter("id");Admin admin = new Admin();admin.setId(Integer.valueOf(idStr));admin.setUsername(new String(username.getBytes("ISO-8859-1"),"UTF-8")); admin.setUserpwd(new String(userpwd.getBytes("ISO-8859-1"),"UTF-8")); AdminDao dao = new AdminDao();dao.updateAdmin(admin);req.getRequestDispatcher("ShowServlet").forward(req, resp);}}<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>添加</title><link rel="stylesheet" href="css/index.css" type="text/css" /></head><body><form action="AddServlet" method="post"><table border="1" class="t1"><td colspan="2"><h1>添加管理员</h1></td></tr><tr><td>管理员帐号:</td><td><input type="text" name="username"/></td></tr><tr><td>管理员密码:</td><td><input type="password" name="userpwd"/></td></tr><tr><td colspan="2"><input type="submit" value="提交"/><input type="reset" value="清空"/></td></tr></table></form></body></html><%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%@ taglib prefix="c" uri="/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>显⽰</title><style type="text/css">table {border: 1px solid pink;margin: 0 auto;}td{width: 150px;border: 1px solid pink;text-align: center;}</style></head><body><table><tr><td>编号</td><td>帐号</td><td>密码</td><td>操作</td></tr><c:forEach items="${list}" var="item"><tr><td>${item.id }</td><td>${ername }</td><td>${erpwd }</td><td><a href="DeleteServlet?id=${item.id }">删除</a>|<a href="UpdateServlet?id=${item.id }">修改</a></td> </tr></c:forEach><tr><td colspan="6" style="text-align: left;"><a href="add.jsp">添加管理员</a></td></tr></table></body></html><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>修改</title><link rel="stylesheet" href="css/index.css" type="text/css" /></head><body><form action="UpdateServlet" method="post"><table border="1" class="t1"><tr><td colspan="2"><h1>修改管理员信息</h1></td></tr><tr><td>编号:</td><td><input type="text" name="id" value="${admin.id}" readonly="readonly"/></td></tr><tr><td>管理员帐号:</td><td><input type="text" name="username" value="${ername}"/></td></tr><tr><td>管理员密码:</td><td><input type="text" name="userpwd" value="${erpwd}"/></td></tr><tr><td colspan="2"><input type="submit" value="提交"/><input type="button" value="返回" onclick="history.go(-1)"/></td></tr></table></form></body></html>@CHARSET "UTF-8";table.t1 {margin-top:10px;margin-left:20px;margin-right:20px;margin-bottom:5px;#background-color: #FFF;#background:#EEF4F9;#border: none;border: 1;#color:#003755;border-collapse:collapse;font: 14px "宋体";text-align: center;}table.t1 th{background:#7CB8E2;color:#fff;padding:6px 4px;text-align:center;}table.t1 td{background:#C7DDEE none repeat-x scroll center left;color:#000;padding:4px 2px;}table.t1 a{text-decoration:none;height:1em;}table.t1 a:link, table.t1 a:visited{color:#3366CC;}table.t1 a:hover{color:#B50000;text-decoration:underline;}最简单的jsp+servlet的增删改查代码。
jsp+servlet+jdbc实现对数据库的增删改查⼀、JSP和Servlet的简单介绍:1、Servlet和JSP简介: Java开发Web应⽤程序时⽤到的技术主要有两种,即Servlet和JSP,Servlet是在服务器端执⾏的Java程序,⼀个被称为Servlet容器的程序(其实就是服务器)负责执⾏Java程序,⽽JSP(Java Server Page)则是⼀个页⾯,由JSP容器负责执⾏。
2、Servlet和JSP的区别:Servlet以Java程序为主,输出HTML代码时需要使⽤out.println函数,也就是说Java中内嵌HTML;⽽JSP则以HTML页⾯为主,需要写Java代码时则在页⾯中直接插⼊Java代码,即HTML中内嵌Java。
3、MVC模型MVC模型就是将数据、逻辑处理、⽤户界⾯分离的⼀种⽅法。
1)、M(Model,模型):⽤于数据处理、逻辑处理2)、V(View,视图):⽤于显⽰⽤户界⾯3)、C(Controller,控制器):根据客户端的请求控制逻辑⾛向和画⾯⽽在Java中,MVC这三个部分则分别对应于 JavaBeans、JSP和Servlet1)、M = JavaBeans:⽤于传递数据,拥有与数据相关的逻辑处理2)、V = JSP:从Model接收数据并⽣成HTML3)、C = Servlet:接收HTTP请求并控制Model和View⼆、代码演⽰,实现了book的添加删除和修改功能1、环境的配置myeclipse+tomcat+MySQL2、Book中bean类:提供字段属性,并提供get/set⽅法package example.bean.book;public class Book {// 编号private int id;// 图书名称private String name;// 价格private double price;// 数量private int bookCount;// 作者private String author;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getBookCount() {return bookCount;}public void setBookCount(int bookCount) {this.bookCount = bookCount;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}}3、Servlet类1)、FindServlet.javapackage example.servlet.book;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import example.bean.book.Book;//导⼊包下的Book类/*** Servlet implementation class FindServlet*/public class FindServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse* response)*/protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {try {// 加载数据库驱动,注册到驱动管理器Class.forName("com.mysql.jdbc.Driver");// 数据库连接字符串String url = "jdbc:mysql://localhost:3306/db_book?useUnicode=true&characterEncoding=utf-8";// 数据库⽤户名String username = "root";// 数据库密码String password = "";// 创建Connection连接Connection conn = DriverManager.getConnection(url, username,password);// 添加图书信息的SQL语句String sql = "select * from tb_books";// 获取StatementStatement statement = conn.createStatement();ResultSet resultSet = statement.executeQuery(sql);List<Book> list = new ArrayList<Book>();while (resultSet.next()) {Book book = new Book();book.setId(resultSet.getInt("id"));book.setName(resultSet.getString("name"));book.setPrice(resultSet.getDouble("price"));book.setBookCount(resultSet.getInt("bookCount"));book.setAuthor(resultSet.getString("author"));list.add(book);}request.setAttribute("list", list);resultSet.close();statement.close();conn.close();} catch (Exception e) {e.printStackTrace();}request.getRequestDispatcher("book_list.jsp").forward(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse* response)*/protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}2)、UpdateServlet.java类package example.servlet.book;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class UpdateServlet*/public class UpdateServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response)*/protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {int id = Integer.valueOf(request.getParameter("id"));int bookCount = Integer.valueOf(request.getParameter("bookCount"));try {// 加载数据库驱动,注册到驱动管理器Class.forName("com.mysql.jdbc.Driver");// 数据库连接字符串String url = "jdbc:mysql://localhost:3306/db_book";// 数据库⽤户名String username = "root";// 数据库密码String password = "";// 创建Connection连接Connection conn = DriverManager.getConnection(url, username,password);// 更新SQL语句String sql = "update tb_books set bookcount=? where id=?";// 获取PreparedStatementPreparedStatement ps = conn.prepareStatement(sql);// 对SQL语句中的第⼀个参数赋值ps.setInt(1, bookCount);// 对SQL语句中的第⼆个参数赋值ps.setInt(2, id);// 执⾏更新操作ps.executeUpdate();// 关闭PreparedStatementps.close();// 关闭Connectionconn.close();} catch (Exception e) {e.printStackTrace();}// 重定向到FindServletresponse.sendRedirect("FindServlet");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response)*/protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}3)、DeleteServlet类package example.servlet.book;import java.io.IOException;import java.sql.Connection;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import example.dao.book.BookJdbcDao;import example.dao.book.ConnectionFactory;/*** Servlet implementation class DeleteServlet*/public class DeleteServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response)*/protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {int id = Integer.valueOf(request.getParameter("id"));try {//// 加载数据库驱动,注册到驱动管理器// Class.forName("com.mysql.jdbc.Driver");//// 数据库连接字符串// String url = "jdbc:mysql://localhost:3306/db_book";//// 数据库⽤户名// String username = "root";//// 数据库密码// String password = "";//// 创建Connection连接// Connection conn = DriverManager.getConnection(url, username,// password);//// 删除图书信息的SQL语句// String sql = "delete from tb_books where id=?";//// 获取PreparedStatement// PreparedStatement ps = conn.prepareStatement(sql);//// 对SQL语句中的第⼀个占位符赋值// ps.setInt(1, id);//// 执⾏更新操作// ps.executeUpdate();//// 关闭PreparedStatement// ps.close();//// 关闭Connection// conn.close();BookJdbcDao bookDao=new BookJdbcDao();Connection conn=ConnectionFactory.getInstance().getConnection();bookDao.delete(conn,id);} catch (Exception e) {e.printStackTrace();}// 重定向到FindServletresponse.sendRedirect("FindServlet");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse* response)*/protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}4、servlet访问url映射配置: 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到⼀个URL地址上,这个⼯作在web.xml⽂件中使⽤<servlet>元素和<servlet-mapping>元素完成,<servlet>元素⽤于注册Servlet,它包含有两个主要的⼦元素:<servlet-name>和<servlet-class>,分别⽤于设置Servlet的注册名称和Servlet的完整类名。
S2SH的增删改查的实现第一步通过逆向工程得到实体类和Dao类实体类点击红色方框中的选项点击红色方框左边的展开标识右键单击TABLE下的datas点击红色方框中选项点击Browse选择项目和创建实体类被放的包,并选中相应的选项,点击Next点击Next点击FinishDao类点击红色方框中的选项点击红色方框左边的展开标识右键单击TABLE下的datas点击红色方框中选项包名改成com.beijing.dao,选择相应选项,点击Next点击Next点击Finish选中dao,用快捷键Ctrl+Shift+O导入实体类的包第二步在applicationContext.xml中添加数据源节点左键连击点击Source右键单击选中红色方框的选项,添加数据源点击FinishapplicationContext.xml代码如下<?xml version="1.0"encoding="UTF-8"?> <beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.0.xsd"><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property><property name="url"value="jdbc:sqlserver://localhost:1433"></property><property name="username" value="sa"></property> </bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean "><property name="dataSource" ref="dataSource"></property><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><bean id="DatasDAO"class="com.beijing.dao.DatasDAO"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean></beans>第三步用hibernate提供的方法进行增删改查注意:将dao方法里的一些不用的方法删除留下的方法如下:package com.beijing.dao;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.LockMode;import org.hibernate.Query;import org.hibernate.Session;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.ApplicationContext;import org.springframework.dao.DataAccessResourceFailureException; importorg.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository;import com.beijing.pojo.Datas;public class DatasDAO extends HibernateDaoSupport {private static final Logger log= LoggerFactory.getLogger(DatasDAO.class);//保存的方法public void save(Datas transientInstance) {log.debug("saving Datas instance");try {getHibernateTemplate().save(transientInstance);log.debug("save successful");} catch (RuntimeException re) {log.error("save failed", re);throw re;}}//删除的方法public void delete(Datas persistentInstance) {log.debug("deleting Datas instance");try {getHibernateTemplate().delete(persistentInstance);log.debug("delete successful");} catch (RuntimeException re) {log.error("delete failed", re);throw re;}}//根据实体的主键Id得到实体的方法public Datas findById(ng.Integer id) {log.debug("getting Datas instance with id: " + id);try {Datas instance = (Datas) getHibernateTemplate().get("com.beijing.pojo.Datas", id);return instance;} catch (RuntimeException re) {log.error("get failed", re);throw re;}}//数据全查的方法,不含分页public List findAll() {log.debug("finding all Datas instances");try {String queryString = "from Datas";return getHibernateTemplate().find(queryString);} catch (RuntimeException re) {log.error("find all failed", re);throw re;}}//数据全查的方法,含分页public List findAll(int pageSize, int pageNow) { log.debug("finding all Datas instances");Session session = null;try {String queryString = "from Datas";session = this.getSession();Query query = session.createQuery(queryString);int firstResultIndex = pageSize * (pageNow - 1);query.setFirstResult(firstResultIndex);query.setMaxResults(pageSize);List list = query.list();return list;} catch (RuntimeException re) {log.error("find all failed", re);throw re;} finally {//记得session要关闭,不然导致浏览器加载数据缓慢session.close();}}//修改的方法有两个调用任何都行,区别是第一个返回一个实体,第二个不返回//修改的方法1public Datas merge(Datas detachedInstance) {log.debug("merging Datas instance");try {Datas result = (Datas) getHibernateTemplate().merge(detachedInstance);log.debug("merge successful");return result;} catch (RuntimeException re) {log.error("merge failed", re);throw re;}}//修改的方法2public void update(Datas detachedInstance) {log.debug("merging Datas instance");try {super.getHibernateTemplate().update(detachedInstance);log.debug("merge successful");} catch (RuntimeException re) {log.error("merge failed", re);throw re;}}//得到总共多少条数据的方法public int getCount() {System.out.println("pageCount");Session session = null;int count = 0;try {String queryString = "select count(*) from Datas";session = this.getSession();Query query = session.createQuery(queryString);count = Integer.valueOf(query.uniqueResult().toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {//记得session要关闭,不然导致浏览器加载数据缓慢session.close();}return count;}//每pageSize个数据,有几页数据public int getPageCount(int count,int pageSize) { int pageCount = count/pageSize;if(count%pageSize > 0) {pageCount++;}return pageCount;}}第四步做一个biz包,也叫业务包,和biz的接口1 bizpackage ;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.beijing.dao.DatasDAO;import com.beijing.pojo.Datas;public class DataBiz implements IDataBiz {private DatasDAO datasDao;//set了datasDao是用来spring注入管理的public void setDatasDao(DatasDAO datasDao) {this.datasDao = datasDao;}//下面也是调用dao增删改查的一些方法public void delete(Datas data) {datasDao.delete(data);}public List find() {return datasDao.findAll();}public void save(Datas d) {datasDao.save(d);}public void update(Datas data) {datasDao.merge(data);}public List find(int pageSize, int nowPage) {return datasDao.findAll(pageSize, nowPage);}public int getCount() {return datasDao.getCount();}public int getPageCount(int count,int pageSize) { // TODO Auto-generated method stubreturn datasDao.getPageCount(count,pageSize);}public Datas findById(int id) {// TODO Auto-generated method stubreturn datasDao.findById(id);}}2 IBizpackage ;import java.util.List;import com.beijing.pojo.Datas;public interface IDataBiz {//action调用的是这个接口public void save(Datas d);public void delete(Datas daId);public void update(Datas data);public Datas findById(int id);public List find();public int getCount();public List find(int pageSize, int nowPage);public int getPageCount(int count,int pageSize);}第五步做一个action写入调用biz增删改查的方法代码如下:package com.beijing.ac;import java.util.Iterator;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import .IDataBiz;import com.beijing.pojo.Datas;import com.opensymphony.xwork2.ActionSupport;public class DataAction extends ActionSupport { //biz接口的声明,用来调用bizIDataBiz idata;//这些对象set和get后,都会被hibernate自动放进request里private Integer daId;private String daName;private String daAge;private List<Datas> datas;private Datas data;private int nowPage = 1;private int pageSize = 5;private int pageCount;private int count;public int getCount() {return count;}public void setCount(int count) {this.count = count;}public int getNowPage() {return nowPage;}public void setNowPage(int nowPage) { this.nowPage = nowPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) { this.pageSize = pageSize;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) { this.pageCount = pageCount;}public List<Datas> getDatas() {return datas;}public void setDatas(List<Datas> datas) { this.datas = datas;}public IDataBiz getIdata() {return idata;}public Integer getDaId() {return daId;}public void setDaId(Integer daId) { this.daId = daId;}public String getDaName() {return daName;}public void setDaName(String daName) { this.daName = daName;}public String getDaAge() {return daAge;}public void setDaAge(String daAge) { this.daAge = daAge;}public void setIdata(IDataBiz idata) { this.idata = idata;}public String save(){System.out.println("save");data = new Datas();data.setDaAge(daAge);data.setDaName(daName);idata.save(data);System.out.println("保存成功");return"save";}public String delete(){System.out.println("delete");System.out.println(daId);data = new Datas(daId);idata.delete(data);return"delete";}public String update(){System.out.println("update");data = new Datas(daId,daName, daAge);idata.update(data);return"update";}public String findById(){System.out.println("findById");data= idata.findById(daId);daAge = data.getDaAge();daName = data.getDaName();daId = data.getDaId();return"findById";}public String find(){System.out.println("find");System.out.println(idata);datas = idata.find(pageSize,nowPage);count = idata.getCount();pageCount = idata.getPageCount(count,pageSize);for (Datas data : datas) {System.out.println(data.getDaAge() + " "+ data.getDaName());}return"find";}}第六步在applicationContext.xml添加biz和action的节点,进入注入代码如下:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/bean s/schema/beans/spring-beans-3.0.xsd" ><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"> </property><property name="url" value="jdbc:sqlserver://localhost:1433"></property><property name="username"value="sa"></property> </bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryB ean"><property name="dataSource"ref="dataSource"></property><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><bean id="datasDao" class="com.beijing.dao.DatasDAO"> <property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="idata" class=".DataBiz"><property name="datasDao" ref="datasDao"></property> </bean><bean id="data" class="com.beijing.ac.DataAction"><property name="idata" ref="idata"></property> </bean></beans>第七步在struts.xml中添加action节点代码如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "/dtds/struts-2.1.dtd"><struts><package name="test"extends="struts-default"><action name="data"class="com.beijing.ac.DataAction"><resultname="update"type="redirectAction">/Data_find.action</result> <resultname="findById">/update.jsp</result></action><action name="*_*"class="com.beijing.ac.{1}Action" method="{2}"><resultname="save"type="redirectAction">/Data_find.action</result> <resultname="delete"type="redirectAction">/Data_find.action</result> <resultname="find">/{2}.jsp</result></action></package></struts>注意:之所以用两个action,是想用不同的方法实现action的方法调用第八步find.jsp, ind ex.jsp, save.jsp, update.jsp的实现1 find.jsp代码如下:<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><%@taglib prefix="c"uri="/jsp/jstl/core"%> <%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>================================================<br>全查数据<table align="center"width="80%"><tr><th>年龄</th><th>姓名</th><th>编号</th><th>操作</th></tr><s:iterator value="datas"><tr onmouseover="this.bgColor='green'" onmouseout="this.bgColor='white'" align="center"><td><s:property value="daAge"/></td><td><s:property value="daName"/></td><td><s:property value="daId"/></td><td><ahref="${pageContext.request.contextPath}/Data_delete.action?daId= ${daId}">删除</a></td><td><a href="data!findById.action?daId=${daId}">修改</a></td></tr></s:iterator><tr></tr><tr align="center"><td>共<s:property value="pageCount"/>页</td><td><s:if test="%{nowPage==1}">首页 上一页</s:if><s:else><ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=1">首页</a> <ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=${nowPage-1}">上一页</a> </s:else><s:if test="%{nowPage != pageCount}"><ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=${nowPage+1}">下一页</a> <ahref="${pageContext.request.contextPath}/Data_find.action?nowPage=${pageCount}">末页</a> </s:if><s:else>下一页 末页</s:else></td><td><ahref="${pageContext.request.contextPath}/save.jsp">新增</a></td> </tr></table></body></html>2 index.jsp 代码入戏<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><script type="text/javascript">function indexFind(){document.location="${pageContext.request.contextPath}/Data_fin d.action";}</script><body onload="indexFind()">================================================<br>struts2+spring+hibernate的增删改查</body></html>3 save.jsp 代码如下<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>================================================<br> <div align="center"><form action="Data_save">姓名<input name="daName"type="text"><br>年龄<input name="daAge"type="text"><br>编号<input name="daId"type="text" readonly="readonly"><br><input type="submit"value="提交"></form></div></body></html>4 update.jsp 代码如下<%@page language="java"import="java.util.*"contentType="text/html; charset=gbk"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>================================================<br><div align="center"><form action="Data_save">姓名<input value="${daName}"type="text"><br>年龄<input value="${daAge}"type="text"><br>编号<input value="${daId}"type="text" readonly="readonly"><br><input type="submit"value="提交"></form><s:form action="data!update.action"><s:textfield label="姓名"name="daName"/><br><s:textfield label="年龄"name="daAge"/><br><s:textfield label="编号"name="daId" readonly="true"/><br><s:submit value="提交"></s:submit></s:form></body></html>第九步启动tomcat如下图所示。
MVC模式M:Model,即模型,对于JavaBeanV:View,即试图,对应JSP页面C:Controller,即控制器,对应Servlet1.以下为MVC实现一个简单的增删改查功能1>显示记录2>增加一条记录3>修改一条记录4>删除一条记录程序源代码:M层:模型层1.封装一条信息的所有属性JavaBean.java ,即VO package muta.bean;/*** @author help*封装一条信息的所有属性*/public class JavaBean {private int id;private String name;private String password;private String sex;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {/*** @author help*操作数据库的方法*/public class SqlBean {Connection con;PreparedStatement pre;ResultSet rs;public SqlBean(){try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}try {con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/MyServl et","root","122828");} catch (SQLException e) {e.printStackTrace();}}/*** @author help**插入新的一条记录* @return*/public int getInsert(String sql,JavaBean jBean) {int count =0;try {pre = con.prepareStatement(sql);pre.setString(1,jBean.getName());pre.setString(2,jBean.getPassword());pre.setString(3,jBean.getSex());pre.setInt(4,jBean.getAge());count=pre.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally{try {pre.close();con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return count;}/*** @author help**删除一条记录* @return*/public int getDelete(String sql,int id){int count =0;try {pre = con.prepareStatement(sql);pre.setInt(1, id);count=pre.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally{try {pre.close();con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return count;}/*** @author help**根据ID查询某一条记录* @return*/public JavaBean getSearchById(String sql,int id){JavaBean jBean = new JavaBean();try {pre = con.prepareStatement(sql);pre.setInt(1, id);rs=pre.executeQuery();while(rs.next()){jBean.setId(rs.getInt("id"));jBean.setName(rs.getString("name"));jBean.setPassword(rs.getString("password"));jBean.setSex(rs.getString("sex"));jBean.setAge(rs.getInt("age"));}} catch (SQLException e){e.printStackTrace();}return jBean;}/*** @author help**更新某一条记录* @return*/public int getUpdate(String sql,JavaBean jBean) {int count =0;try {pre = con.prepareStatement(sql);pre.setInt(5,jBean.getId());pre.setString(1,jBean.getName());pre.setString(2,jBean.getPassword());pre.setString(3,jBean.getSex());pre.setInt(4,jBean.getAge());count = pre.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {pre.close();con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return count;}jBean.setAge(rs.getInt("age"));list.add(jBean);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {pre.close();con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return list;}}V层:试图层1.显示记录集的页面 SearchList.jsp<%@page language="java"import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName() +":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>显示记录</title></head><body><center><font color=red size=72>学生信息如下:</font><hr><table border=1bgColor="#ffffff"width="500px" height="100px"><tr><td>ID</td><td>姓名</td><td>密码</td><td>性别</td><td>年龄</td><td><center>操作</center></td></tr><jsp:useBean id="sBean"class="muta.bean.SqlBean"/> <jsp:useBean id="jBean"class="muta.bean.JavaBean"/><%String sql ="select * from student order by id";java.util.List list =sBean.getSearch(sql);for(java.util.Iterator it=list.iterator();it.hasNext();){//获取一个JavaBean对象jBean =(muta.bean.JavaBean)it.next();%><tr><td><%=jBean.getId() %></td><td><%=jBean.getName() %></td><td><%=jBean.getPassword() %></td><td><%=jBean.getSex() %></td><td><%=jBean.getAge() %></td><td><a href="Insert.jsp">增加</a><a href="Delete?id=<%=jBean.getId()%>">删除</a> <ahref="SearchById?id=<%=jBean.getId()%>">更新</a> </td></tr><% }%></table>2.插入页面Insert.jsp<center><font color=red size=72>学生管理页面</font><hr><form action="Insert"method="post"><table border="1"><tr><td>姓名:</td><td><input name ="name"></td></tr><tr><td>密码:</td><td><input type="password"name ="password"></td> </tr><tr><td>性别:</td><td><input type="radio"name ="sex"value="男">男<input type="radio"name ="sex"value="女">女</td><tr><td>年龄:</td><td><input type="text"name ="age"></td> </tr><tr><td colspan="2"><center><input type="submit"value="提交"><input type="reset"value="重置"></center></td></tr></table></form><a href="SearchList.jsp">查询</a></center></body></html>3.更新页面Update.jsp<%@page language="java"import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName() +":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>更新</title></head><body><center><font color=red size=72>学生管理页面</font><hr><form action="Update"method="post""><table border="1"><tr><td>学生ID:</td><td><input name="id"value="<%=request.getAttribute("id") %>" readonly></td></tr><tr><td>学生姓名:</td><td><input name="name"value="<%=request.getAttribute("name") %>"></td> </tr><tr><td>学生密码:</td><td><input type="password"name="password"value="<%=request.getAttribute("password") %>"> </td></tr><tr><td>学生性别:</td><td><input type="radio"name ="sex"value="男"<%=request.getAttribute("man") %>>男<input type="radio"name ="sex"value="女"<%=request.getAttribute("woman") %>>女</td></tr><tr><td>学生年龄:</td><td><input type="text"name="age"value="<%=request.getAttribute("age") %>"></td> </tr><tr><td colspan="2"><center><input type="submit"value="提交"><input type="reset"value="重置"></center>4.出错页面Error.jspC层:控制层—Servlet1.显示记录集的Servlet----SearchById.javapackage muta.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import muta.bean.JavaBean;import muta.bean.SqlBean;public class SearchById extends HttpServlet {private static final long serialVersionUID = 1L;/*** The doDelete method of the servlet. <br>** This method is called when a HTTP delete request is received.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponseresponse)throws ServletException, IOException {doPost(request,response);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");//获取用户IDString sid = request.getParameter("id");int id =Integer.parseInt(sid);String sql ="select * from student where id=?"; SqlBean sBean = new SqlBean();JavaBean jBean = sBean.getSearchById(sql, id);//用户IDrequest.setAttribute("id",jBean.getId());//用户姓名request.setAttribute("name",jBean.getName());//用户密码request.setAttribute("password",jBean.getPassword());//用户性别String sex="";String man="";String woman="";if(jBean.getSex()!=null){sex=jBean.getSex().trim();if(sex.equals("男")){man ="checked";}else{woman ="checked";}}request.setAttribute("man",man);request.setAttribute("woman",woman);//用户年龄request.setAttribute("age",jBean.getAge());//转发request.getRequestDispatcher("Update.jsp").forward(request,2.增加记录的Servlet----Insert.javaprivate static final long serialVersionUID = 1L;/*** The doDelete method of the servlet. <br>** This method is called when a HTTP delete request is received.** @param request the request send by the client to the server* @param response the response send by the server to the client * @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");doPost(request,response);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.* @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");//获取前台页面数据String name =request.getParameter("name");String password =request.getParameter("password");String sex =request.getParameter("sex");String sage = request.getParameter("age");int age =Integer.parseInt(sage);//封装到JavaBean对象中去JavaBean jBean = new JavaBean();jBean.setName(name);jBean.setPassword(password);jBean.setSex(sex);jBean.setAge(age);//调用模型层String sql = "insert into student(name,password,sex,age) values(?,?,?,?)";SqlBean sBean = new SqlBean();int count =sBean.getInsert(sql,jBean);String url="";if(count>0){url="SearchList.jsp";}else{url ="error.jsp";request.setAttribute("error", "ע��");}//转发ת3.更新记录的Servlet----Updated.java/****/private static final long serialVersionUID = 1L;/*** The doDelete method of the servlet. <br>** This method is called when a HTTP delete request is received.** @param request the request send by the client to the server* @param response the response send by the server to the client * @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");//获得前台表单信息String sid = request.getParameter("id");int id =Integer.parseInt(sid);String name =request.getParameter("name");String password =request.getParameter("password");String sex =request.getParameter("sex");String sage = request.getParameter("age");int age =Integer.parseInt(sage);//封装到JavaBean对象中去JavaBean jBean = new JavaBean();jBean.setId(id);jBean.setName(name);jBean.setPassword(password);jBean.setSex(sex);jBean.setAge(age);String sql ="update student set name=?,password=?,sex=?,age=? where id=?";SqlBean sBean = new SqlBean();int count =sBean.getUpdate(sql,jBean);String url="";if(count>0){url="SearchList.jsp";}4.删除记录的Servlet----Delete.javaimport muta.bean.SqlBean;public class Delete extends HttpServlet {private static final long serialVersionUID = 1L;/*** The doDelete method of the servlet. <br>** This method is called when a HTTP delete request is received.** @param request the request send by the client to the server* @param response the response send by the server to the client * @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");doPost(request,response);}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals topost.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");//获取超链接传来的数据String sId = request.getParameter("id");int id =Integer.parseInt(sId);////调用模型层删除方法String sql = "delete from student where id=?";SqlBean sBean = new SqlBean();int count =sBean.getDelete(sql, id);XML文件xsi:schemaLocation="/xml/ns /javaee/xml/ns/javaee/web-app_2_5. xsd"><servlet><servlet-name>Update</servlet-name><servlet-class>muta.servlet.Update</servlet-class ></servlet><servlet><servlet-name>SearchById</servlet-name><servlet-class>muta.servlet.SearchById</servlet-c lass></servlet><servlet><servlet-name>Insert</servlet-name><servlet-class>muta.servlet.Insert</servlet-class ></servlet><servlet><servlet-name>Delete</servlet-name><servlet-class>muta.servlet.Delete</servlet-class ></servlet><servlet-mapping><servlet-name>Update</servlet-name><url-pattern>/Update</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SearchById</servlet-name><url-pattern>/SearchById</url-pattern></servlet-mapping><servlet-mapping><servlet-name>Insert</servlet-name><url-pattern>/Insert</url-pattern></servlet-mapping>。
图书管理系统增删查改jspservlet基础项目BaseDao这是图书管理系统的课后作业增删查改 BaseDaojsp提交到servletBaseDao.java 数据库操作通用类package combook.dao;import java.sql.*;import com.dao.util.ConfigManager;import common.*;public class BaseDao {//数据库操作通用类protected Connection conn;/**定义静态变量接收加载驱动*/private static String driver;/**定义静态变量得到连接*/private static String url;private static String userName;//数据库用户名private static String password;//数据库密码//静态的Connection 对象static{driver=ConfigManager.getInstance().getS tring("driver");url=ConfigManager.getInstance().getStri ng("url");userName=ConfigManager.getInstance().ge tString("userName");password=ConfigManager.getInstance().ge tString("password");}protected ResultSet rs;protected Statement stmt;protected PreparedStatement ps;//获取链接的方法public boolean getConnection(){if(conn!=null){//判断连接对象是否为空return false;}try {Class.forName(driver);//加载驱动//根据url,用户名和密码获取链接获取的是connection对象conn=DriverManager.getConnection(url,us erName,password);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return true;}//增删改的方法子类可以调用这个方法帮助执行sql语句public int execute(Stringsql,Object[]params){try {ps=conn.prepareStatement(sql);//预编译传过来的sql语句if(params!=null){//如果子类传过来的参数不为空的话遍历循环判断使参数兼容for (int i = 0; i < params.length; i++) {//遍历参数数组Object obj=params[i];//参数是Object类型的所以Object先接收然后判断if(obj instanceof String){ps.setString((i+1), (String)obj);//如果该参数是String类型的就强转设置数组的的该位置元素是String类型} else if(obj instanceof Integer){ps.setInt((i+1),(Integer)obj);}else if(obj==null){//这样判断一下因为有图片传入判断不了类型obj="";//赋值为空ps.setString((i+1), (String)obj);//默认设置为String类型}}}//执行sqlint count=ps.executeUpdate();return count;} catch (SQLException e) {e.printStackTrace();return 0;}}//获取结果集的方法public ResultSet excuteSql(String sql,Object[]params){try {rs=ps.executeQuery(sql);for (int i = 0; i < params.length; i++){if(params[i] instanceof String){ps.setString((i+1),(String)params[i]);}else if(params[i] instanceof Integer){ps.setInt((i+1),(Integer)params[i]);}}} catch (SQLException e) {e.printStackTrace();}return rs;}public boolean closeResource(){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();return false;}}if(ps!=null){try {ps.close();} catch (SQLException e) {e.printStackTrace();return false;}}if(conn!=null){try {conn.close();conn=null;} catch (SQLException e) {e.printStackTrace();return false;}}return true;}//方法重载如果需要关闭几个资源就选择哪个方法public void closeResource(Connection conn){if(conn==null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}Dao层接口 --BookDao.javapackage combook.dao;import java.util.List;import combook.dto.Book;import common.dto.PageDto;public interface BookDao {public List<Book> getBooksList(PageDto pagedto)throws Exception;//获得图书集合的方法--所有信息//增加一本图书信息public int insertBooks(Book book)throws Exception;//根据图书编号删除新闻public int delete(int bid)throws Exception;//修改信息 --传入的是图书对象public int update(Book book)throws Exception;//根据图书编号查找该图书//根据图书编号查找该图书public Book query(int bid) throws Exception;public List<Book> query(String bookname) throws Exception;//获得总记录的方法public int getAllRowCount() throws Exception;}BookImpl.java 实现类实现了接口继承了BaseDao.java package combook.dao.impl;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import combook.dao.BaseDao;import combook.dao.BookDao;import combook.dto.Book;import common.dto.PageDto;public class BookImpl extends BaseDao implements BookDao{//1、查询所有信息返回一个带有泛型的集合public List<Book> getNewsList() throws Exception {//定义一个集合集合是对应的要返回出去的泛型集合List<Book> bookList=new ArrayList<Book>();super.getConnection();//获得连接通过父类的方法conn.prepareStatement("select * from news");rs=ps.executeQuery();//返回结果集while(rs.next()){//循环结果集中的数据判断结果集中是否还有下一个内容Book book=new Book();//创建一个实例对象//把结果集中的图书信息封装到图书对象中去book.setBid(rs.getInt("bid"));book.setBookName(rs.getString("bookName "));book.setImage(rs.getString("image"));book.setPrice(Double.parseDouble(rs.get String("b_price")));book.setStock(rs.getInt("stock"));//将图书对象添加到集合中去因为集合是带有图书泛型所以不需要强转直接添加图书对象bookList.add(book);}//调用父类方法释放资源super.closeResource();return bookList;}//获得数据库中所有的图书信息public List<Book> getBooksList(PageDto pagedto) throws Exception {//新建一个带有book泛型的集合List<Book> bookList=new ArrayList<Book>();super.getConnection();//第一步获得与数据库的连接int start=pagedto.getStartIndex();//分页查询开始int end =pagedto.getEndIndex();//分页查询结束//写分页查询的sql语句String sql="select * from (select b.*,rownum rn from books b) where rn>=? and rn<?";ps=conn.prepareStatement(sql);//预编译sql语句ps.setInt(1,start);//设置第一个参数的值ps.setInt(2,end);//设置第二个参数的值//执行查询语句rs=ps.executeQuery();//循环结果集的数据while(rs.next()){//实例化一个图书的对象Book book =new Book();//把结果集中的图书信息封装到图书对象中去book.setBid(rs.getInt("bid"));book.setBookName(rs.getString("bookName "));book.setImage(rs.getString("image"));book.setPrice(Double.parseDouble(rs.get String("b_price")));book.setStock(rs.getInt("stock"));//将图书对象添加到集合中去因为集合是带有图书泛型所以不需要强转直接添加图书对象bookList.add(book);}super.closeResource();return bookList;}//向表中插入新书的方法传入的是图书对象返回影响的行数public int insertBooks(Book book) throws Exception {super.getConnection();//第一步获得与数据库的连接//新建一个参数的数组填充占位符Object params[]=new Object[5];params[0]=book.getBid();params[1]=book.getBookName();params[2]=book.getPrice();params[3]=book.getImage();params[4]=book.getStock();String sql="insert into book values(?,?,?,?,?)";//预编译sql语句ps=conn.prepareStatement(sql);//执行更新数据库的sql语句操作int count=super.execute(sql, params);super.closeResource();return count;}//删除图书的方法根据穿过来的图书idpublic int delete(int bid) throws Exception {super.getConnection();//第一步获得与数据库的连接//填充占位符Object params[]=new Object[1];params[0]=bid;String sql="delete from book where bid=?";//删除的sql语句//预编译sql语句ps=conn.prepareStatement(sql);//调用父类的执行sqlint count=super.execute(sql, params);//释放资源super.closeResource();//返回受影响的行数return count;}//修改图书的方法传入图书的对象public int update(Book book) throws Exception {super.getConnection();//第一步获得与数据库的连接//填充占位符Object params[]=new Object[4];params[0]=book.getBookName();params[1]=book.getPrice();params[2]=book.getImage();params[3]=book.getStock();String sql="update book set bookname=?,b_price=?,image=?,stock=?";ps=conn.prepareStatement(sql);int count=super.execute(sql, params);super.closeResource();return count;}public Book query(int bid) throws Exception{super.getConnection();//第一步获得与数据库的连接Book book=new Book();//填充占位符Object params[]=new Object[1];params[0]=bid;String sql="select * from books where bid=?";conn.prepareStatement(sql);rs=super.excuteSql(sql, params);if(rs.next()){//把结果集中的图书信息封装到图书对象中去book.setBid(rs.getInt("bid"));book.setBookName(rs.getString("bookName "));book.setImage(rs.getString("image"));book.setPrice(rs.getDouble("b_price"));book.setStock(rs.getInt("stock"));}super.closeResource();return book;}public List<Book> query(String bookname) throws Exception {super.getConnection();//第一步获得与数据库的连接//新建一个带有book泛型的集合List<Book> bookList=new ArrayList<Book>();//填充占位符//Object params[]=new Object[1];//params[0]=bookname;String sql="select * from books where bookname like ?";ps=conn.prepareStatement(sql);ps.setString(1, "%"+bookname+"%");//rs=super.excuteSql(sql, params);rs=ps.executeQuery();while(rs.next()){Book book=new Book();//把结果集中的图书信息封装到图书对象中去book.setBid(rs.getInt("bid"));book.setBookName(rs.getString("bookName "));book.setImage(rs.getString("image"));book.setPrice(rs.getDouble("b_price"));book.setStock(rs.getInt("stock"));bookList.add(book);}super.closeResource();return bookList;}public int getAllRowCount() throws Exception {super.getConnection();//获得连接int count=0;//查找到所有记录String sql="select count(*) frombooks";ps=conn.prepareStatement(sql);//预编译sql语句rs=ps.executeQuery();//返回一个结果集if(rs.next()){count=rs.getInt(1);//获得结果集的第一条}super.closeResource();return count;}}用户表UserInfoDao.java 接口package combook.dao;import java.util.List;import combook.dto.Book;import erInfo;import common.dto.PageDto;public interface UserInfoDao {//传入一个用户的对象判断这个对象是否在数据库中存在public int queryObject(UserInfo user) throws Exception;//根据用户名查找该数据库表中有没有重复的用用户public int query(String userName) throws Exception;//增加一个用户信息 --传入一个用户对象public int insertUserInfo(UserInfo user)throws Exception;//修改信息 --传入的是用户对象public int update(UserInfo user)throws Exception;UserInfoDaoImpl实现类package combook.dao.impl;import java.sql.SQLException;import java.util.List;import combook.dao.BaseDao;import erInfoDao;import combook.dto.Book;import erInfo;import common.dto.PageDto;public class UserInfoDaoImpl extends BaseDao implements UserInfoDao {//向用户表中添加一个新的用户信息public int insertUserInfo(UserInfo user) throws Exception {super.getConnection();//第一步获得与数据库的连接//定义数组用于填充占位符Object params[]=new Object[3];params[0]=user.getUserName();params[1]=user.getPassword();params[2]=user.getEmail();//定义一个sql语句向表中插入数据String sql="insert into userInfo values(?,?,?)";//预编译sql语句//ps=conn.prepareStatement(sql);//ps.setString(1, x)//调用父类的执行sql的操作int count=super.execute(sql, params);super.closeResource();return count;}public int update(UserInfo user) throws Exception {return 0;}//传入一个用户名判断这个用户名是否存在返回一个查找的记录public int query(String userName) throws Exception {super.getConnection();//第一步获得与数据库的连接int count=0;String sql="select count(*) from userInfo where userName=?";try {//预编译sqlps=conn.prepareStatement(sql);//用ps填充占位符ps.setString(1, userName);rs=ps.executeQuery();//执行sql返回一个结果集//找到结果集的第一条数据if(rs.next()){count=rs.getInt(1);}} catch (SQLException e1) {e1.printStackTrace();}//释放资源super.closeResource();return count;}public int queryObject(UserInfo user) throws Exception {super.getConnection();//第一步获得与数据库的连接String sql="select count(*) from userInfo where userName=? and passwords=?";//预编译sqlps=conn.prepareStatement(sql);//填充占位符ps.setString(1, user.getUserName());ps.setString(2, user.getPassword());//执行sql语句rs=ps.executeQuery();int count=0;//找到结果集的第一条数据if(rs.next()){count=rs.getInt(1);}super.closeResource();return count;}}数据库当中的表对应的实体类 DTO层package combook.dto;/***图书类**/public class Book {private int bid;//图书编号private String bookName;//图书名字private double price;//图书价格private String image;//图书图片private int stock;//库存public int getBid() {return bid;}public void setBid(int bid) {this.bid = bid;}public String getBookName() {return bookName;}public void setBookName(String bookName) { this.bookName = bookName;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getImage() {return image;}public void setImage(String image) {this.image = image;}public int getStock() {return stock;}public void setStock(int stock) {this.stock = stock;}}用户表的实体类package combook.dto;/**用户类*/public class UserInfo {private String userName;//用户名private String password;//密码private String email;//邮箱public String getUserName() {return userName;}public void setUserName(String userName) { erName = userName;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}注册的servlet的提交地址package combook.servlet;import java.io.IOException;importjava.io.UnsupportedEncodingException; import java.sql.PreparedStatement; import java.sql.SQLException;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse;import combook.dao.BaseDao;import erInfoDao;import erInfoDaoImpl; import erInfo;import erInfoService;importerInfoServiceImpl;public class RegisterServlet extends HttpServlet{/****/private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException{//在地址栏直接敲代码会调用doGetSystem.out.println("进入doGet方法");//调用doPost方法实现代码重用省掉代码try {doPost(request,response);} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request,HttpServletResponse response){System.out.println("进入doPost方法");try {//获得表单提交过来的用户名try {request.setCharacterEncoding("utf-8");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}//设置编码格式解决中文乱码response.setCharacterEncoding("utf-8");StringuserName=request.getParameter("userName") ;//实例化一个用户表数据层的实例UserInfoDao userInfo=newUserInfoDaoImpl();//调用根据传入提交过来的用户名查询获得该用户是否存在返回一个int类型intcount=userInfo.query(userName);if(count>0){//说明该用户存在-跳到错误页面-返回重新注册response.sendRedirect("./jbook/register error.jsp");}else if(count==0){//说明可以进入下一步 --把新注册的用户存到数据库中的用户表中去//实例化用户表的信息UserInfo user=new UserInfo();//封装表单提交过来的表单数据//将提交过来的表单元素值赋值给用户表对象StringuserNames=request.getParameter("userName" );Stringpassword=request.getParameter("password") ;Stringemail=request.getParameter("email");user.setUserName(userNames);user.setPassword(password);user.setEmail(email);//实例化业务逻辑层的操作将数据放到数据库中去intcounts=userInfo.insertUserInfo(user);//将用户名保存在request作用域中进入首页可以用request.setAttribute("userName", userName);response.sendRedirect("./jbook/login.js p");}} catch (Exception e) {e.printStackTrace();}}//初始化方法只会初始化一次public void init(ServletConfig config){ System.out.println("初始化注册提交servlet");}//销毁实例的方法public void destroy(){System.out.println("销毁注册提交servlet");}}登录的jsp提交到这个Servletpackage combook.servlet;import java.io.IOException;importjava.io.UnsupportedEncodingException;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import erInfoDao;import erInfoDaoImpl; import erInfo;public class LoginServlet extends HttpServlet{/****/private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("登录提交进入doGet方法");doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("登录提交进入doPost方法");try {//获得表单提交过来的用户名try {request.setCharacterEncoding("utf-8");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}//设置编码格式解决中文乱码response.setCharacterEncoding("utf-8");StringuserName=request.getParameter("userName") ;Stringpassword=request.getParameter("password") ;//实例化一个用户表数据层的实例UserInfoDao userInfo=new UserInfoDaoImpl();//实例化用户表的信息UserInfo user=new UserInfo();//封装表单提交过来的表单数据//将提交过来的表单元素值赋值给用户表对象user.setUserName(userName);user.setPassword(password);//调用查询该用户对象存在与否的方法intcount=userInfo.queryObject(user);if(count>0){//说明该登录用户存在是合法的用户-跳到图书首页HttpSessionsession=request.getSession();//获取会话对象session.setAttribute("userName", userName);//对象保存到session作用域response.sendRedirect("./jbook/BookIndex.jsp");}else if(count==0){//说明该登录用户并不存在response.sendRedirect("./jbook/loginerr or.jsp");}} catch (Exception e) {e.printStackTrace();}}//初始化方法只会初始化一次public void init(ServletConfig config){ System.out.println("初始化登录提交servlet");}//销毁实例的方法public void destroy(){System.out.println("销毁登录提交servlet");}}配置文件类 ConfigManager.java package combook.util;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/*** 构造数据库访问的工具类用于读取配置文件* @author Administrator**/public class ConfigManager {private static ConfigManager configManager;//自身对象private static Properties properties;//读取配置文件类//在构造工具类时,进行配置文件的读取private ConfigManager(){//私有的构造方法StringconfigFile="database.properties";//定义配置文件路径properties=new Properties();//定义Properties对象//将文件读取成流的方法--加载获得资源流InputStreamin=ConfigManager.class.getClassLoader().g etResourceAsStream(configFile);try {properties.load(in);//加载流里面的数据读到配置文件中去in.close();} catch (IOException e) {e.printStackTrace();}}//因为构造方法是私有的所以通过这个方法实例化一个对象//设置实例化对象的个数public static ConfigManager getInstance(){if(configManager==null){//如果自身对象为空就实例化一个对象configManager=new ConfigManager();}return configManager;}//通过key获得对应的value 到配置流里面读取指定的数据public String getString(String key){ return properties.getProperty(key);}}database.propertiesdriver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@localhost:1521:MyOracleuserName=liftminepassword=liftpwdregister.jsp<%@page language="java"import="java.util.*"pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request. getServerPort()+path+"/";request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>注册页面</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"><meta http-equiv="description"content="This is my page"> <!--<link rel="stylesheet" type="text/css" href="styles.css"> --><style type="text/css">.right{color:#92BB22;}.wrong{color:#F80102;}#head ul{list-style:none;}#head ul li{float:left;}#head ul li a{text-decoration:none;}#mytable{margin-left:300px; margin-top:50px;}.near{margin-left:10px;}</style><script type="text/javascript">function check(){var form=document.registerform;//获得表单的对象//验证用户名var userName=erName.value;//根据表单获得用户名的值if(userName.length==0){//说明没有输入用户名wrong("userNamespan","用户名不可以为空");return;}else{right("userNamespan");}//验证密码var password=form.password.value;if(password.length==0){wrong("passwordspan","密码输入不能为空");return;}else{right("passwordspan");//调用正确输入的方法}//验证确认密码var repassword=form.repassword.value;if(repassword.length==0||repassword!=password){wrong("repasswordspan","确认密码输入不能为空或两次密码输入不一致");return;}else{right("repasswordspan");//调用正确输入的方法}//验证邮箱var email=form.email.value;//以字符开头一次到多次然后@然后又是字符一个或多个再加.字母2到3次点及以后的内容匹配1到2次例如会有var reg=/^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;if(email.length==0||reg.test(email)==false){wrong("emailspan","Email地址不能为空或格式填写有误");return;}else{right("emailspan");}form.submit();}//用户输入合法时的提示方法function right(id){document.getElementById(id).innerHTML="ok";document.getElementById(id).className="right";}//用户输入不合法时的提示方法function wrong(id,message){document.getElementById(id).innerHTML=message;//设置样式document.getElementById(id).className="wrong";}</script></head><body><h1style="margin-left:200px;">欢迎注册北大青鸟网上书城</h1> <div id="head"><ul><li style="margin-left:200px;"><ahref="register.jsp">1.填写注册信息</a></li><li style="margin-left:500px;"><ahref="./jbook/BookIndex.jsp">2.注册成功</a></li></ul></div><form action="RegisterServlet"method="post"name="registerform"><table id="mytable"width="70%"align="center"><tr><td>用户名:</td><td><input type="text"name="userName"><spanid="userNamespan"></span></td></tr><tr><td>密码:</td><td><input type="password"name="password"><spanid="passwordspan"></span></td></tr><tr><td>确认密码:</td><td><input type="password"name="repassword"><spanid="repasswordspan"></span></td></tr><tr><td>email:</td><td class="near"><input type="text"name="email"><span id="emailspan"></span></td></tr><tr><td colspan="2"style="margin-left:800px;"><button type="button"onclick="check()">注册</button><button type="reset">重置</button></td></tr></table></form></body></html>registererror.jsp<%@page language="java"import="java.util.*"pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request. getServerPort()+path+"/";request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>注册失败</title><meta http-equiv="pragma"content="no-cache"><meta http-equiv="cache-control"content="no-cache"><meta http-equiv="expires"content="0"><meta http-equiv="keywords"content="keyword1,keyword2,keyword3"><meta http-equiv="description"content="This is my page"> <!--<link rel="stylesheet" type="text/css" href="styles.css"> --></head><body><img src="images/2016-07-09_181427.png"/><h1>注册失败,该用户名已经存在。
Servlet(增删改查)准备:1.新建一个web项目(StudentZSGC)2.分层,分包一.查(查询学员信息表)(1)新建一个JSP页面(通过form表单进一个servlet(StudentAction))<%@page language="java"import="java.util.*"pageEncoding="utf-8"%> <%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServ erPort()+path+"/";%><html><head><title>查询学员表</title></head><BODY bgcolor="#FFCCCC"><form action="StudentAction"method="post"><TABLE width="100%"height="100%"><TR align="center"><TD><INPUT TYPE="submit"value="查询学员信息"></TD></TR></TABLE></form></BODY></html>(2)通过web.xml(中转站)找到对应的servlet(StudentAction)(3)进入action层package com.student.action;import java.io.IOException;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.student.service.StudentService;public class StudentAction extends HttpServlet {/*** 查询所有人员*/private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//转码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html; charset=utf-8");//调方法StudentService studentService=new StudentService();List<Map<String, Object>> list=null;list=studentService.selectAll();req.setAttribute("StudentList", list);--传回前台进行set//转向if(!list.isEmpty()){ --跳转到该页面req.getRequestDispatcher("Student.jsp").forward(req, resp);}else{req.getRequestDispatcher("Student.jsp").forward(req, resp);}}}(4)进入service类中package com.student.service;import java.util.List;import java.util.Map;import com.student.dao.StudentDao;/*** 查询所有学员信息方法* @author Administrator*/public class StudentService {public List<Map<String, Object>> selectAll() {StudentDao StudentDao=new StudentDao();return StudentDao.selectAll();}}(5)进入dao中连接数据库package com.student.dao;import java.util.List;/*** 查询数据库所有学员放到list中*/import java.util.Map;import com.student.util.Dao;public class StudentDao {Dao dao=new Dao();public List<Map<String, Object>> selectAll() {S tring sql="select s_id, s_number, s_name, s_sex, s_class, s_age, s_add, s_college, s_mobile, s_hobby from student";return dao.select(sql,new Object[]{});}}(6)查询出数据后跳到Student.jsp页面<%@page language="java"import="java.util.*"pageEncoding="utf-8"%><%@page import="java.sql.Array"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>学员列表</title></head><BODY bgcolor="#FFCCCC"><form action=""method="post"><TABLE width="100%"height="100%"><TR><TD align="center"valign="top"><TABLE border="1"><TR><TD colspan="5">学号:<INPUT TYPE="text"NAME="Snumber"></TD><TD colspan="4">姓名:<INPUT TYPE="text"NAME="Sname"></TD><TD colspan="2"><INPUT TYPE="button"value="提交"></TD> </TR><TR><td><input type="checkbox"id="selAll"/></td><TD>id</TD><TD>学号</TD><TD>姓名</TD><TD>性别</TD><TD>班级</TD><TD>年龄</TD><TD>住址</TD><TD>就读院校</TD><TD>联系方式</TD><TD>爱好</TD></TR><!- 接后台容器中的元素-><%List<Map<String, Object>> list=(List<Map<String, Object>>)request.getAttribute("StudentList");for(int i=0;i<list.size();i++){Map<String, Object> map=list.get(i);%><!-前台通过map取值-><TR><td><input type="checkbox" name="selItem"value="<%=map.get("s_id")%>"/></td><TD><%=map.get("s_id")%></TD><TD><%=map.get("s_number")%></TD><TD><%=map.get("s_name")%></TD><TD><%=map.get("s_sex")%></TD><TD><%=map.get("s_class")%></TD><TD><%=map.get("s_age")%></TD><TD><%=map.get("s_add")%></TD><TD><%=map.get("s_college")%></TD><TD><%=map.get("s_mobile")%></TD><TD><%=map.get("s_hobby")%></TD></TR><%}%><TR><TD><A HREF="javascript:openW();">添加</A></TD><TD><A HREF="javascript:upPerson()">修改</A></TD><TD><A HREF="javascript:delPerson()">删除</A></TD></TR></TABLE></TD></TR></TABLE></form></BODY><script LANGUAGE="JavaScript">document.getElementById("selAll").onclick=function(){ var chItem=document.getElementsByName("selItem");for(i=0;i<chItem.length;i++){chItem[i].checked=this.checked;}}function openW(){window.showModalDialog("<%=request.getContextPath()%>/insertPe rson.jsp","","dialogwidth:380px;dialogheight:380px");}="myIndex"function upPerson(){var num = 0;var postId = "";var chItem = document.getElementsByName("selItem");for(i = 0 ; i <chItem.length;i++){if(chItem[i].checked == true){num ++;postId = chItem[i].value;}}if(num != 1){alert("请选择一条数据");}else{location.href ="upServlet?id="+postId;}}function delPerson(){var num = 0;var postId = "";var chItem = document.getElementsByName("selItem");for(i = 0 ; i <chItem.length;i++){if(chItem[i].checked == true){num ++;postId = chItem[i].value;}}if(num <1){alert("请至少选择一条数据");}else{document.forms[0].action="delServlet";document.forms[0].submit();}}</script></html>如下示例:二.增(添加学员)(1)在学员列表页面的添加按钮写一个方法调用函数function openW(){window.showModalDialog("<%=request.getContextPath()%>/insertPerso n.jsp","","dialogwidth:380px;dialogheight:380px");}="myIndex"知识点:1.点击添加跳转该添加页面insertPerson.jsp2. 当表单将要被提交时触发(onsubmit)="javascript:window.close()提交后立即关闭该窗体3.设置或获取目标内容要显示于哪个窗口或框架(target)="myIndex"(2)添加页面单机添加通过form 走servlet( AddPersonAction)<%@page language="java"import="java.util.*"pageEncoding="utf-8"%> <%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServ erPort()+path+"/";%><html><head><title>添加页面</title></head><BODY bgcolor="#FFCCCC"><form method="get"action="<%=request.getContextPath()%>/AddPersonAction"target="myIndex" onsubmit="javascript:window.close()"><TABLE width="343"height="139"><TR><TD>学 号:</TD><TD><INPUT TYPE="text"NAME="snumber"></TD><TD>*只能输入中文</TD></TR><TR><TD>姓 名:</TD><TD><INPUT TYPE="text"NAME="sname"></TD><TD>*只能输入中文</TD></TR><TR><TD>性 别:</TD><TD><INPUT TYPE="text"NAME="ssex"></TD><TD>*只能输入英文</TD></TR><TR><TD>班 级:</TD><TD><INPUT TYPE="text"NAME="sclass"></TD><TD>*只能输入中文</TD></TR><TR><TD>年 龄:</TD><TD><INPUT TYPE="text" NAME="sage"></TD><TD>*只能输入中文</TD></TR><TR><TD>地 址:</TD><TD><INPUT TYPE="text"NAME="sadd"></TD><TD>*只能输入中文</TD></TR><TR><TD>毕业院校:</TD><TD><INPUT TYPE="text"NAME="scollege"></TD><TD>*只能输入中文</TD></TR><TR><TD>联系方式:</TD><TD><INPUT TYPE="text"NAME="smobile"></TD><TD>*只能输入中文</TD></TR><TR><TD>爱 好:</TD><TD><INPUT TYPE="text"NAME="shobby"></TD><TD>*只能输入中文</TD></TR><tr><td colspan="2"><INPUT TYPE="submit" value="添加"><INPUT TYPE="reset"value="重置"/></td></tr></TABLE></form></BODY></html>(3)找到web.xml(中转站) AddPersonAction<servlet><servlet-name>AddPersonAction</servlet-name><servlet-class>com.student.action.AddPersonAction</servlet-class> </servlet><servlet-mapping><servlet-name>AddPersonAction</servlet-name><url-pattern>/AddPersonAction</url-pattern></servlet-mapping>(4)通过com.student.action.AddPersonAction进action中package com.student.action;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.student.service.AddPersonService;public class AddPersonAction extends HttpServlet {/*** 添加人员*/private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//转码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//接值 s_id, s_number, s_name, s_sex, s_class, s_age, s_add, s_college, s_mobile, s_hobby知识点:通过添加页面中的 input中的name值接过来的String snumber=(String)req.getParameter("snumber");snumber = new String(snumber.getBytes("ISO8859-1"),"utf-8");String sname=(String)req.getParameter("sname");sname = new String(sname.getBytes("ISO8859-1"),"utf-8");String ssex=(String)req.getParameter("ssex");ssex = new String(ssex.getBytes("ISO8859-1"),"utf-8");String sclass=(String)req.getParameter("sclass");sclass = new String(sclass.getBytes("ISO8859-1"),"utf-8");String sage=(String)req.getParameter("sage");sage = new String(sage.getBytes("ISO8859-1"),"utf-8");String sadd=(String)req.getParameter("sadd");sadd = new String(sadd.getBytes("ISO8859-1"),"utf-8");String scollege=(String)req.getParameter("scollege");scollege = new String(scollege.getBytes("ISO8859-1"),"utf-8");String smobile=(String)req.getParameter("smobile");smobile = new String(smobile.getBytes("ISO8859-1"),"utf-8");String shobby=(String)req.getParameter("shobby");shobby = new String(shobby.getBytes("ISO8859-1"),"utf-8");//调方法AddPersonService addPersonService=new AddPersonService();addPersonService.addPerson(snumber,sname,ssex,sclass,sage,sadd,scolle ge,smobile,shobby);//转向req.getRequestDispatcher("StudentAction").forward(req, resp);知识点:添加完后跳到StudentAction重新查询一遍数据库}}(5)service层package com.student.service;import com.student.dao.AddPersonDao;public class AddPersonService {public boolean addPerson(String snumber, String sname, String ssex, String sclass, String sage, String sadd, String scollege,String smobile, String shobby) {AddPersonDao addPersonDao=new AddPersonDao();Object[] paras=new Object[9];paras[0]=snumber;paras[1]=sname;paras[2]=ssex;paras[3]=sclass;paras[4]=sage;paras[5]=sadd;paras[6]=scollege;paras[7]=smobile;paras[8]=shobby;return addPersonDao.addPerson(paras);}}(6)dao层package com.student.dao;import com.student.util.Dao;public class AddPersonDao {public boolean addPerson(Object[] paras) {Dao dao=new Dao();String sql="insert into student(s_id, s_number, s_name, s_sex,s_class, s_age, s_add, s_college, s_mobile, s_hobby) values(seq.nextval, ?, ?, ?, ?, ?, ?, ?, ?, ?)";int num=dao.executeDML(sql, paras);return num>0?true:false;}}三.改(修改学员信息)分析:总共分两步1.首先走一个servlet查询出要修改的用户信息2.然后再走一个servlet更新用户新输入的学员信息(1)单机修改按钮(2)调用函数uplPerson()(3)根据location连接到servlet(upServlet)知识点:location.href ="upServlet?id="+postId;将选中用户id传入后台以用查询(4)根据web.xml(中转站)找到对应的servlet(5)找到upServletActionpackage com.student.action;import java.io.IOException;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.student.service.upServletService;public class upServletAction extends HttpServlet {/*** 修改类*/private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException, IOException {//转码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//接值//id前台传过来的location.href ="upServlet?id="+postId;String sid=(String)req.getParameter("id");upServletService upServletService=newupServletService();List<Map<String, Object>>list=upServletService.selectStudent(sid);if(!list.isEmpty()){//方便前台取出要被修改学员的信息req.setAttribute("list", list);//下个页面接收传到要跳入的页面UpStudent.jsp页面用该方法接传过来的sidreq.setAttribute("sid", sid);req.getRequestDispatcher("UpStudent.jsp").forward(req, resp);}}}(6)根据其找到对应的service类(7)service类(8)调用upServletDao类(9)前台修改页面取值<%@page language="java"import="java.util.*"pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServ erPort()+path+"/";%><html><head><title>修改页面</title></head><BODY bgcolor="#FFCCCC"><form method="get"action="<%=request.getContextPath()%>/UpStudentAction"target="myIndex"><%%><%//判断数据库中是否有该学员if(request.getAttribute("list")!=null){List<Map<String,Object>>list=(List<Map<String,Object>>)request.getAttribute("list");Map<String,Object> map=list.get(0);%><!-- 接上个页面的id(value="<%=request.getAttribute("sid")%>")下个页面通过 name="id"接收id --><input type="hidden"name="id"value="<%=request.getAttribute("sid")%>"/><TABLE width="343"height="139"><TR><TD>学 号:</TD>//取后台查询出来的值(以下红线均是)<TD><INPUTTYPE="text"NAME="snumber"value="<%=map.get("s_number")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>姓 名:</TD><TD><INPUT TYPE="text"NAME="sname"value="<%=map.get("s_name")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>性 别:</TD><TD><INPUT TYPE="text"NAME="ssex"value="<%=map.get("s_sex")%>"></TD><TD>*只能输入英文</TD></TR><TR><TD>班 级:</TD><TD><INPUT TYPE="text"NAME="sclass"value="<%=map.get("s_class")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>年 龄:</TD><TD><INPUT TYPE="text"NAME="sage"value="<%=map.get("s_age")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>地 址:</TD><TD><INPUT TYPE="text"NAME="sadd"value="<%=map.get("s_add")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>毕业院校:</TD><TD><INPUT TYPE="text"NAME="scollege"value="<%=map.get("s_college")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>联系方式:</TD><TD><INPUT TYPE="text"NAME="smobile"value="<%=map.get("s_mobile")%>"></TD><TD>*只能输入中文</TD></TR><TR><TD>爱 好:</TD><TD><INPUT TYPE="text"NAME="shobby"value="<%=map.get("s_hobby")%>"></TD><TD>*只能输入中文</TD></TR><tr><td colspan="2"><INPUT TYPE="submit"value="修改"><INPUT TYPE="reset"value="重置"/></td></tr></TABLE><%} %></form></BODY></html>完成以上即完成第一步查询出要修改的学员信息并返回给前台页面(如图所示)选中一条数据单机修改第二步骤更新用户新输入的学员信息(10)用户对其进行修改,改完后单机修改按钮根据form表单走一个servlet(upStudentAction)(11)到web.xmlz中找到对应的servlet(12)action层package com.student.action;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.student.service.UpStudentService;public class UpStudentAction extends HttpServlet {/*** 修改选中的用户信息*/private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//转码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//接值跟据修改页面里的input里的name属性接到的String sid=(String)req.getParameter("id");String snumber=(String)req.getParameter("snumber");snumber = new String(snumber.getBytes("ISO8859-1"),"utf-8");String sname=(String)req.getParameter("sname");sname = new String(sname.getBytes("ISO8859-1"),"utf-8");String ssex=(String)req.getParameter("ssex");ssex = new String(ssex.getBytes("ISO8859-1"),"utf-8");String sclass=(String)req.getParameter("sclass");sclass = new String(sclass.getBytes("ISO8859-1"),"utf-8");String sage=(String)req.getParameter("sage");sage = new String(sage.getBytes("ISO8859-1"),"utf-8");String sadd=(String)req.getParameter("sadd");sadd = new String(sadd.getBytes("ISO8859-1"),"utf-8");String scollege=(String)req.getParameter("scollege");scollege = newString(scollege.getBytes("ISO8859-1"),"utf-8");String smobile=(String)req.getParameter("smobile");smobile = new String(smobile.getBytes("ISO8859-1"),"utf-8");String shobby=(String)req.getParameter("shobby");shobby = new String(shobby.getBytes("ISO8859-1"),"utf-8");//调方法UpStudentService upStudentService=new UpStudentService();if(upStudentService.upStudent(snumber,sname,ssex,sclass,sage,sadd,s college,smobile,shobby,sid)){// 修改后跳到(StudentAction)servlet中在重新查询遍更新后的信息 req.getRequestDispatcher("StudentAction").forward(req, resp);}}}(13)走到service层(14)走到dao层四.删(删除学员信息)(1)单机删除按钮调用delPerson()(2)调用函数走delServlet(3)通过web.xml找到对应的servlet(4)action层package com.student.action;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.student.service.delServletService;/*** 删除数据* @author Administrator*/public class delServletAction extends HttpServlet { private static final long serialVersionUID = 1L;@Overridep rotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { // 转码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//接值// String sid=(String)req.getParameter("id");//根据该条接收到的idString[] ids=req.getParameterValues("selItem");//掉方法delServletService delServletService=newdelServletService();if(delServletService.delStudent(ids)){req.getRequestDispatcher("StudentAction").forward(req, resp);}else{S ystem.out.println("删除失败");}}}(5)service层(6)dao层五.实现学员信息单独放在一个区域如下:将学员信息列表table外放一个div知识点:auto Content is clipped and scrolling is added only when necessary.<table>…………..</table></div>六.模糊查询1.两个参数:学号和用户名同时模糊(两个都需要like)Sql:select s_id, s_number, s_name, s_sex, s_class, s_age, s_add, s_college, s_mobile, s_hobby from student where s_number like ? and s_name like ?Dao: 将参数前后加%:如果其他地方用到select方法的将其sql语句改成like(修改时查修改用户信息时用)。
这是图书管理系统的课后作业增删查改 BaseDaojsp提交到servlet数据库操作通用类package ;import .*;import common.*;public class BaseDao {etString("driver");url=().getString("url");userName=().getString("userName");password=().getString("password");}protected ResultSet rs;protected Statement stmt;protected PreparedStatement ps;,rownum rn from books b) where rn>=? and rn<?";ps=(sql);jbook/");}else if(count==0){jbook/");}} catch (Exception e) {();}}jbook/");}else if(count==0){jbook/");}} catch (Exception e) {();}}"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":ight{color:#92BB22;}.wrong{color:#F80102;}#head ul{list-style:none;}#head ul li{float:left;}#head ul li a{text-decoration:none;}#mytable{margin-left:300px; margin-top:50px;}.near{margin-left:10px;}</style><script type="text/javascript">function check(){var form=;var reg=/^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;if==0||(email)==false){wrong("emailspan","Email地址不能为空或格式填写有误");return;}else{right("emailspan");}();}nnerHTML="ok";(id).className="right";}nnerHTML=message;lassName="wrong";}</script></head><body><h1style="margin-left:200px;">欢迎注册北大青鸟网上书城</h1><div id="head"><ul><li style="margin-left:200px;"><a href="">1.填写注册信息</a></li><li style="margin-left:500px;"><a href="./jbook/">2.注册成功</a></li></ul></div><form action="RegisterServlet"method="post"name="registerform"><table id="mytable"width="70%"align="center"><tr><td>用户名:</td><td><input type="text"name="userName"><spanid="userNamespan"></span></td></tr><tr><td>密码:</td><td><input type="password"name="password"><spanid="passwordspan"></span></td></tr><tr><td>确认密码:</td><td><input type="password"name="repassword"><spanid="repasswordspan"></span></td></tr><tr><td>email:</td><td class="near"><input type="text"name="email"><spanid="emailspan"></span></td></tr><tr><td colspan="2"style="margin-left:800px;"><button type="button"onclick="check()">注册</button><button type="reset">重置</button></td></tr></table></form></body></html><%@page language="java"import=".*"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":ight{color:#92BB22;}.wrong{color:#F80102;}</style><script type="text/javascript">function check(){var form=;var userName= if==0){nnerHTML="用户名不得为空";("userNamespan").className="wrong";}else{("userNamespan").innerHTML="ok";("userNamespan").className="right";}var password= if==0){nnerHTML="用户名不得为空";("passwordspan").className="wrong";}else{("passwordspan").innerHTML="ok";("passwordspan").className="right";}();"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":alue;jbook/?pageIndex="+pageCount;}else if(pagesIndex<=1){jbook/?pageIndex="+1;}else{jbook/?pageIndex="+pagesIndex;}}function buy(){var price=0;var count=0;var money=0;var prices=("price");alue;count=counts[i].value;nnerHTML=money;}function bigPicture(img){="./jbook/?img="+img;}</script></head><body bgcolor="#96D7EB"><jsp:include page=""></jsp:include><%jbook/">首页</a><a href="./jbook/?pageIndex=<%=()%>">上一页</a><a href="./jbook/?pageIndex=<%=()%>">下一页</a><a href="./jbook/?pageIndex=<%=pageCount%>">末页</a><span><input type="text"id="gotopage"value="<%=()%>"name="gotopage" style="width:28px;"/><input type="button"value="go"onclick="gotoPage('<%=(rowCount, ())%>')"/></span></div></div></body></html><%@page language="java"import=".*"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":istyle{background-color:#FFFFFF;width:25px;height:35px;}</style><script type="text/javascript">function search(){var bookName=("search").value;="./jbook/?bookName="+bookName;}</script></head><%String userName=(String)("userName");if(userName==null){jbook/"class="listyle">首页</a></li><li><a href=""class="listyle">我的订单</a></li><li><a href=""class="listyle">购物车</a></li><li><a href=""class="listyle">注销</a></li><li style="float:right;line-height:45px;margin-right:25px"><input type="text"id="search"> <input type="button"value="搜索"onclick="search()"/> </li></ul></div></div></body></html><%@page import=""%><%@page import=""%><%@page import=""%><%@page import=""%><%@page import=""%><%@page language="java"import=".*"pageEncoding="utf-8"%><%String path = ();String basePath = ()+":o扩展名的请求匹配 --></servlet-mapping><!-- 登录servlet --><servlet><servlet-name>LoginServlet</servlet-name><servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern><!--对所有.do扩展名的请求匹配 --> </servlet-mapping><!-- 购物车的保存 --><servlet><servlet-name> SavetoCar</servlet-name><servlet-class>. SavetoCar</servlet-class></servlet><servlet-mapping><servlet-name>SavetoCar</servlet-name><url-pattern>/SavetoCar</url-pattern><!--对所有.do扩展名的请求匹配 --> </servlet-mapping><!-- 设置session的有效时间 --><session-config><session-timeout>50</session-timeout></session-config><!-- servlet配置 --><servlet><servlet-name>NewsServlet</servlet-name><servlet-class></servlet-class></servlet><servlet-mapping><servlet-name>NewsServlet</servlet-name><url-pattern>/NewsServlet</url-pattern><!--精准匹配 --></servlet-mapping><servlet><servlet-name>updateServlet</servlet-name><servlet-class></servlet-class></servlet><servlet-mapping><servlet-name>updateServlet</servlet-name><url-pattern>/updateServlet</url-pattern><!--精准请求匹配 --></servlet-mapping><servlet><servlet-name>deleteServlet</servlet-name><servlet-class>comServlet. deleteServlet</servlet-class></servlet><servlet-mapping><servlet-name>deleteServlet</servlet-name><url-pattern>/deleteServlet</url-pattern><!--对所有.do扩展名的请求匹配 --> </servlet-mapping><!-- 配置过滤器 --><filter><display-name>CharacterEncodingFilter</display-name><filter-name>CharacterEncodingFilter</filter-name><filter-class></filter-class></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/updateServlet</url-pattern><!-- 设置过滤器和更改的servlet进行关联 --></filter-mapping><!--监听器配置 --><listener><listener-class></listener-class></listener></web-app>。
SpringBoot实现简单的增删改查在pom.xml添加相应的依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 前端使⽤thymeleaf来代替jsp --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency></dependencies>配置⽂件配置数据库等#serverserver.port=80#项⽬名:server.servlet.context-path#spring dataSourcespring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8ername=rootspring.datasource.password=rootmybatis.mapper-locations=classpath:/mapper/*/*.xml#spring log.cy=debug#spring thymeleaf(假如没有配置也会默认配置,在默认配置中prefix默认值为classpath:/templates/,后缀默认为.html)#不⽤重启服务器,⽹页就能刷新spring.thymeleaf.cache=falsespring.thymeleaf.prefix=classpath:/templates/pages/spring.thymeleaf.suffix=.html数据层添加相应注解实现sql语句(或者通过xml配置来实现)数据层封装了商品信息,并提供get和set⽅法,为Goods类1.查询所有数据@Select("select * from tb_goods")List<Goods> findAll();2.按照id删除数据@Delete("delete from tb_goods where id=#{id}")int deleteById(Integer id);3.修改数据(1)修改数据⾸先要新建⼀个界⾯,按照id查找内容,并将查找到的内容显⽰到⽂本框内@Select("select * from tb_goods where id=#{id}")Goods findById(Integer id);(2)再添加查找的⽅法@Update("update tb_goods set name=#{name},remark=# {remark},createdTime=now() where id=#{id}")int update(Goods goods);4.新增数据@Insert("insert into tb_goods(name,remark,createdTime) values (#{name},#{remark},now())")int add(Goods goods);业务层提供对应接⼝⽅法和实现类1.业务层接⼝public interface GoodsService {List<Goods> findObject();int add(Goods goods);int update(Goods goods);Goods findById(Integer id);}2.业务层实现类@Servicepublic class GoodsServiceImpl implements GoodsService {@Autowiredprivate GoodsDao goodsDao;@Overridepublic List<Goods> findObject() {long start=System.currentTimeMillis();List<Goods> list = goodsDao.findObjects();long end=System.currentTimeMillis();System.out.println("query time:"+(end-start));return list;}@Overridepublic int add(Goods goods) {return goodsDao.add(goods);}@Overridepublic int update(Goods goods) {return goodsDao.update(goods);}@Overridepublic Goods findById(Integer id) {return goodsDao.findById(id);}控制层写具体实现1.跳转到⾸页并且查找所有商品@RequestMapping("doGoodsUI")public String doGoodsUI(Model model) {List<Goods> list = goodsService.findObject();model.addAttribute("goods",list);return "goods";}2.业务层实现类@Servicepublic class GoodsServiceImpl implements GoodsService {@Autowiredprivate GoodsDao goodsDao;@Overridepublic List<Goods> findObject() {long start=System.currentTimeMillis();List<Goods> list = goodsDao.findObjects();long end=System.currentTimeMillis();System.out.println("query time:"+(end-start));return list;}@Overridepublic int add(Goods goods) {return goodsDao.add(goods);}@Overridepublic int update(Goods goods) {return goodsDao.update(goods);}@Overridepublic Goods findById(Integer id) {return goodsDao.findById(id);}控制层写具体实现1.跳转到⾸页并且查找所有商品@RequestMapping("doGoodsUI")public String doGoodsUI(Model model) {List<Goods> list = goodsService.findObject();model.addAttribute("goods",list);return "goods";}2.删除商品@RequestMapping("doDeleteById/{id}")// (@PathVariable Integer id)告诉服务器,id拿到的是从⽹页上同样叫id的数据 public String dodeletebyId(@PathVariable Integer id){int delete = goodsDao.deleteById(id);//doGoodsUI前⾯没有加/的话,跳转的⽹址是替代了最后⼀个/后⾯的内容 return "redirect:/goods/doGoodsUI";}3.修改商品(1)先将查找出来的商品显⽰在⽂本框中@RequestMapping("doFindById/{id}")public String doFindByID(@PathVariable Integer id,Model model){Goods goods = goodsService.findById(id);model.addAttribute("goods",goods);return "goods-update";}(2)实现修改@RequestMapping("doUpdateGoods")public String doUpdateGoods(Goods goods){goodsService.update(goods);return "redirect:/goods/doGoodsUI";}4.新增商品@RequestMapping("doSaveGoods")public String doSaveGoods(Goods goods){goodsService.add(goods);return "redirect:/goods/doGoodsUI";}前端采⽤html+thymeleaf模板代替jsp2.each表⽰遍历拿到的数组,goods是从控制层拿到的model的名字3.id,name和remark与数据库对应,date要格式化拿到数据,该语法是thymeleaf固定写法<tr th:each="g:${goods}"><td th:text="${g.id}">1</td><td th:text="${}">AAAAAAA</td><td th:text="${g.remark}">aa</td><td th:text="${#dates.format(g.createdTime,'yyyy-MM-dd HH:mm')}">aa</td><!-- <td><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" th:href="@{/goods/doDeleteById(id=${g.id})}" rel="external nofollow" ><button>删除</button></a></td>--><td><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" th:href="@{/goods/doDeleteById/{doDeleteById}(doDeleteById=${g.id})}" rel="external nofollow" ><button>删除</button></a></td> <td><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" th:href="@{/goods/doFindById/{id}(id=${g.id})}" rel="external nofollow" ><button>修改</button></a></td></tr>4.新增商品界⾯(1)标签⾥的name属性要和sql语句⼀致(2)这⾥由于数据库中的id列设置了⾃增长,所以不需要id属性,createdTime列使⽤了now()获取当前时间,所以也不需要传值,所以在控制层的doUpdateGoods⽅法⾥可以使⽤封装好的Goods来接收从html拿到的参数<form th:action="@{/goods/doSaveGoods}" method="post"><ul><li>name:<input type="text" name="name"></li><li>remark:<textarea rows="3" cols="20" name="remark"></textarea></li><li><input type="submit" value="Save Goods"></li></ul></form>5.修改商品界⾯(1)因为id列⾃增长,所以修改商品信息不需要id这⼀列,但传参数有需要⼀起传送过去,所以添加了⼀个输⼊框,默认设置为隐藏,将其value设置为id的值<form th:action="@{/goods/doUpdateGoods}" method="post"><input type="hidden" name="id" th:value="${goods.id}"><ul><li>name:<input type="text" name="name" th:value="${}"></li><li>remark:<textarea rows="3" cols="20" name="remark" th:text="${goods.remark}"></textarea></li><li><input type="submit" value="Update Goods"></li></ul></form>以上就是Spring Boot实现简单的增删改查的详细内容,更多关于Spring Boot增删改查的资料请关注其它相关⽂章!。
Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作,myeclipseservlet此篇文章主要讲述DAO、Java Bean和Servlet实现操作数据库,把链接数据库、数据库操作、前端界面显示分模块化实现。
其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述。
参考前文:Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作Java+MyEclipse+Tomcat (五)DAO和Java Bean 实现数据库和界面分开操作免费资源下载地址:/detail/eastmount/8733385PS:这篇文章可以认为是对前面五篇文章的一系列总结和应用,同时我认为理解该篇文章基本就能简单实现一个基于数据库操作的JSP网站,对你的课程项目或毕设有所帮助!但同时没有涉及事务、触发器、存储过程、并发处理等数据库知识,也没有Struts、Hibernate、Spring框架知识,它还是属于基础性文章吧!希望对你有所帮助~ 一. 项目结构该项目的结构如下图所示:这是典型的DAO模式,其中bean文件夹中TrainManage.java类封装了数据库表TrainManage中的属性和get/set操作;DAO文件夹中TrainManageDAO.java是对类TrainManage(或火车表)的数据库增删改查操作;util中JDBCConnect.java主要是连接数据库MySQL的操作;servlet主要是POST方法请求表单。
二. 数据库初始化操作打开MySQL,输入默认超级root用户的密码,然后数据库的操作如下代码:--创建数据库create database ManageTrain;--使用数据库use ManageTrain;--创建表车次信息管理表主键:车次--属性:车次出发地目的地行车时间硬座票价软座票价硬卧票价软卧票价车辆路线create table TrainManage(trainid varchar(20) primary key,start varchar(20),end varchar(20),time varchar(20),yzprice decimal(10,1),rzprice decimal(10,1),ywprice decimal(10,1),rwprice decimal(10,1),root varchar(200));--插入数据insert TrainManage(trainid,start,end,time,yzprice,rzprice,ywprice,rwprice,root) values ("T87","Beijing","Guiyang","28小时","278","320","464.5","550","Beijing Shijiazhuang Guiyang");insert TrainManage(trainid,start,end,time,yzprice,rzprice,ywprice,rwprice,root) values ("T87","Guiyang","Beijing","28小时","278","320","464.5","550","Guiyang Shijiazhuang Beijing");--查询数据select * from TrainManage;注意:上面操作在MySQL黑框中输出增删改查的SQL语言就可以,不要把中文注释也执行。