JSP第十次课:JSP项目开发高级操作1

一、项目开发通用化

1、将className,url,user、password常用又不变值,定义为常量,编写到一个类(Constants)中

package mybean.util;

public class Constants {
    public static String DriverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    public static String url="jdbc:sqlserver://localhost:1433; Database=ebuy";
    public static String uid="sa"; 
    public static String pwd="123456";

//数据库名,用户名,密码,url有所不同
}

2、创建JDBCTool类,编写连接数据库、关闭连接,实现复用性

package mybean.util;
import java.sql.*;
public class JDBCTool {
public static Connection getConnection()
    {
        Connection conn=null;
        
            try {
                Class.forName(Constants.DriverName);
                conn=DriverManager.getConnection(Constants.url,Constants.uid,Constants.pwd);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
 
    
    return conn;
    }
}

拓展:通过编写一个通用的方法,在不修改源程序的情况下,可以获取任何数据库的连接

解决方案:将相关值放入配置文件中,通过修改配置方法实现和具体的数据解耦

(1)在src文件夹下新建文件(file),jdbc.properties

className=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://10.40.43.202:1433;Database=ebuy
user=shopping
password=shopping

(2)mybean.util包下新建JDBCTool类

package mybean.util;
import java.util.*;

import mybean.*;
import java.sql.*;

import java.io.*;;

public class JDBCTool {
    /*
     * 编写 一个通用的方法,在不修改源程序的情况下,可以获取任何数据库的连接
     */
    public Connection getConnection() throws Exception{
        Connection conn=null;
    
        String className=null;
        String url=null;
        String user=null;
        String password=null;
        
        //读取类路径下的jdbc.properties文件输入流
        InputStream in=getClass().getClassLoader().getResourceAsStream("jdbc.properties");
        //创建properties对象
        Properties properties=new Properties();

//加载in对象输入流
        properties.load(in);

/加载字符串
        className=properties.getProperty("className");
        url=properties.getProperty("url");
        user=properties.getProperty("user");
        password=properties.getProperty("password");
        
        
        
        
        Properties  info=new Properties();
        info.put("user", user);
        info.put("password",password);
        //方法 1
//        Driver driver=(Driver)Class.forName(className).newInstance();
//        conn=driver.connect(url, info);
        
        //方法2
        Class.forName(className);//加载数据驱动
        conn=DriverManager.getConnection(url,user,password);

return conn;
        
    }
    
}

二、商品管理分页

分页需要知道的有:

(1)共有几页countPage,当前页currentPage,共有多少条记录countNumber,每页显示几条记录pageNum

(2)需要获得当前页数据库中数据GoodsDAO.list(PageInfo)

1、设计分页Bean--PageInfo.java

package mybean.util;

public class PageInfo {
 
 private int currentPage =1;//当前页  //2
 private int pageNum = 4;//每页数据数     //1
 private int countNumber = 0; //共记录数   3
 private int countPage=1;
 
