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 ...
随机推荐
- clearfix--清除浮动
.clearfix { zoom: ; display: table; width: %; } .clearfix:after { content: " "; display: b ...
- c++异常总结
堆栈辗转开解(stack-unwinding):如果一个函数中出现异常,在当前函数内即通过 try..catch 捕捉(且捕捉到)的话,可以继续往下执行:如果不捕捉(或未捕捉到)就会抛出(与通过 th ...
- PHP 使用命名空间(namespace),实现自动加载
示例: #/DB/MySql.class.php也就是DB文件夹下有MySql.class.php文件 namespace DB; class MySql { public function __co ...
- .NET中的工作目录一览!
定义: 当前工作目录——进行某项操作的目的目录,会随着OpenFileDialog.SaveFileDialog等对象所确定的目录而改变. 当前执行目录——该进程从中启动的目录,即文件自身 ...
- 【活动】不用买书,不用花钱,可以免费看HTML5入门连载了
清华大学出版社推出的<HTML 5网页开发实例详解>适合HTML 5开发初学者和前端开发工程师.本书一经上市,就获得了读者的一致好评,为感谢读者,推出本书的连载活动. 本书术新颖.与时 ...
- cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- hadoop之 mr输出到hbase
1.注意问题: 1.在开发过程中一定要导入hbase源码中的lib库否则出现如下错误 TableMapReducUtil 找不到什么-- 2.编码: import java.io.IOExceptio ...
- Oracle添加数据报文字与格式字符串不匹配错误
今天在学习Oracle时碰到一个错:文字与格式字符串不匹配. 我在Oracle数据库中创建了一张表: --创建员工表employee create table employee ( empon ) n ...
- laravel路由基础
基础: 所有的laravel路由都定义在 app/Http/routes.php 这个文件里,会被框架自带加载.简单的路由会接受一个URI和一个Closure类. Route::get('foo', ...
- SQL按指定文字顺序进行排序(中文或数字等)
在有些情况下我们需要按指定顺序输出数据,比如选择了ID in(3,1,2,5,4)我们希望按这个3,1,2,5,4的顺序输出,这样只使用order by ID是无法实现的, 但是我们可以使用order ...