第九天学习内容:http://www.cnblogs.com/tobecrazy/p/3470195.html

需求概述

创建程序模块,读取并显示数据库中的书籍信息。当前有如下需求:需要显示数据库中所有登记的书籍信息,需要显示的字段信息包括ISBN、title、copyright、editionNumber、price。数据保存在数据库中,数据表名称为:tbl_books。编写程序实现该需求。

实现说明

1)采用MVC设计模式, 在JSP页面(listbook.jsp)中显示所有图书;

2)采用自定义标签技术,实现图书列表的显示;

3)创建JAVABEAN作为业务逻辑类,访问数据库资源;

4)数据库配置信息的管理,如:驱动名称,连接字符串,用户名,密码必须从配置文件中读取。

首先创建表,并插入数据:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: test
Target Host: localhost
Target Database: test
Date: 2010-10-13 15:26:26
*/ SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tbl_books
-- ----------------------------
CREATE TABLE `tbl_books` (
`isbn` varchar(20) NOT NULL,
`title` varchar(100) NOT NULL,
`editionNumber` int(11) NOT NULL,
`copyright` varchar(4) NOT NULL,
`publisherID` int(11) NOT NULL,
`imageFile` varchar(20) NOT NULL,
`price` double NOT NULL,
PRIMARY KEY (`isbn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `tbl_books` VALUES ('', 'Java How to Program (Java 2)', '', '', '', 'jhtp3.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'Internet and World Wide Web How \r\n\r\nto Program', '', '', '', 'iw3htp1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'XML How to Program', '', '', '', 'xmlhtp1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'Perl How to Program', '', '', '', 'perlhtp1.jpg', '');
INSERT INTO `tbl_books` VALUES ('013028419x', 'e-Business and e-Commerce How to \r\n\r\nProgram', '', '', '', 'ebechtp1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'The Complete Java Training Course \r\n\r\n(Java 1.1)', '', '', '', 'javactc2.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'The Complete Visual Basic 6 \r\n\r\nTraining Course', '', '', '', 'vbctc1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'The Complete Java 2 Training \r\n\r\nCourse', '', '', '', 'javactc3.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'The Complete Internet and World \r\n\r\nWide Web Programming Training Course', '', '', '', 'iw3ctc1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'Advanced Java 2 Platform How to \r\n\r\nProgram', '', '', '', 'advjhtp1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'C++ How to Program', '', '', '', 'cpphtp3.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'C How to Program', '', '', '', 'chtp3.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'C How to Program', '', '', '', 'chtp2.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'Visual Basic 6 How to Program', '', '', '', 'vbhtp1.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'C++ How to Program', '', '', '', 'cpphtp2.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'Java How to Program (Java 1.1)', '', '', '', 'jhtp2.jpg', '');
INSERT INTO `tbl_books` VALUES ('', 'The Complete C++ Training Course', '', '', '', 'cppctc3.jpg', '');

创建一个web project

添加一个Servlet,命名为BookAction

package com.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.service.BookService; public class BookAction extends HttpServlet { /**
* Constructor of the object.
*/
public BookAction() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// 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); /*response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();*/
} /**
* 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 { BookService bookservice=new BookService();
List booklist=bookservice.getBookList();
request.getSession().setAttribute("booklist", booklist);
request.getRequestDispatcher("listbook.jsp").forward(request, response); /*response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();*/
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
} }

创建book 类,生成get/set method

ackage bookpojo;

public class Book {

    private String isbn;
private String title;
private double price;
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
} }

创建一个bookservice 类,使用properties拿到数据库相关配置,之后把查询结果放到List中

package com.service;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; import bookpojo.Book; public class BookService {
static String driver ;//="com.mysql.jdbc.Driver";
static String url;//="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
static String user;//="root";
static String password;//="3edc4rfv";
public BookService()
{
try{
Properties p=new Properties();
p.load(this.getClass().getResourceAsStream("db.properties"));
driver=p.getProperty("driver");
url=p.getProperty("url");
user=p.getProperty("username");
password=p.getProperty("password");
System.out.println(driver+url+user+password);
}
catch(Exception e)
{
e.printStackTrace();
}
} public List getBookList()
{
List list=new ArrayList();
try{
Class.forName(driver);
Connection con= DriverManager.getConnection(url,user,password);
Statement stmt=con.createStatement();
java.sql.ResultSet rs=stmt.executeQuery("select * from tbl_books;");
while(rs.next())
{
Book book=new Book();
book.setIsbn(rs.getString("isbn"));
book.setPrice(rs.getDouble("price"));
book.setTitle(rs.getString("title"));
list.add(book); } rs.close();
con.close(); }
catch(Exception e)
{
e.printStackTrace();
} return list; } }

创建一个BookTagHandle继承 SimpleTagSupport

package com.tag;

import java.io.IOException;
import java.util.List; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport; import bookpojo.Book; public class BookTagHandle extends SimpleTagSupport { @Override
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
JspWriter out=this.getJspContext().getOut();
List<Book> list=(List<Book>) this.getJspContext().findAttribute("booklist");
for(Book o:list)
{
out.print(o.getIsbn()+"\t"+o.getTitle()+"\t"+o.getPrice()+"<br>");
} } }

将mysql-connector5.0-bin.jar放在WebRoot/WEB-INF/lib目录下

将自定义标签放在WebRoot/WEB-INF,名字为book.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Application Tag Library</shortname>
<uri>http://jakarta.apache.org/taglibs/struts-example-1.0</uri>
<info></info> <tag>
<name>display</name>
<tagclass>com.tag.BookTagHandle</tagclass>
<bodycontent>empty</bodycontent>
<info></info> </tag> </taglib>

在booklist.jsp页面添加

<%@ taglib uri="WEB-INF/book.tld" prefix="book" %> 

在body标签添加

<td width="695">
<table>
<tr>
<td width="3%">
&nbsp;
</td>
<td width="97%">
<table width="688">
<tr>
<TD width='20%' height="30" align='center'>
ISBN
</TD>
<TD width='40%' align='center'>
TITLE
</TD> <TD align='center' width="20%">
PRICE
</TD>
</tr>
<tr>
<td colspan='5'>
<book:display/>
</td>
</tr>

大功告成

java web 学习 --第十天(Java三级考试)的更多相关文章

  1. Java Web学习(十)Java拦截器

    文章更新时间:2020/04/07 一.引言 既然要用拦截器,首先先得简单了解一下什么是拦截器: 概念:java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Actio ...

  2. java web 学习 --第九天(Java三级考试)

    第八天的学习内容如下:http://www.cnblogs.com/tobecrazy/p/3468458.html Java servlet 技术 Servlet是使用java servlet应用程 ...

  3. Java Web学习(十二)Tomcat核心

    一.引言 其实按道理来说,学习Java web应该在前面的篇幅就写有关tomcat相关的知识点,不过近期看了一些资料,觉得以前仅仅只是知道用tomcat去发布我的项目,一些细节的东西也没有好好总结,这 ...

  4. java web学习总结(十九) -------------------监听器简单使用场景

    一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听器技术来实现这个功能了. 1 package me.gacl.web.listener; 2 3 ...

  5. java web学习总结(十八) -------------------过滤器的高级使用

    在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...

  6. java web学习总结(十六) -------------------数据库连接池

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  7. java web 学习 --第一天(Java三级考试)

    1.Servlet servlet是运行在web server或 application server端的Java程序,主要用于在服务器端产生动态内容. servlet 在服务器端主要有以下作用 读取 ...

  8. Java Web学习(十一)Java过滤器

    一.引言 上一篇文章学习了java三大器的拦截器,拦截器主要是针对于action请求进行拦截处理的,那么对于requst的一些信息如果在调用前,想先进行过滤和处理,那么就要使用到第二个神器,也就是本文 ...

  9. java web学习总结(十四) -------------------JSP原理

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

随机推荐

  1. JBoss7 安装配置

    一.下载安装 1.下载地址: http://www.jboss.org/jbossas/downloads ,下载Certified Java EE 6 Full Profile版本. 2.解压 jb ...

  2. Android Studio-设置放大代码编辑区

    原有的快捷键是ctrl+shift+F12,现在我修改成了Ctrl+M.

  3. 【转】Flume(NG)架构设计要点及配置实践

    Flume(NG)架构设计要点及配置实践   Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...

  4. 使用cachemanager做缓存(Session的缓存)

    1.我在这里直接用 cachemanager.redis 往redis里面存储缓存数据2.步骤 1)下载CacheManager.Redis(包含了CacheManager.Core) 下载Stack ...

  5. 如何判断PHP 是线程安全还是非线程安全的

    什么是线程安全与非线程安全? 线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有可能出现数据不一致的情况. 线程安全由于要确保数据的一致性,所以对资源的读写进行了控制,换句话说增加了系统 ...

  6. c++异常总结

    堆栈辗转开解(stack-unwinding):如果一个函数中出现异常,在当前函数内即通过 try..catch 捕捉(且捕捉到)的话,可以继续往下执行:如果不捕捉(或未捕捉到)就会抛出(与通过 th ...

  7. 深入浅出的javascript的正则表达式学习教程

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  8. 让ie浏览器支持html5新标签的解决方法(使用html5shiv)

    没估计错的话旧版浏览器都是不识别这些新增的标签所以都是用行内元素来处理解决的,所以,有一个解决办法的突破口就是让它变成块状元素就不会处于同一行了,这样在新旧浏览器都是可以显示同样的效果,再者就是让浏览 ...

  9. 基于iSCSI的SQL Server 2012群集测试(五)--镜像,作业,复制分发测试

    7.1.镜像测试 群集可以正常镜像到非群集环境,本次测试采用,无见证服务器的sql server验证的镜像连接,不同的是群集环境的镜像IP是采用SQL Server虚拟IP进行通信连接. 群集服务器: ...

  10. 【学习】一本案例驱动的jQuery Mobile入门书

    清华大学出版社推出的<构建跨平台APP:jQuery Mobile移动应用实战> 提供的全是jQuery Mobile的案例: 手机入侵 题库应用 音乐专辑 通讯录 新闻列表 销售排名 九 ...