 public int getPageNum() {
  return pageNum;
 }
 public void setPageNum(int pageNum) {
  this.pageNum = pageNum;
 }
 public int getCurrentPage() {
  return currentPage;
 }
 public void setCurrentPage(String currentPage) {
  int page=1;
   if(null != currentPage && currentPage.trim().length()>0)
         {
          page=Integer.parseInt(currentPage);
          }
         else{
            page=1;
         }

this.currentPage = page;
 }
 public int getCountNumber() {
  return countNumber;
 }
 public void setCountNumber(int countNumber) {
  this.countNumber = countNumber;
 }
 public void setCountPage()
 {
  this.countPage = (int)java.lang.Math.ceil(this.getCountNumber()/(this.getPageNum()+0.0));
 }
 public int getCountPage()
 {
  return countPage;
 }
}

2、数据库读取相应页的数据GoodsDAO.list(复制原list代码,适当更改)

public LinkedList<Goods> list(PageInfo pageInfo)
{
    LinkedList<Goods> ls=new LinkedList<Goods>();
 Connection conn=null;
 PreparedStatement  stmt=null;
 ResultSet rs=null;
 String url="jdbc:sqlserver://localhost:1433;Database=ebuy";
 String user="shopping";
 String password="shopping";
 String sql="select top (1*?) * from goods where gid not in (select top (1*?) gid from goods)";

String className="com.microsoft.sqlserver.jdbc.SQLServerDriver";

try {
  Class.forName(className);
  
 conn=DriverManager.getConnection(url, user, password);
 
 //首先知道数据库中有多少条记录
 String sql1="select count(*) from goods";
 stmt=conn.prepareStatement(sql1);
 rs=stmt.executeQuery();
 if(rs.next()){
  pageInfo.setCountNumber(rs.getInt(1));
 }
 rs.close();
 stmt.close();
 
 //获取制定条数据记录
 stmt=conn.prepareStatement(sql);
 stmt.setInt(1,pageInfo.getPageNum());
 stmt.setInt(2, pageInfo.getPageNum()*(pageInfo.getCurrentPage()-1));
 rs=stmt.executeQuery();
 
 while(rs.next()){
 Goods g=new Goods();
 g.setGid(rs.getInt("gid"));
 g.setName(rs.getString("name"));
 g.setPrice(rs.getFloat("price"));
 g.setNum(rs.getInt("num"));
 ls.add(g);
 }
 
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }

try {
  if(rs!=null)
   {rs.close();}
  if(stmt!=null)
   {stmt.close();}
  if(conn!=null)
   {conn.close();}
 } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 
 return ls;
}

3、good_view页添加部分代码实现,显示指定页数据

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="mybean.*,mybean.util.*" %>
<%

// 显示指定页的数据

String currentPage = request.getParameter("currentPage");
  PageInfo  pageInfo=(PageInfo)request.getAttribute("pageInfo");
  if(pageInfo==null)
   {
    pageInfo=new PageInfo();
  
    request.setAttribute("pageInfo",pageInfo);
   }
 pageInfo.setCurrentPage(currentPage); //设置当前页
 %>
<div style="width:500px;">
<p>商品信息显示</p>
<div style="padding-left:350px;"><a href="good_add.jsp">添加</a></div>
<table width="400" border="1">
  <tr>
    <td>商品ID</td>
    <td>商品名称</td>
    <td>商品价格</td>
    <td>商品数量</td>
   <td>删除</td>
    <td>修改</td>
    <td>详细</td>
  </tr>
<%
GoodsDAO dao=new GoodsDAO();
LinkedList<Goods>gs=dao.list(pageInfo);
for(Goods g:gs)
{
 //out.println(g.getName());
%>

<tr>
    <td><%=g.getGid()%></td>
    <td><%=g.getName()%></td>
    <td><%=g.getPrice()%></td>
    <td><%=g.getNum()%></td>
    <td><a href="good_delete.jsp?gid=<%=g.getGid()%>">删除</a></td>
    <td><a href="good_update.jsp?gid=<%=g.getGid()%>">修改</a></td>
    <td>详细</td>
  </tr>
 
  <%}
  pageInfo.setCountPage(); //设置总页数
  %>
</table>
<jsp:include page="page.jsp"/>
</div>

4、page.jsp实现上一页下一页组件

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="mybean.*"%>
<%@page import="mybean.util.*"%>
 <script type="text/javascript">
   function pageChange(currentPage){
       document.getElementById(‘currentPage‘).value = currentPage;
           document.form1.submit();   
   }
</script>
<%
PageInfo pageInfo=(PageInfo)request.getAttribute("pageInfo");

if(pageInfo!=null)
{
int countPage=pageInfo.getCountPage();
int upPage=1;
int downPage=countPage;
if(pageInfo.getCurrentPage()!=1)
{
upPage=pageInfo.getCurrentPage()-1;
}
if(pageInfo.getCurrentPage()!=countPage){
downPage=pageInfo.getCurrentPage()+1;

}

%>
<ul style="list-style:none">
<li style="border:1px solid #ccc;width:50px;float:left;margin:5px;"  href="#"></a>首页</li>

<li style="border:1px solid #ccc;width:50px;float:left;margin:5px;" onclick="pageChange(<%=upPage%>);">上一页</li>
<li style="border:1px solid #ccc;width:50px;float:left;margin:5px;" onclick="pageChange(<%=downPage%>);">下一页</li>
<li style="border:1px solid #ccc;width:50px;float:left;margin:5px;" onclick="pageChange(<%=pageInfo.getCountPage()%>);">尾页</li>

</ul>
<%} %>

<form  id="form1" name="form1"  action="good_view.jsp" method="post" target="_self">
     <input type="hidden" name="currentPage" id="currentPage" value="<%=pageInfo.getCurrentPage()%>">
    
</form>

时间: 2024-08-07 12:32:00

JSP第十次课:JSP项目开发高级操作1的相关文章

JSP第十一次课:JSP项目开发高级操作2---在线编辑器应用及前台首页显示商品

一.在线编辑器KindEditor下载 二.部署编辑器 三.在线编辑器使用 四.实现商品图片上传 五.实现商品描述功能

项目开发--&gt;高级功能汇总

祭奠曾经逝去的青春…… 1.高级功能汇总-->Memcached之ASP.NET实现

基于JSP+Servlet+JavaBean的人力资源管理系统开发课程

<基于JSP+Servlet+JavaBean的人力资源管理系统开发> 课程观看地址:http://www.xuetuwuyou.com/course/53 讲师:蒋子厚(http://www.xuetuwuyou.com/user/1984) 课程出自学途无忧网:http://www.xuetuwuyou.com 课程介绍 一.课程使用到的软件及对应的版本 1.jdk 1.7 2.tomcat 7.0 3.MySQL6.0+ 4.navicat 9 + 5.Macromedia Dreamw

用MyEclipse做web项目开发中如何去除jsp页面中的设计视图

开始用MyEclipse做WEB项目开发时,当用到jsp页面时,新建一个后总是上面是jsp的设计视图,下面才是jsp页面,这样太不方便了,下面是去除这个视图页面的步骤:      MyEclipse->Preference->General->Editors->File Associations->在右边选中*.jsp,然后到右下角选择MyEclipse JSP Editor(default)就行了. 在jsp页面还有几行默认的代码,你的网站做出来后是要上传到服务器的,之后你

SSH项目开发中,将jsp页面放在WEB-INF的原因解析

