JavaWeb学习-案例练习-图书管理后台-3- 完成图书添加功能

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

这篇我们来实现添加一个图书功能,前面一篇是显示图书列表。一般的逻辑是,在添加页面,提供用户输入的表单,用户确认填写,点击提交,然后返回到列表,列表可以显示多了一条数据进来了。ddd

1.图书添加功能的思路分析

分析一下,思路应该是这样的。

主要是提醒,在BookAddServlet中应该往BookListServlet跳,而不是直接往list.jsp跳。

2.完成添加图书代码

在前面一篇代码基础上,我们先看看Dao层的接口中方法定义和具体实现类的方法

package com.anthony.dao;

import java.sql.SQLException;
import java.util.List;

import com.anthony.domain.Book;

public interface BookDao {
	
	/**
	 * 查询所有书
	 * @return 
	 * @throws SQLException 
	 */
	public List<Book> findAllBooks() throws SQLException;
	
	/**
	 * 添加图书
	 * @throws SQLException
	 */
	public void addBook(Book book) throws SQLException;
}

实现类中方法,也就是两三行代码。

package com.anthony.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.anthony.datasource.C3P0Utils;
import com.anthony.domain.Book;

public class BookDaoImpl implements BookDao {

	public List<Book> findAllBooks() throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		List<Book> query = qr.query("select * from book", new BeanListHandler<Book>(Book.class));
		return query;
	}

	public void addBook(Book book) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		qr.update("INSERT INTO book VALUES(?,?,?,?,?,?)", book.getId(),book.getName(),book.getPrice(),book.getPnum(),book.getCategory(),book.getDescription());
	}
	
}

在看看service层

扫描二维码关注公众号,回复: 6729343 查看本文章
package com.anthony.service;

import java.util.List;

import com.anthony.domain.Book;

public interface BookService {
	
	public List<Book> findAllBooks();
	
	public void addBook(Book book);

}
package com.anthony.service;

import java.sql.SQLException;
import java.util.List;

import com.anthony.dao.BookDao;
import com.anthony.dao.BookDaoImpl;
import com.anthony.domain.Book;

public class BookServiceImpl implements BookService {
	
	//创建一个Dao对象
	BookDao bd = new BookDaoImpl();
	
	public List<Book> findAllBooks() {
		try {
			return bd.findAllBooks();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public void addBook(Book book) {
		try {
			bd.addBook(book);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

接下来,我们打开admin/product/add.jsp页面,修改成如下代码。

<body>
	<form id="userAction_save_do" name="Form1"
		action="${pageContext.request.contextPath}/addBookServlet" method="post">
		&nbsp;
		<table cellSpacing="1" cellPadding="5" width="100%" align="center"
			bgColor="#eeeeee" style="border: 1px solid #8ba7e3" border="0">
			<tr>
				<td class="ta_01" align="center" bgColor="#afd1f3" colSpan="4"
					height="26"><strong><STRONG>添加商品</STRONG> </strong>
				</td>
			</tr>

注意在method后面删除了一行代码,这行代码是uoload文件用的,数据传输都是二进制。主要就是在action中添加跳转到servlet层,所以下面我们来创建一个AddBookServlet的类,在web.xml中配置如下。

 <servlet>
    <description></description>
    <servlet-name>addBookServlet</servlet-name>
    <servlet-class>com.anthony.web.servlet.AddBookServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>addBookServlet</servlet-name>
    <url-pattern>/addBookServlet</url-pattern>
  </servlet-mapping>

由于我们新插入图书有一个id,这个id不是用户提供,页面也没让用户输入这个图书id, 这里我们引入一个工具类,得到一个UUID,而且是随机得到,所以在utils包下新建一个UUIDUtil.java

package com.anthony.utils;

import java.util.UUID;

public class UUIDUtil {
	
	public static String getUUID() {
		return UUID.randomUUID().toString(); // 随机得到一个uuid字符串
	}

}

新创建的AddBookServlet.java如下代码

package com.anthony.web.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

import com.anthony.domain.Book;
import com.anthony.service.BookService;
import com.anthony.service.BookServiceImpl;
import com.anthony.utils.UUIDUtil;


public class AddBookServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
                //获取用户表单数据
		Book book = new Book();
		try {
			BeanUtils.populate(book, request.getParameterMap());
			book.setId(UUIDUtil.getUUID());
		} catch (Exception e) {
			e.printStackTrace();
		}
		//调用业务逻辑
		BookService bs = new BookServiceImpl();
		bs.addBook(book);
		//分发转向
		request.getRequestDispatcher("bookListServlet").forward(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

测试,打开浏览器,打开add.jsp页面,开始输入数据,提交测试下。

点击提交之后,应该里面跳转list.jsp页面

猜你喜欢

转载自blog.csdn.net/u011541946/article/details/93529901