一、汽车浏览与售卖网
1.项目介绍:此项目运用jsp技术与JDBC技术实现了把页面与数据库的交互。满足了客户在
浏览网页的同时可以预订汽车,也让经销商减去了成本和时间。同时可以做到数据库与页面
的同步更新,在管理员登录网页时可以登录后台对网页及数据库的管理。管理员身份可以对
汽车进行添加,删除,并且可以修改汽车的价格和描述,也可以对注册的用户进行身份的修
改。因为只有一周时间和是自己从数据库到页面到功能实现再到后台都是自己写,所以项目
还不算太完善,离自己心中的目标还差一些。
2.项目技术: 有html、jQuery、JavaScript、ajax、servlet、easyui框架、MVC分层架构
3,项目的包package:如图所示
3
4:webRoot下的css,js,jquer和jsp,如图所示:
5,页面中显示汽车详细信息:
package com.etc.car.biz;
import java.sql.SQLException;
import java.util.List;
import java.util.Set;
import com.etc.car.dao.CarDetailDao;
import com.etc.car.entity.Cars;
import com.etc.car.entity.Order;
import com.etc.car.entity.User;
/**
*
* @author 简林威
*
*/
public class CarDetailBiz {
CarDetailDao dao = new CarDetailDao() ;
//根据cid查询车的信息
public Cars getcar(int cid) throws SQLException {
return dao.getcar(cid);
}
//根据cid查询图片
public byte[] getcarimage( int cid) throws SQLException {
return dao.getcarimage( cid);
}
//加入购物车
public List<Cars> addmycart(Set<Integer> cids) throws SQLException {
return dao.addmycart(cids) ;
}
//添加订单
public void addorder(Cars car, User user, int buycount) throws SQLException {
dao.addorder(car ,user ,buycount) ;
}
//查看订单信息
public Order lookorder(int i) throws SQLException {
return dao.lookorder(i);
}
}
servlt层:
package com.etc.car.control;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
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.etc.car.biz.CarDetailBiz;
import com.etc.car.entity.Cars;
/**
*
* @author 简林威
*
*/
public class DetailServlet extends HttpServlet {
public DetailServlet() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
CarDetailBiz cdb = new CarDetailBiz() ;
Cars car = null ;
int cid = Integer.parseInt(request.getParameter("cid"));
try {
car = cdb.getcar(cid) ;
request.setAttribute("car", car) ; //传值
request.getRequestDispatcher("main/Detail.jsp").forward(request, response); //转到页面
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void init() throws ServletException {
// Put your code here
}
}
Dao层:
package com.etc.car.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.etc.car.entity.Cars;
import com.etc.car.entity.Order;
import com.etc.car.entity.User;
/**
*
* @author 简林威
*
*/
public class CarDetailDao extends BaseDao{
//根据汽车id获取数据库中汽车car表中的数据
//查看详情,除图片外
public Cars getcar( int cid ) throws SQLException{
conn() ;
String sql = "select cid , cname , price , birthdate , color ,describe ,carcount from cars where cid = ? " ;
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, cid) ;
ResultSet rs = ps.executeQuery() ;
Cars cars = new Cars() ;
while(rs.next()){
cars.setCid(rs.getInt("cid")) ;
cars.setCname(rs.getString("cname"));
cars.setPrice(rs.getDouble("price")) ;
cars.setBirthdate(rs.getString("birthdate")) ;
cars.setColor(rs.getString("color")) ;
cars.setDescribe(rs.getString("describe"));
cars.setCarcount(rs.getInt("carcount")) ;
}
ps.close() ;
rs.close() ;
return cars ;
}
//根据cid查询图片
public byte[] getcarimage(int cid) throws SQLException{
conn() ;
String sql ="select image from cars where cid =?" ;
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, cid);
ResultSet rs = ps.executeQuery() ;
byte[] img = null ;
while(rs.next()){
img = rs.getBytes("image");
}
ps.close() ;
rs.close() ;
return img ;
}
//加入购物车
public List<Cars> addmycart(Set<Integer> cids) throws SQLException {
conn() ;
Object[] cid = cids.toArray();
String str = null;
for(int i =0 ; i<cid.length ;i++){
if(i == 0 ){
str = cid[i].toString();
}else{
str = str + "," + cid[i] ;
}
}
String sql ="select * from cars where cid in ("+str+") " ;
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery() ;
List<Cars> cars = new ArrayList<Cars>() ;
while(rs.next()){
Cars c = new Cars() ;
c.setCid(rs.getInt("cid"));
c.setCname(rs.getString("cname")) ;
c.setPrice(rs.getDouble("price"));
cars.add(c);
}
return cars;
}
//加入订单表
public void addorder(Cars car, User user, int buycount) throws SQLException {
conn() ;
String sql = "insert into orders values ((select nvl(max(oid),0)+1 from orders) , ? ,? ,? ,?,?,?,?,?)" ;
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, user.getId()) ;
ps.setInt(2, car.getCid()) ;
ps.setString(3, user.getUname()) ;
ps.setString(4, car.getCname()) ;
ps.setInt(5, buycount) ;
ps.setDouble(6, car.getPrice()*buycount) ;
ps.setString(7, user.getAddress()) ;
ps.setLong(8, user.getPhone()) ;
ps.executeUpdate() ;
//同时跟新用户余额
updateuser(user.getId() , car.getPrice()*buycount) ;
con.close() ;
}
//更新用户表中的余额
public void updateuser(int id , double allmoney ) throws SQLException{
conn() ;
String sql ="update users set money = money - ? where id = ? " ;
PreparedStatement ps = con.prepareStatement(sql) ;
ps.setDouble(1, allmoney) ;
ps.setInt(2, id);
ps.executeUpdate() ;
con.close() ;
ps.close() ;
}
//查看订单信息
public Order lookorder(int i) throws SQLException {
conn() ;
String sql ="select * from orders where id = ?" ;
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, i) ;
ResultSet rs = ps.executeQuery() ;
Order o = null ;
while(rs.next()){
o.setOid(rs.getInt("oid")) ;
o.setId(rs.getInt("id")) ;
o.setCid(rs.getInt("cid")) ;
o.setCname(rs.getString("cname")) ;
o.setUname(rs.getString("uname")) ;
o.setBuycount(rs.getInt("buycount")) ;
o.setAllmoney(rs.getDouble("allmoney")) ;
o.setAddress(rs.getString("address")) ;
o.setPhone(rs.getLong("phone")) ;
}
return o;
}
}
连接数据库:JDBC
package com.etc.car.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author 简林威
*
*/
public class BaseDao {
Connection con = null ;
//连接数据库
public void conn() throws SQLException{
try {
Class.forName("oracle.jdbc.driver.OracleDriver") ; //加载驱动
con = DriverManager.getConnection("jdbc:oracle:thin:@10.0.15.16:1521:orcl " ,"fzh","fzh");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//关闭数据库
public void close() {
if(con != null){
try {
con.close() ;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
JSP页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>车辆详情页</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href='http://fonts.useso.com/css?family=Anaheim' rel='stylesheet' type='text/css'>
<link href="css/style.css" rel="stylesheet" type="text/css" media="all" />
<!--image slider-->
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script src="js/jquery-slider.js" type="text/javascript"></script>
<script src="js/easyResponsiveTabs.js" type="text/javascript"></script>
<link href="css/easy-responsive-tabs.css" rel="stylesheet" type="text/css" media="all"/>
<link rel="stylesheet" href="css/global.css">
<script src="js/slides.min.jquery.js"></script>
<script>
$(function(){
$('#products').slides({
preload: true,
preloadImage: 'img/loading.gif',
effect: 'slide, fade',
crossfade: true,
slideSpeed: 350,
fadeSpeed: 500,
generateNextPrev: true,
generatePagination: false
});
});
</script>
</head>
<body>
<div class="wrap">
<div class="header">
<div class="logo">
<h1><a href="index.html"><img src="images/logo.png" alt=""></a></h1>
</div>
<div class="h_right">
<div class="drp-dwn">
<ul>
<li>
<h3>请选择语言 :</h3>
</li>
<li>
<select onChange="window.location=this.options[this.selectedIndex].value">
<option value="">中文</option>
<option value="">English</option>
</select>
</li>
<li>
<h3 style="margin-left: 10px;">货币 :</h3>
</li>
<li>
<select onChange="window.location=this.options[this.selectedIndex].value">
<option value="">人民币</option>
<option value="">美元</option>
</select>
</li>
</ul>
</div>
<div class="header_top_right">
<div class="login"> <span><a href="login.html"><img src="images/login.png" alt=" " title="登录"></a></span> </div>
<div class="shopping_cart">
<div class="cart_img"><a href="#"><img title="购物车" src="images/header_cart.png"> </a> </div>
</div>
<div class="clear"></div>
</div>
</div>
<div class="clear"></div>
<div class="h_main">
<ul class="nav">
<li class="active"><a href="<%=basePath%>index">首页</a></li>
<li><a href="maintain.html">保养</a></li>
<li><a href="repair.html">维修</a></li>
<li><a href="contact.html">联系我们</a></li>
</ul>
<div class="search">
<form>
<input type="text" value="">
<input type="submit" value="">
</form>
</div>
<div class="clear"></div>
</div>
</div>
<div class="main">
<div class="main1">
<div class="details">
<div class="product-details">
<div class="images_3_of_2">
<div id="container">
<div id="products_example">
<div id="products">
<div class="slides_container"> <a href="#" target="_blank"><img src="<%=basePath%>CarImageServlet?cid=${car.cid}" alt=" " /></a> </div>
<ul class="pagination">
<li><a href="#"><img src="images/d_pic1.jpg" alt="车型1 " /></a></li>
<li><a href="#"><img src="images/d_pic2.jpg" alt="车型2" /></a></li>
<li><a href="#"><img src="images/d_pic3.jpg" alt="车型3" /></a></li>
<li><a href="#"><img src="images/d_pic4.jpg" alt="车型4 " /></a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="desc span_3_of_2">
<h2>${car.cname}</h2>
<p>${car.describe }</p>
<div class="price">
<p>价格 : <span>${car.price}元</span></p>
</div>
<div class="available">
<p>请选择购买的数量:</p>
<ul>
<li>颜色:${car.color }
</li>
<li>购买数量:
<select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</li>
<li>
库存:${car.carcount }辆
</li>
</ul>
</div>
<div class="share-desc">
<div class="share">
<p>分享产品 :</p>
<ul>
<li><a href="https://qzone.qq.com/"><img src="images/icon_1.png" alt="QQ空间"></a></li>
<li><a href="http://service.weibo.com/share/share.php?url=http%3A%2F%2Fopen.weibo.com%2Fsharebutton&type=icon&ralateUid=5632828618&language=zh_cn&searchPic=true&style=number"><img src="images/icon_2.png" alt="微博"></a></li>
</ul>
</div>
<div class="button1"><span><a href="<%=basePath %>MyCartServlet?cid=${car.cid } " class="button button-rounded" >加入购物车</a></span></div>
<div class="clear"></div>
</div>
<div class="wish-list">
<ul>
<li class="wish"><a href="#">收藏</a></li>
</ul>
</div>
</div>
<div class="clear"></div>
</div>
<div class="product_desc">
<div id="horizontalTab" style="display: block; width: 100%; margin: 0px;">
<ul class="resp-tabs-list">
<li class="resp-tab-item resp-tab-active" aria-controls="tab_item-0" role="tab">车辆介绍</li>
<li class="resp-tab-item" aria-controls="tab_item-2" role="tab">观点评价</li>
<div class="clear"></div>
</ul>
<div class="resp-tabs-container">
<h2 class="resp-accordion resp-tab-active" role="tab" aria-controls="tab_item-0"><span class="resp-arrow"></span>车辆介绍</h2>
<div class="product-desc resp-tab-content resp-tab-content-active" style="display:block" aria-labelledby="tab_item-0">
<p>${car.describe }</p>
</div>
<h2 class="resp-accordion" role="tab" aria-controls="tab_item-2"><span class="resp-arrow"></span>观点评价</h2>
<div class="review resp-tab-content" aria-labelledby="tab_item-2">
<h4>以下评价来自互联网</h4>
<ul>
<li> 车辆造型评分:<a href="#"><img src="images/price-rating.png" alt=""></a></li>
<li> 车辆价格评分:<a href="#"><img src="images/value-rating.png" alt=""></a></li>
<li> 车辆性能评分 :<a href="#"><img src="images/quality-rating.png" alt=""></a></li>
</ul>
<p> 网友观点 :从数据库获取评价语</p>
<div class="your-review">
<h3>您如何评价这辆车?</h3>
<p>发表自己的评价:</p>
<form>
<div> <span>
<label>用户名<span class="red">*</span></label>
</span> <span>
<input type="text" value="">
</span> </div>
<div><span>
<label>您评价的内容:<span class="red">*</span></label>
</span> <span>
<input type="text" value="">
</span> </div>
<div> <span>
<label>评论观点:<span class="red">*</span></label>
</span> <span>
<textarea> </textarea>
</span> </div>
<div> <span>
<input type="submit" value="提交观点">
</span> </div>
</form>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
$('#horizontalTab').easyResponsiveTabs({
type: 'default', //Types: default, vertical, accordion
width: 'auto', //auto or any width like 600px
fit: true // 100% fit in a container
});
});
</script>
<div class="content_bottom">
<div class="text-h1 top1 btm">
<h2>车辆展示</h2>
</div>
<div class="div2">
<div id="mcts1"> <img src="<%=basePath %>images/d_pic2.jpg" alt=""/> <img src="<%=basePath %>images/d_pic1.jpg" alt="" /> <img src="<%=basePath %>images/d_pic3.jpg" alt="" /> <img src="<%=basePath %>images/d_pic4.jpg" alt=""/> <img src="<%=basePath %>images/d_pic1.jpg" alt="" /> <img src="<%=basePath %>images/d_pic4.jpg" alt="" /> </div>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div class="footer">
<div class="f_left">
<div class="f_nav">
<ul>
<li><a href="">关于我们</a></li>
<li><a href="">网站地图</a></li>
<li><a href="">售后服务</a></li>
<li><a href="">搜索</a></li>
<li><a href="">联系我们</a></li>
</ul>
</div>
<div class="copy">
<p class="w3-link">© 中软国际 CoolPlay爱车网java开发项目组怪兽威少 </p>
</div>
</div>
<div class="social-icons">
<ul>
<li class="icon1"><a href="#" target="_blank"> </a></li>
<li class="icon2"><a href="#" target="_blank"> </a></li>
<li class="icon3"><a href="#" target="_blank"> </a></li>
<li class="icon4"><a href="#" target="_blank"> </a></li>
<div class="clear"></div>
</ul>
</div>
<div class="clear"></div>
</div>
</div>
</body>
</html>
Xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>DetailServlet</servlet-name>
<servlet-class>com.etc.car.control.DetailServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>CarImageServlet</servlet-name>
<servlet-class>com.etc.car.control.CarImageServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>MyCartServlet</servlet-name>
<servlet-class>com.etc.car.control.MyCartServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>PayServlet</servlet-name>
<servlet-class>com.etc.car.control.PayServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.etc.car.control.LoginServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>com.etc.car.control.IndexServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.etc.car.control.RegisterServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ValidateCodeServlet</servlet-name>
<servlet-class>com.etc.car.control.ValidateCodeServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>VaildateServlet</servlet-name>
<servlet-class>com.etc.car.control.VaildateServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>AddCarsServlet</servlet-name>
<servlet-class>com.etc.car.control.AddCarsServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UpdateRoleServlet</servlet-name>
<servlet-class>com.etc.car.control.UpdateRoleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DetailServlet</servlet-name>
<url-pattern>/DetailServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CarImageServlet</servlet-name>
<url-pattern>/CarImageServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyCartServlet</servlet-name>
<url-pattern>/MyCartServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>PayServlet</servlet-name>
<url-pattern>/PayServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ValidateCodeServlet</servlet-name>
<url-pattern>/ValidateCodeServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>VaildateServlet</servlet-name>
<url-pattern>/VaildateServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddCarsServlet</servlet-name>
<url-pattern>/AddCarsServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UpdateRoleServlet</servlet-name>
<url-pattern>/UpdateRoleServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
二,三味书屋网络小说网站
1. 开发工具:MyEclipse+Tomact+Oracle+PowerDesigner
2.项目介绍:此项目是服务广大网络小说的爱好者,和网络小说原创者的网站。这是一个
小组项目,运用了Spring + struts2 + Hibernate 框架技术,在此次项目中数据库的设计
给用户分了三种身份,管理员,作家和普通读者,我在此次项目也参加了框架的搭建整合,
并且完成了用户注册,登录,和作者上传作品,管理员后台的页面和功能,并对数据库进行
优化。
3.技术要点:运用了DIV+CSS+JS页面布局,ssh框架技术,SQL语言。4,主要文件及包:
5,此项目运用了Spring+Struts2+Hibernate框架技术,
在myeclipse中加载完项目所需要的jar包后会自动生成对应的xml配置文件,根据项目功能需要然后对项目进行配置。
如图struts.xml文件配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="books" extends="struts-default">
<action name = "loginAction" class = "loginAction">
<result name = "fail">/login.jsp</result>
<result name = "loginsucess">/index.jsp</result>
</action>
<action name = "regesterAction" class = "regesterAction">
<result name = "regestersucess">/regester.jsp</result>
<result name = "regesterfail">/regester.jsp</result>
</action>
<action name = "authorAction_*" class = "authorAction" method="{1}">
<result name = "upok">/authorUp.jsp</result>
<result name = "upfail">/authorUp.jsp</result>
<result name = "deleok">/authorManage.jsp</result>
<result name = "delefail">/authorManage.jsp</result>
<result name = "lookok" >/authorManage.jsp</result>
<result name = "lookfail" >/authorManage.jsp</result>
<result name = "updateok">/authorManage.jsp</result>
<result name = "updatefail">/updateBook.jsp</result>
<result name = "updatelookok">/updateBook.jsp</result>
<result name = "updateSectionOk">/updateSection.jsp</result>
<result name = "updateSectionFail">/updateSection.jsp</result>
</action>
<action name = "lookBooksPicAction" class = "lookBooksPicAction">
<result name ="ok">/authorManage.jsp</result>
<result name = "fail">/authorManage.jsp</result>
</action>
<action name = "userAction_*" class = "userAction" method="{1}">
<result name = "saveok">/saveMoney.jsp</result>
<result name = "savefail">/saveMoney.jsp</result>
<result name = "lookMoneyOk">/index.jsp</result>
<result name = "lookMoneyFail">/index.jsp</result>
</action>
</package>
</struts>
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,所以连接数据库时就使用Hibernate,
Hibernate.xml配置文件如图所示:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="connection.url">jdbc:oracle:thin:@10.0.15.167:1521:orcl</property>
<property name="connection.username">book</property>
<property name="connection.password">book</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="myeclipse.connection.profile">book</property>
<property name="connection.autocommit">true</property>
<property name="show_sql">true</property>
<mapping resource="com/etc/books/entity/Section.hbm.xml" />
<mapping resource="com/etc/books/entity/Buser.hbm.xml" />
<mapping resource="com/etc/books/entity/Mybooxshelf.hbm.xml" />
<mapping resource="com/etc/books/entity/Books.hbm.xml" />
</session-factory>
</hibernate-configuration>
接下来是用Spring对struts和Hibernate进行整合:
spring自动生成的配置文件是application.xml,配置后的主要代码如图所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 配置sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
<!-- 配置action -->
</bean>
<bean id="loginAction" class="com.etc.books.control.LoginAction">
<property name="biz" ref="fileBiz"></property>
</bean>
<bean id = "regesterAction" class = "com.etc.books.control.RegesterAction">
<property name="biz" ref="fileBiz"></property>
</bean>
<bean id = "authorAction" class = "com.etc.books.control.AuthorAction">
<property name="biz" ref = "fileBiz"></property>
</bean>
<bean id = "userAction" class = "com.etc.books.control.UserAction">
<property name="biz" ref = "fileBiz"></property>
</bean>
<bean id = "lookBooksPicAction" class = "com.etc.books.control.LookBooksPicAction">
<property name="biz" ref = "fileBiz"></property>
</bean>
<bean id="fileDao" class="com.etc.books.dao.FileDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="fileBiz" class="com.etc.books.biz.FileBizImpl">
<property name="dao" ref="fileDao"></property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务处理 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="login*" propagation="REQUIRED" rollback-for="Throwable" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* com.etc.books.biz.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>
</beans>
6,框架搭好后,实现网页的主要功能使用接口编程,而Spring是面向切面AOP编程:
此项目功能的接口如图所示:
在Dao层的实现类是页面与数据库交互的主要“阵地”,主要代码:
package com.etc.books.dao;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Clob;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import javax.sql.rowset.serial.SerialClob;
import javax.sql.rowset.serial.SerialException;
import org.apache.commons.io.FileUtils;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.lob.SerializableBlob;
import org.hibernate.transform.Transformers;
import com.etc.books.entity.Books;
import com.etc.books.entity.Buser;
import com.etc.books.entity.Section;
/**
*
* @author 简林威
*
*/
public class FileDaoImpl extends BaseHibDaoImpl implements FileDao {
//登录
public Buser login(String username, String pwd) {
String sql = "select * from buser where username = ? and pwd = ?" ;
openconnection();
SQLQuery q = session.createSQLQuery(sql) ;
q.setString(0, username) ;
q.setString(1, pwd) ;
Iterator it = q.list().iterator() ;
Buser user = new Buser() ;
while (it.hasNext()){
Object[] obj = (Object[]) it.next() ;
user.setUsername(username);
user.setUserid( Integer.valueOf(obj[0].toString()));
user.setRole(obj[3].toString()) ;
if(obj[4].toString().equals("0")){
user.setMoney(0.00) ;
}else{
user.setMoney(Double.valueOf(obj[4].toString()));
}
user.setPhone(obj[5].toString());
user.setEmail(obj[6].toString()) ;
}
return user;
}
//注册
public boolean regester(Buser user) {
String sql = "insert into buser values ( (select max(userid) from buser)+1 ,?,?,?,0,?,?) ";
openconnection() ;
SQLQuery q = session.createSQLQuery(sql);
q.setString(0, user.getUsername());
q.setString(1, user.getPwd()) ;
q.setString(2, user.getRole()) ;
q.setString(3, user.getPhone()) ;
q.setString(4, user.getEmail()) ;
boolean flag = false ;
if( q.executeUpdate() == 1 ){
flag = true ;
}
return flag;
}
//作者上传
public boolean authorUp(Books bs) {
String sql = "insert into books values " +
"( (select max(bookid) from books)+1 , ?,?,?,?," +
"?,?,'否','0','完本',?,sysdate,null)" ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setString(0, bs.getBname()) ;
q.setString(1, bs.getAutor()) ;
q.setString(2, bs.getDes());
q.setBinary(3, bs.getPic()) ;
q.setString(4, bs.getType()) ;
q.setString(5, bs.getFree()) ;
q.setString(6, bs.getTotalword()) ;
boolean flag = false ;
if( q.executeUpdate() == 1){
flag = true ;
}
return flag ;
}
// 根据登录的用户名查询他的作品
public List<Books> lookBook(String username) {
String sql = "select bookid , bname ,des ,type ,free from books where autor = ? " ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setString(0, username) ;
q.addScalar("bookid" , Hibernate.INTEGER);
q.addScalar("bname" , Hibernate.STRING) ;
q.addScalar("type" , Hibernate.STRING) ;
q.addScalar("free" , Hibernate.STRING) ;
q.addScalar("des" , Hibernate.STRING) ;
q.setResultTransformer(Transformers.aliasToBean(Books.class)) ;
return q.list();
}
//根据bookid查询图片
public Books lookBookPic(Integer bookid) {
String sql = "select pic from books where bookid = ?" ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql);
q.setInteger(0, bookid);
Iterator it = q.list().iterator() ;
Books books = new Books() ;
byte[] pic = null ;
while(it.hasNext()){
Object obj = it.next();
SerializableBlob blob= (SerializableBlob) obj ;
try {
if(blob != null){
InputStream ins = blob.getBinaryStream() ;
pic = new byte[(int)blob.length()] ;
ins.read(pic);
books.setPic(pic) ;
ins.close() ;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return books;
}
//作者删除书籍
public boolean deleBook(int bookid_1) {
String sql = "delete books where bookid = ?" ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setInteger(0, bookid_1) ;
boolean flag = false ;
if(q.executeUpdate() == 1){
flag = true ;
}
return flag;
}
//作者修改书籍信息
public boolean updateBook(Books books) {
String sql = "update books set bname = ? , des = ? ," +
" pic = ? ,type = ? ,free = ? ,totalword = ? " +
"where bookid = ?" ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setString(0, books.getBname()) ;
q.setString(1, books.getDes()) ;
q.setBinary(2, books.getPic()) ;
q.setString(3, books.getType()) ;
q.setString(4, books.getFree()) ;
q.setString(5, books.getTotalword()) ;
q.setInteger(6, books.getBookid()) ;
boolean flag = false ;
if(q.executeUpdate() == 1){
flag = true ;
}
return flag ;
}
//修改时查看
public Books updateLook(Integer bookid_1) {
String sql = "select bookid ,bname ,des ,type ,totalword from books where bookid = ? " ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setInteger(0, bookid_1) ;
Iterator it = q.list().iterator() ;
Books books = new Books() ;
while(it.hasNext()){
Object[] obj = (Object[]) it.next() ;
books.setBookid(Integer.valueOf(obj[0].toString()));
books.setBname(obj[1].toString());
books.setDes(obj[2].toString());
books.setType(obj[3].toString()) ;
books.setTotalword(obj[4].toString());
}
return books;
}
//用户充值
public boolean saveMoney(String money ,Integer userid) {
String sql = "update buser set money = money + ? where userid = ? " ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
int money_1 = Integer.valueOf(money) ;
q.setInteger(0, money_1);
q.setInteger(1, userid) ;
boolean flag = false ;
if( q.executeUpdate() == 1 ){
flag = true ;
}
return flag;
}
//刷新金额
public Buser lookMoney(Integer userid) {
String sql = "select username ,money ,role from buser where userid = ?" ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setInteger(0, userid) ;
Iterator it = q.list().iterator() ;
Buser buser = new Buser() ;
while(it.hasNext()){
Object[] obj = (Object[]) it.next() ;
buser.setUsername(obj[0].toString());
buser.setMoney(Double.valueOf(obj[1].toString())) ;
buser.setRole(obj[2].toString());
}
return buser;
}
//作者上传章节内容
public boolean authorUpdateSection(Books books, Section s) {
boolean flag = false ;
try {
Clob content_1 = new SerialClob(s.getContent().toCharArray());
String sql = "insert into section (secid ,bookid ,section ,content,updatetime,url) " +
"values ((select max(secid) from section) +1 ,?,?,'"+content_1+"',sysdate,null) " ;
openconnection() ;
SQLQuery q = session.createSQLQuery(sql) ;
q.setInteger(0, books.getBookid());
q.setString(1, s.getSection()) ;
if(q.executeUpdate() == 1 ){
flag = true ;
}
} catch (SerialException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
}
项目的主要实现技术都已分解完毕,由于当时建数据库的时候是在北京基地,忘记备份建数据库SQL代码,写博客回到了学校,所以页面效果暂时截不了图。感谢收看!附上三味书屋使用说明书,纯手敲的http://dl.download.csdn.net/down11/20170531/e91144f0007c7af144c5bbc0b37fd056.docx?response-content-disposition=attachment%3Bfilename%3D%22%E4%B8%89%E5%91%B3%E4%B9%A6%E5%B1%8B%E7%BD%91%E7%AB%99%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.docx%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1496210870&Signature=PzqC8N%2BaNL0k6pQ%2B60SX3jvxz4A%3D