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 ...
随机推荐
- 理解 AngularJS 的 Scope
一.遇到的问题 问题发生在使用 AngularJS 嵌套 Controller 的时候.因为每个 Controller 都有它对应的 Scope(相当于作用域.控制范围),所以 Controller ...
- 推荐近期15个 Node.js 开发工具
近来Node.js 越来月流行了,这个基于Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中,我们列出了2015年最佳的15个 Node.js 开发工具.这些 ...
- Roslyn词法分析器初使用
需:install-package:Microsoft.CodeAnalysis ]; NamespaceDeclarationSyntax NameSpaceDeclaration ...
- 如何查看 Linux是32位还是64位?
方法一:执行命令 file /sbin/init [root@localhost jianbao]# file /sbin/init /sbin/init: ELF 32-bit LSB shared ...
- CSS选择器的特殊性和LOVE HA
在CSS中当几个相同的选择器对同一个元素有不同的规则时,该怎么应用这些规则呢? 答案就是:CSS特殊性(CSS specificity) 选择器特殊性有选择器本身组成,特殊性由4个数值表述:0, 0, ...
- Why Reflection is slowly?(Trail: The Reflection API)
反射的使用 反射通常用于在JVM中应用程序运行中需要检查或者修改运行时行为的项目.这是一个相对高级的特性,并且仅仅可以被对深刻理解java原理的开发者使用.这里给出一个警告的意见,反射是一个强大的技术 ...
- DAY3 python群发短信
手机轰炸,burpsuit 抓取注册页面输入的手机号,然后每点击一次forword ,都开开始放行,发短信.也可以发到repeat 里面进行 ,重复发送短信. import requests impo ...
- 又一个绝对棒的对话框插件fancybox v1.3.4
http://www.jsfoot.com/jquery/demo/2011-07-30/fancybox/index.html jquery插件:fancybox Fancybox的特点如下: ...
- 关于NGUI与原生2D混用相互遮盖的问题心得
http://www.fzgh.org.cn/zuixindianying/144224.html Native2D自己可以使用Sort Layer来排序,每层又有不同的Order In Layer, ...
- leetcode 173. Binary Search Tree Iterator
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...