JavaEE实验二Word文档格式.docx
《JavaEE实验二Word文档格式.docx》由会员分享,可在线阅读,更多相关《JavaEE实验二Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
3.2设计封装了针对书籍表信息进行CRUD操作的工具JavaBean(DAO类);
3.3.利用JSP+JavaBean技术完成显示所有书籍信息的功能;
3.4.利用JSP+JavaBean技术完成对书籍信息的增加功能;
5.调试运行程序。
2.3测试数据与实验结果截图
2.3.1数据库建立:
2.3.2主界面显示
2.3.3添加
2.2.4主界面
2.2.5编辑
2.2.6删除
三、实验分析与小结:
(实验过程中遇到的问题分析、产生的原因以及解决方法)
3.1.开发模式的选择
开始我以为是用JSP+Javabean的模式开发,后来经老师提醒才知道是用dao层的方法写,不是纯JSP代码,又觉得既然用dao写,就干脆用mvc模式开发,JSP页面不在写Java代码,一律用jsp标签和jstl标签和el表达式来完成。
这样一来,也为以后的实验打好好维护的基础。
3.2.bean的关联。
由于表的关联,javabean的设置也做了改变,如下:
这样就带来了麻烦,怎样处理数据库的数据提取后封装到bean内部的问题。
经过尝试,解决了问题。
Presspress=newPress();
press.setPressname(rs.getString("
pressname"
));
book.setPressname(press);
需要在处理之前,先定义一个Press的bean对象,用对象press的方法实现数据封装,然后再把存有数据的press对象封装到另一个Bean对象book中这样就实现的bean的关联和数据的存储。
与之相反的,当取出数据时:
El表达式有:
${book.pressname.pressname}
3.3.参数的传递。
在做编辑这一块的时候,由于书籍有自增的主键(假设设为intsequence),所以就应该用sequence作为传递参数,可是我以为做删除和添加时,用书号(number)作为参数,觉得可以,最后做编辑的时候才发现出错,于是改为sequence。
改了以后,也出了错,主要是参数传递的太频繁,从主页面到编辑界面,然后到dao层,注意dao层的方法要在用到bean的同时,还要将它封装进bean中,以便下一次的参数传递,负责参数值丢失(用插桩法:
syso查看sequence的值,为0则丢失),点击编辑提交和删除,主界面会无效。
四、其它
(附源代码)
一、bean:
(2个)
1、bookbean
packagecn.hfuu.lv.test1.domain;
importjava.sql.Date;
publicclassBookInfo{
privateintsequence;
privateintnumber;
privateStringname;
privateStringauthor;
privatefloatprice;
privatePresspressname;
publicintgetNumber(){
returnnumber;
}
publicvoidsetNumber(intnumber){
this.number=number;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
publicStringgetAuthor(){
returnauthor;
publicvoidsetAuthor(Stringauthor){
this.author=author;
publicfloatgetPrice(){
returnprice;
publicvoidsetPrice(floatprice){
this.price=price;
publicPressgetPressname(){
returnpressname;
publicvoidsetPressname(Presspressname){
this.pressname=pressname;
publicintgetSequence(){
returnsequence;
publicvoidsetSequence(intsequence){
this.sequence=sequence;
2、pressbean
publicclassPress{
privateStringpresscode;
privateStringpressname;
publicStringgetPresscode(){
returnpresscode;
publicvoidsetPresscode(Stringpresscode){
this.presscode=presscode;
publicStringgetPressname(){
publicvoidsetPressname(Stringpressname){
二、JSP
<
%@pagelanguage="
java"
import="
java.util.*"
pageEncoding="
utf-8"
%>
%@pageimport="
java.sql.*"
%>
%@includefile="
/WEB-INF/inc/taglibs.jsp"
!
DOCTYPEHTMLPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
>
html>
<
head>
title>
书籍管理界面<
/title>
script>
functionbtnDelete(id){
if(confirm("
确认删除该条记录吗?
"
))
location.href="
/beanexample/servlet/BookDeleteServlet?
id="
+id;
}
/script>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=utf-8"
>
style>
table,tr,th,td{
border:
1px#00868Bsolid;
border-collapse:
collapse;
text-align:
center;
th{
background-color:
#96CDCD;
/style>
/head>
body>
ahref="
/beanexample/servlet/bookAddPreServlet"
添加<
/a>
/beanexample/jsp/pressmanagement.jsp"
出版社管理<
tableborder="
2"
width="
600px"
tr>
<
th>
书号<
/th>
书名<
作者<
价格<
出版社<
操作<
/tr>
c:
forEachitems="
${bookList}"
var="
book"
<
td>
${book.number}<
/td>
<
${book.name}<
${book.author}<
${book.price}<
${book.pressname.pressname}<
/beanexample/servlet/BookCompilePreServlet?
id=${book.sequence}"
编辑<
&
nbsp;
javascript:
void(0)"
onclick="
btnDelete('
${book.sequence}'
)"
删除<
/c:
forEach>
/table>
/body>
/html>
书籍添加<
#input{
margin-bottom:
5px;
0pxsolidblack;
formaction="
/beanexample/servlet/bookAddServlet"
method="
post"
table>
类别<
信息<
书号:
tdid="
input"
inputtype="
text"
name="
number"
书名:
name"
作者:
author"
价格:
price"
出版社:
selectname="
<
optionvalue="
0"
--请选择--<
/option>
${pressList}"
press"
<
${press.pressname}"
${press.pressname}<
/select>
td>
submit"
value="
提交"
reset"
重置"
/>
/form>
/beanexample/servlet/BookCompileServlet?
${book.number}"
${book.name}"
${book.author}"
${book.price}"
iftest="
${book.pressname.pressname==press.pressname}"
selected="
selected"
if>
三、Dao(2个)
packagecn.hfuu.lv.dao;
importjava.sql.*;
importjava.util.ArrayList;
importjava.util.List;
importcn.hfuu.lv.test1.domain.BookInfo;
importcn.hfuu.lv.test1.domain.Press;
importcn.hfuu.lv.util.DBUtil;
importcn.hfuu.lv.util.PageModel;
publicclassBookDao{
privateConnectionconn=null;
privateStatementstm=null;
privateResultSetrs=null;
privatePreparedStatementpstm=null;
publicvoidaddBookInfo(BookInfobook){
DBUtildbUtil=null;
try{
dbUtil=newDBUtil();
conn=dbUtil.getConnection();
Stringsql="
insertintobookinfo(number,name,author,price,presssnum)values(?
?
;
pstm=conn.prepareStatement(sql);
pstm.setInt(1,book.getNumber());
pstm.setString(2,book.getName());
pstm.setString(3,book.getAuthor());
pstm.setFloat(4,book.getPrice());
pstm.setInt(5,book.getPress().getPresssnum());
pstm.executeUpdate();
}catch(Exceptione){
e.printStackTrace();
}finally{
dbUtil.closePreparedStatement(pstm);
dbUtil.closeConnection(conn);
}
publicvoidupdateBookInfo(BookInfobook){
updatebookinfosetnumber=?
name=?
author=?
price=?
presssnum=?
wheresequence=?
pstm.setInt(6,book.getSequence());
publicListgetAllBookInfoList(){
ListbookList=newArrayList();
Stringsql="
selectbookinfo.sequence,bookinfo.number,bookinfo.name,bookinfo.author,bookinfo.price,bookinfo.presssnum,press.pressnamefrombookinfo,presswherebookinfo.presssnum=press.presssnumlimit0,7"
stm=conn.createStatement();
rs=stm.executeQuery(sql);
while(rs.next()){
BookInfobook=newBookInfo();
book.setSequence(rs.getInt("
sequence"
book.setNumber(rs.getInt("