Web开发基础_Servlet学习_0024_项目练习(七)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coder_Boy_/article/details/82714049

项目名称:中国电信运营支持系统-网络版(七)


案例演示:

工程案例目录结构

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>netctoss</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>main</servlet-name>
  	<servlet-class>web.MainServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>main</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <!-- 每页显示行数 -->
  <context-param>
  	<param-name>size</param-name>
  	<param-value>5</param-value>
  </context-param>
</web-app>

find.jsp

<%@page pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
		<title>案例-NetCTOSS</title>
		<!--
			 当前:/netctoss/findCost.do
			 目标:/netctoss/styles/global.css
		 -->
		<link type="text/css" rel="stylesheet"  media="all" href="styles/global.css"/>	
		<link type="text/css" rel="stylesheet"  media="all" href="styles/global_color.css"/>
		<script language="javascript" type="text/javascript">
			//排序按钮的点击事件
			function sort(btnObj){
				if(btnObj.className=="sort_desc"){
					btnObj.className="sort_asc";
				}else{
					btnObj.className="sort_desc";
				}
			}
			
			//启用
			function startFee(){
				var r = window.confirm("确定要启用此资费吗?资费启用后将不能修改和删除。")
				document.getElementById("operate_result_info").style.display="block";
			}
			
			//删除
			function deleteFee(costId){
				var r = window.confirm("确定要删除此资费吗?");
				
				if(r){
					location.href="deleteCost.do?costId="+costId;
				}
			}
		</script>
	</head>
	<body>
		<!-- Logo区域开始 -->
		<div id="header">
			<img src="images/logo.png" alt="logo" class="left" />
			<a href="#">[退出]</a>
		</div>
		<!-- Logo区域结束 -->
		<!-- 导航区域开始 -->
		<div id="navi">
			<ul id="menu">
				<li><a href="../index.html" class="index_off"></a></li>
				<li><a href="../role/role_list.html" class="role_off"></a></li>
				<li><a href="../admin/admin_list.html" class="admin_off"></a></li>
				<li><a href="../fee/fee_list.html" class="fee_off"></a></li>
				<li><a href="../account/account_list.html" class="account_off"></a></li>
				<li><a href="../service/service_list.html" class="service_off"></a></li>
				<li><a href="../bill/bill_list.html" class="bill_off"></a></li>
				<li><a href="../report/report_list.html" class="report_off"></a></li>
				<li><a href="../user/user_info.html" class="information_off"></a></li>
				<li><a href="../user/user_modi_pwd.html" class="password_off"></a></li>
			</ul>
		</div>
		<!-- 导航区域结束 -->
		<!-- 主要区域开始 -->
		<div id="main">
			<form action="" method="">
				<!-- 排序 -->
				<div class="search_add">
					<div>
						<!-- <input type="button" value="月租" class="sort_asc" onclick="sort(this)"/>
						<input type="button" value="基费" class="sort_asc" onclick="sort(this)"/>
						<input type="button" value="时长" class="sort_asc" onclick="sort(this)"/> -->
					</div>
					<!-- 
						当前:/netctoss/findCost.do
						目标:/netctoss/toAddCost.do
					 -->
					<input type="button" value="增加" class="btn_add" onclick="location.href='toAddCost.do';" />
				</div>
				<!-- 启用操作的操作提示 -->
				<div id="operate_result_info" class="operate_success">
					<img src="images/close.png" alt="" onclick="this.parentNode.style.display='none';"/>
					删除成功!
				</div>
				<!-- 数据区域:用表格展示数据 -->
				<div id="data">
					<table id="datalist">
						<tr>
							<th>资费ID</th>
							<th class="width100">资费名称</th>
							<th>基本时长</th>
							<th>基本费用</th>
							<th>单位费用</th>
							<th>创建时间</th>
							<th>开通时间</th>
							<th class="width50">状态</th>
							<th class="width200"></th>
						</tr>
						<c:forEach items="${costs }" var="c">
						<!-- <tr>
							<td>1</td>
							<td><a href="fee_detail.html">包 20 小时</a></td>
							<td>20 小时</td>
							<td>24.5 元</td>
							<td>3.00 元</td>
							<td>2013/01/01 00:00:00</td>
							<td></td>
							<td>暂停</td>
							<td>
								<input type="button" value="启用" class="btn_start" onclick="startFee();"/>
								<input type="button" value="修改" class="btn_modify" onclick="location.href='fee_modi.html'"/>
								<input type="button" value="删除" class="btn_delete" onclick="deleteFee();"/>
							</td>
						</tr>
						<tr>
							<td>2</td>
							<td><a href="fee_detail.html">包 40 小时</a></td>
							<td>40 小时</td>
							<td>40.50 元</td>
							<td>3.00 元/小时</td>
							<td>2013/01/21 00:00:00</td>
							<td>2013/01/23 00:00:00</td>
							<td>开通</td>
							<td></td>
						</tr> -->
						<tr>
							<td>${c.costId }</td>
							<td><a href="fee_detail.html">${c.name }</a></td>
							<td>${c.baseDuration } 小时</td>
							<td>${c.baseCost } 元</td>
							<td>${c.unitCost } 元/小时</td>
							<td><fmt:formatDate value="${c.creatime }" pattern="yyyy/MM/dd" /></td>
							<td><fmt:formatDate value="${c.startime }" pattern="yyyy/MM/dd" /></td>
							<td>
								<c:if test="${c.status=='0' }">开通</c:if>
								<c:if test="${c.status=='1' }">暂停</c:if>
							</td>
							<td>
								<input type="button" value="启用" class="btn_start" onclick="startFee();"/>
								<input type="button" value="修改" class="btn_modify" onclick="location.href='toUpdateCost.do?id=${c.costId }';"/>
								<input type="button" value="删除" class="btn_delete" onclick="deleteFee(${c.costId });"/>
							</td>
						</tr>
						</c:forEach>
					</table>
					<p>业务说明:<br />
					  1、创建资费时,状态为暂停,记载创建时间;<br />
					  2、暂停暂停下,可修改,可删除<br />
					  3、开通后,记载开通时间,且开通后不能修改、不能再停用、也不能删除<br />
					  4、业务账号修改资费时,在下月底统一触发,修改其关联的资费ID(此触发动作由程序处理)<br />
					
					</p>
				</div>
				<!-- 分页 -->
				<div id="pages">
					<!-- 当前是第1页,则不能点上一页 -->
					<c:if test="${page==1 }">
						<a href="">上一页</a>
					</c:if>
					<c:if test="${page !=1 }">
						<a href="findCost.do?page=${page-1 }">上一页</a>
					</c:if>

					
					<!-- 
						begin:循环起始位置;
						end:  循环终止位置:
					 -->
					<c:forEach begin="1" end="${total }" var="i">
						<!-- 若循环到了当前页,则将页码高亮显示 -->
						<c:if test="${i==page }">
							<a href="findCost.do?page=${i }" class="current_page">${i }</a>
						</c:if>
						<!-- 若不是当前页,则去掉高亮的样式 -->
						<c:if test="${i !=page }">
							<a href="findCost.do?page=${i }">${i }</a>
						</c:if>
					</c:forEach>
					
					
					<!-- 当前页是最后一页,则不能点下一页 -->
					<c:if test="">
						<a href="${page ==total }">下一页</a>
					</c:if>
					<c:if test="${page !=total }">
						<a href="findCost.do?page=${page+1 }">下一页</a>
					</c:if>
				</div>
			</form>
		</div>
		<!-- 主要区域结束 -->
		<div id="footer">
			<p>[源自东北的技术,最牛逼的老师,最真实的企业环境,最实用的实战项目]</p>
			<p>版权所有(C)牛逼学院IT培训集团公司</p>
		</div>
	</body>