 在一些安全型要求比较高的项目开发中,我们经常看到jsp页面都被放在WEB-INF下面了.这是出于对安全性的考虑, 是为了代码的安全.这样实现起来虽然麻烦了点,而且页面跳转很不方便.但是整个项目的安全性就提高上去了!所 以还是建议在一些安全性要求比较高的项目里使用这种做法! 这是我写的一个例子,我就是将所有的JSP页面都放在WEB-INF下面,然后按照模块进行分配,course文件夹就是放和 课程信息管理相关的JSP页面.假如我们输入https://localhost:8080/项目名称/p

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

JSP简明教程(五):高级特性

JSP过滤器 过滤器的作用是给web请求增加额外的逻辑,每个页面可以被多个过滤器进行处理.过滤器需要在web.xml文件中进行定义,语法如下.过滤器的执行顺序与filter-mapping的定义顺序相同. <filter> <filter-name>FilterName</filter-name> <filter-class>TestFilter</filter-name> <init-param> <param-name>

JSP第四课:内置对象使用

相关知识: (1)内置对象 一.request使用 实例1:简单登陆界面获取信息 实例2:获取多值信息,如爱好 实例3:实现跳转,获取对象信息 二.实现用户登录 (1)获取登陆信息 (2)信息校验处理 (3)不同页显示登录信息 三.实现用户留言 用户留言实现:实现含主框架的用户留言,显示信息也是含有主框架 (1)message.html <script type="text/javascript">var s="1234567"; function ch

Java Web项目开发到底需要掌握哪些技术?

目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Java的WEB项目需要掌握的技术如下: lJava语言 l面向对象分析设计思想 l设计模式和框架结构 lXML语言 l网页脚本语言 l数据库 l应用服务器 l集成开发环境 下面我们具体地看每个技术. 1.Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servle