本文章主要介绍了JavaWeb学习-案例练习-图书管理后台-3- 完成图书添加功能,具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

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

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页面


发布评论
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

JavaWeb学习-案例练习-图书管理后台-4- 完成图书修改功能详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。