java web 学习 --第十天(Java三级考试)
第九天学习内容: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%">
</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三级考试)的更多相关文章
- Java Web学习(十)Java拦截器
文章更新时间:2020/04/07 一.引言 既然要用拦截器,首先先得简单了解一下什么是拦截器: 概念:java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Actio ...
- java web 学习 --第九天(Java三级考试)
第八天的学习内容如下:http://www.cnblogs.com/tobecrazy/p/3468458.html Java servlet 技术 Servlet是使用java servlet应用程 ...
- Java Web学习(十二)Tomcat核心
一.引言 其实按道理来说,学习Java web应该在前面的篇幅就写有关tomcat相关的知识点,不过近期看了一些资料,觉得以前仅仅只是知道用tomcat去发布我的项目,一些细节的东西也没有好好总结,这 ...
- java web学习总结(十九) -------------------监听器简单使用场景
一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听器技术来实现这个功能了. 1 package me.gacl.web.listener; 2 3 ...
- java web学习总结(十八) -------------------过滤器的高级使用
在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...
- java web学习总结(十六) -------------------数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- java web 学习 --第一天(Java三级考试)
1.Servlet servlet是运行在web server或 application server端的Java程序,主要用于在服务器端产生动态内容. servlet 在服务器端主要有以下作用 读取 ...
- Java Web学习(十一)Java过滤器
一.引言 上一篇文章学习了java三大器的拦截器,拦截器主要是针对于action请求进行拦截处理的,那么对于requst的一些信息如果在调用前,想先进行过滤和处理,那么就要使用到第二个神器,也就是本文 ...
- java web学习总结(十四) -------------------JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
随机推荐
- 【8-19】java学习笔记01
JDK API文档 java SE 8 API文档:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downl ...
- oracle 中的dual表简介与用法
Dual表是每个数据库创建时默认生成的,该表仅有一列一行. 1)分析dual表执行,如下:
- lua 学习
尽管所有的脚本语言在特定领域都有自己的一席之地,但在游戏开发的世界里,Python 和 Lua 是非常适合的,因为它们可以直接调用C++的功能. lua最让人惊喜的地方应该是它的执行速度,目前没有任何 ...
- Request 传值 遇到的中文乱码问题
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xxxx.aspx.cs&quo ...
- mysql搜索引擎 小结
mysql搜索引擎 小结 mysql5.5以后,mysql默认使用InnoDB存储引擎. 若要修改默认引擎,可以修改配置文件中的default-storage-engine.可以通过show vari ...
- javascript 2048游戏
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- cf306 C. Divisibility by Eight(数学推导)
C. Divisibility by Eight time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- informatica通用命令方式启动workflow
#传mapping参数时#调用执行workflow,-sv informatica服务,-d 域 -u 用户,-p 密码 -folder知识库下的workflow所在文件夹,-wait wf_test ...
- C#遍历文件夹及文件
背景: 想自己实现一个网盘系统,于是需要用到遍历文件(夹)操作. C#基本知识梳理: 1.如何获取指定目录包含的文件和子目录 (1). DirectoryInfo.GetFiles():获取目录中(不 ...
- 关于outerWidth()属性
在写代码的时候,获取元素的宽度通常用到这个属性.此属性具有如下特点: 1.默认情况下,它的值为所有后代元素(含此元素本身)中最大的宽度值. 2.若某后代元素的display属性为none,那么在计算的 ...