</html>

MainServlet.java

package web;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.CostDao;
import entity.Cost;

public class MainServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {
			String path = req.getServletPath();
			if("/findCost.do".equals(path)){
				//查询资费
				System.out.println(path);
				findCost(req,res);
			}else if("/toAddCost.do".equals(path)){
				//打开增加资费页
				toAddCost(req,res);
			}else if("/addCost.do".equals(path)){
				//增加保存资费
				addCost(req,res);
			}else if("/toUpdateCost.do".equals(path)){
				//打开修改资费页
				toUpdateCost(req,res);
			}else if("/updateCost.do".equals(path)){
				//修改资费
				updateCost(req,res);
			}else if("/deleteCost.do".equals(path)){
				//删除资费
				deleteCost(req,res);
			}else{
				//错误的路径
				throw new RuntimeException("没有这个页面");
			}
	}

	protected void deleteCost(HttpServletRequest req, 
			HttpServletResponse res) throws ServletException, IOException {
			req.setCharacterEncoding("utf-8");
			String costId = req.getParameter("costId");
			CostDao dao = new CostDao();
			dao.delete(new Integer(costId));
			System.out.println("deleteCost......");
			//3.重定向到查询
			//当前:/netctoss/deleteCost.do
			//目标:/netctoss/findCost.do
			res.sendRedirect("findCost.do");
			
	}

	protected void updateCost(HttpServletRequest req, 
			HttpServletResponse res) throws ServletException, IOException {
			req.setCharacterEncoding("utf-8");
			//1.接收表单数据
			String costId = req.getParameter("costId");
			String name = req.getParameter("name");
			String costType = req.getParameter("costType");
			String descr = req.getParameter("descr");
			String baseDuration = req.getParameter("baseDuration");
			String baseCost = req.getParameter("baseCost");
			String unitCost = req.getParameter("unitCost");
			
			//2.保存这些数据
			Cost c = new Cost();
			c.setCostId(new Integer(costId));
			c.setName(name);
			c.setCostType(costType);
			c.setDescr(descr);
			if(baseDuration !=null && !baseDuration.equals("")){//
				c.setBaseDuration(new Integer(baseDuration));
			}
			if(baseCost !=null && !baseCost.equals("")){
				c.setBaseCost(new Double(baseCost));
			}
			if(unitCost !=null && !unitCost.equals("")){
				c.setUnitCost(new Double(unitCost));
			}
			CostDao dao = new CostDao();
			System.out.println(c);
			dao.update(c);
			//3.重定向到查询
			//当前:/netctoss/addCost.do
			//目标:/netctoss/findCost.do
			res.sendRedirect("findCost.do");
		
	}

	protected void toUpdateCost(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {
			System.out.println("toUpdateCost.......");
			//接收参数
			String id = req.getParameter("id");
			//查询要修改的资费
			CostDao dao = new CostDao();
			Cost cost = dao.findById(new Integer(id));
			//转发到修改页
			req.setAttribute("cost", cost);
			req.getRequestDispatcher("WEB-INF/cost/update.jsp").forward(req, res);
	}

	protected void addCost(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {
			req.setCharacterEncoding("utf-8");
			//1.接收表单数据
			String name = req.getParameter("name");
			String costType = req.getParameter("costType");
			String descr = req.getParameter("descr");
			String baseDuration = req.getParameter("baseDuration");
			String baseCost = req.getParameter("baseCost");
			String unitCost = req.getParameter("unitCost");
			//2.保存这些数据
			Cost c = new Cost();
			c.setName(name);
			c.setCostType(costType);
			c.setDescr(descr);
			if(baseDuration !=null && !baseDuration.equals("")){//
				c.setBaseDuration(new Integer(baseDuration));
			}
			if(baseCost !=null && !baseCost.equals("")){
				c.setBaseCost(new Double(baseCost));
			}
			if(unitCost !=null && !unitCost.equals("")){
				c.setUnitCost(new Double(unitCost));
			}
			CostDao dao = new CostDao();
			dao.save(c);
			//3.重定向到查询
			//当前:/netctoss/addCost.do
			//目标:/netctoss/findCost.do
			res.sendRedirect("findCost.do");
	}

	protected void toAddCost(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {
			//当前:/netctoss/toAddCost.do
			//目标:/netctoss/WEB-INF/cost/add.jsp
			req.getRequestDispatcher("WEB-INF/cost/add.jsp").forward(req, res);
	}

	protected void findCost(HttpServletRequest req, 
			HttpServletResponse res) throws ServletException, IOException {
			//v1
//			//查询资费
//			CostDao dao = new CostDao();
//			List<Cost> list = dao.findAll();
//			//转发到查询页面
//			req.setAttribute("costs", list);
//			//当前:/netctoss/findCost.dao
//			//目标:/netctoss/WEB-INF/cost/find.jsp
//			System.out.println("into--findCost");
//			req.getRequestDispatcher("WEB-INF/cost/find.jsp").forward(req, res);
			
			//v2 分页
		    //获取请求参数
			String page = req.getParameter("page");
			if(page == null || page.equals("")){
				page = "1";
			}
			System.out.println(page);
			//获取常量
			String size = this.getServletContext().getInitParameter("size");
			//查询资费
			CostDao dao = new CostDao();
			List<Cost> list= dao.findByPage(new Integer(page), new Integer(size));
			//查询总行数,计算出总页数
			int rows = dao.findRows();
			int total =rows/(new Integer(size));
			if(rows%new Integer(size) != 0){
				total++;
			}
			
			//转发到查询页面
			req.setAttribute("costs", list);
			req.setAttribute("total", total);
			req.setAttribute("page", page);
			//当前:/netctoss/findCost.do
			//目标:/netctoss/WEB-INF/cost/find.jsp
			req.getRequestDispatcher("WEB-INF/cost/find.jsp").forward(req, res);
	}

	
}

CostDao.java

package 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 entity.Cost;
import util.DBUtil;

public class CostDao {

	public List<Cost> findAll(){
		Connection conn = null;
		
		try {
			conn = DBUtil.getConnection();
			String sql = "select * from cost "
						+"order by cost_id";
			PreparedStatement ps = conn.prepareStatement(sql);
			ResultSet rs= ps.executeQuery();
			List<Cost> list = new ArrayList<Cost>();
			while(rs.next()){
				Cost c = new Cost();
				c.setCostId(rs.getInt("cost_id"));
				c.setName(rs.getString("name"));
				c.setBaseDuration(rs.getInt("base_duration"));
				c.setBaseCost(rs.getDouble("base_cost"));
				c.setUnitCost(rs.getDouble("unit_cost"));
				c.setStatus(rs.getString("status"));
				c.setDescr(rs.getString("descr"));
				c.setCreatime(rs.getTimestamp("creatime"));
				c.setStartime(rs.getTimestamp("startime"));
				c.setCostType(rs.getString("cost_type"));
				list.add(c);
			}
			
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询资费失败",e);
		}finally{
			DBUtil.close(conn);
		}
	}
	
	/**
	 * Alt+Shift+M
	 * @param rs
	 * @return
	 * @throws SQLException 
	 */
	private Cost createCost(ResultSet rs) throws SQLException {
		Cost c = new Cost();
		c.setCostId(rs.getInt("cost_id"));
		c.setName(rs.getString("name"));
		c.setBaseDuration(rs.getInt("base_duration"));
		c.setBaseCost(rs.getDouble("base_cost"));
		c.setUnitCost(rs.getDouble("unit_cost"));
		c.setStatus(rs.getString("status"));
		c.setDescr(rs.getString("descr"));
		c.setCreatime(rs.getTimestamp("creatime"));
		c.setStartime(rs.getTimestamp("startime"));
		c.setCostType(rs.getString("cost_type"));
		return c;
	}
	
	/**
	 * 状态默认为暂停态1;
	 * 创建时间默认为系统时间
	 * 开通时间默认为null;
	 * @param cost
	 */
	public void save(Cost cost) {
		Connection conn = null;
		
		try {
			conn = DBUtil.getConnection();
			String sql = "insert into cost values("
					    +"cost_seq.nextval,"
					    +"?,?,?,?,'1',?,sysdate,null,?)";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1, cost.getName());
			//setInt/SetDouble不允许传入null;
			//但当前业务中这些字段是允许为null;
			//将方法换成setObject
			ps.setObject(2, cost.getBaseDuration());
			ps.setObject(3, cost.getBaseCost());
			ps.setObject(4, cost.getUnitCost());
			ps.setString(5, cost.getDescr());
			ps.setString(6, cost.getCostType());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("增加资费失败",e);
		}finally{
			DBUtil.close(conn);
		}
		
	}
	
	public Cost findById(int id) {
		Connection conn = null;
		
		try {
			conn = DBUtil.getConnection();
			String sql = "select * from cost "
						+"where cost_id=?";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				return createCost(rs);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询资费失败",e);
		}finally{
			DBUtil.close(conn);
		}
		
		return null;
	}

	public void update(Cost cost) {
		Connection conn = null;
		
		try {
			conn = DBUtil.getConnection();
			String sql = "update cost set "
							+"name=?,"
							+"base_duration=?,"
							+"base_cost=?,"
							+"unit_cost=?,"
							+"descr=?,"
							+"cost_type=? "
							+"where cost_id=?";
			System.out.println(sql);
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1, cost.getName());
			//setInt/SetDouble不允许传入null;
			//但当前业务中这些字段是允许为null;
			//将方法换成setObject
			ps.setObject(2, cost.getBaseDuration());
			ps.setObject(3, cost.getBaseCost());
			ps.setObject(4, cost.getUnitCost());
			
			ps.setString(5, cost.getDescr());
			ps.setString(6, cost.getCostType());
			ps.setInt(7, cost.getCostId());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("修改资费失败",e);
		}finally{
			DBUtil.close(conn);
		}
		
	}

	/**
	 * 删除指定资费ID 的资费记录
	 * @param integer
	 */
	public void delete(Integer costId) {
		Connection conn = null;
		System.out.println("delete.........");
		try {
			conn  = DBUtil.getConnection();
			String sql = "delete from cost where cost_Id=?";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, costId);		
			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("删除资费失败",e);
		}finally{
			
			DBUtil.close(conn);//如果不加此代码 会出现网页宕住
		}
		
	}
	
	public int findRows(){
		Connection conn = null;
		
		try {
			conn = DBUtil.getConnection();
			String sql = "select count(*) from cost";
			PreparedStatement ps = conn.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
				return rs.getInt(1);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询总行说失败",e);
		}finally{
			DBUtil.close(conn);
		}
		
		return 0;
	}
	
	
	/**
	 * 查询某一页的资费数据
	 * @param page 页码
	 * @param size 每页显示的行数
	 * @return
	 */
	public List<Cost> findByPage(int page,int size){
		
		Connection conn = null;
		try {
			conn = DBUtil.getConnection();
			String sql = "select * from ("
						+" select c.*,rownum r from ("
						+"  select * from cost "
						+"    order by cost_id "
						+"  ) c"
						+" ) where r between ? and ?";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, (page-1)*size+1);
			ps.setInt(2, page*size);
			ResultSet rs = ps.executeQuery();
			List<Cost> list = new ArrayList<Cost>();
			while(rs.next()){
				Cost c = createCost(rs);
				list.add(c);
			}
			
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("分页查询资费失败",e);
		}finally{
			DBUtil.close(conn);
		}
	}
	
	public static void main(String[] args) {
//		CostDao dao = new CostDao();
//		List<Cost> list = dao.findAll();
//		for(Cost c: list){
//			System.out.println(c.getCostId()+","+c.getName());
//		}
		
//		CostDao dao = new CostDao();
//		Cost c = new Cost();
//		c.setName("包月");
//		//c.setBaseDuration(600);
//		c.setBaseCost(800.0);
//		//c.setUnitCost(0.6);
//		c.setDescr("包月很爽");
//		c.setCostType("1");
//		dao.save(c);
		
//		CostDao dao = new CostDao();
//		int rows = dao.findRows();
//      System.out.println(rows);
		
		CostDao dao = new CostDao();
		List<Cost> list = dao.findByPage(2, 3);
        
        for(Cost c:list){
        	System.out.println(c.getCostId());
        }
	}


	
}

将netctoss工程部署到Tomcat上,运行Tomcat启动案例工程,

浏览器录入http://localhost:8080/netctoss/findCost.do 即可:如果没有错误,最终页面显示效果应如下图:

点击页码即可查询对应页码的记录

猜你喜欢

转载自blog.csdn.net/Coder_Boy_/article/details/82714049
今日推荐