您的位置:新葡亰496net > 网络数据库 > 新葡亰496net:新闻发布的一点小总结,理解php分

新葡亰496net:新闻发布的一点小总结,理解php分

发布时间:2019-09-27 14:14编辑:网络数据库浏览(180)

      经过一段时间的学习,完成了新闻发布的基础功能,进行一点小总结,方便日后回顾。下面是我的一点小总结,不足之处请勿见笑。。。

    Java EE概念:

    只需要得到两个变量就成功了一半:
    每页要显示的记录数$pageSize
    表中总的数据量 $rowCount
    有了以上两个变量,我们就可以得出 共有几页了$pageCount
    然后通过for循环,比如总共有13个页面,那么很容易就能通过for循环输出页数

    只需要得到两个变量就成功了一半:
    每页要显示的记录数$pageSize
    表中总的数据量 $rowCount
    有了以上两个变量,我们就可以得出 共有几页了$pageCount
    然后通过for循环,比如总共有13个页面,那么很容易就能通过for循环输出页数

    我们想要完成一个新闻发布,首先要使其能够成功发布,并且让它能够实现添加、删除、修改、查询、上传、下载等功能。
    我们还调用AJAX功能查看输出为XML、JSON格式的新闻内容。为完成以上功能,我们首先要进行jdk、tomcat、eclipse的安装和配置。
    1、各软件的安装和配置
    1.1、jdk的安装和配置:
    1.1.1、下载jdk:下载地址:
    1.1.2、安装jdk:安装jdk.exe
    1.1.3、配置环境变量:右击"我的电脑"-->"高级"-->"环境变量"
    1)在系统变量里新建"JAVA_HOME"变量,变量值为:C:Program FilesJavajdk (根据自己的安装路径填写)
    2)新建"CLASSPATH"变量,变量值为:.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar (变量值中"."是不可或缺的)
    3)在PATH变量(已存在不用新建)添加变量值:%JAVA_HOME%bin;%JAVA_HOME%jrebin (注意变量值之间用";"隔开)
    1.1.4、测试:"开始"-->"运行"-->输入"javac"-->"Enter",如果能正常打印用法说明配置成功!
    1.1.5补充环境变量的解析:
    1)JAVA_HOME:jdk的安装路径
    2)CLASSPATH:java加载类路径,只有类在classpath中java命令才能识别,在路径前加了个"."表示当前路径。
    3)PATH:系统在任何路径下都可以识别java,javac命令。
    1.2、tomcat的安装和配置:{其各个文件夹的功能}:
    1.2.1、Tomcat的获取和安装:Apache的官方网站下载(
    Tomcat的启动是一个bat文件(Windows下),在bin目录下。双击即可。如果启动不成功,一般的情况是控制台出来一下立即消失,说明Tomcat没有找到Java的运行时环境。简单理解,就是Tomcat找不到jdk,没办法运行。
    1.2.2、Tomcat的运行环境搭建:在JAVA_HOME变量(在jdk配置时已经创建),指向jdk安装目录。启动Tomcat,在浏览器地址栏输入
    1.2.3、Tomcat的目录结构介绍:bin目录存放一些启动运行Tomcat的可执行程序和相关内容。
          conf存放关于Tomcat服务器的全局配置。
          lib目录存放Tomcat运行或者站点运行所需的jar包,所有在此Tomcat上的站点共享这些jar包。
          webapps目录是默认的站点根目录,可以更改。
          work目录用于在服务器运行时过度资源,简单来说,就是存储jsp、servlet翻译、编译后的结果。
    common文件夹是存放公共jar包的。
    logs文件夹主要是存放日志文件的。

    Java EE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(java EE就是十三种技术的总称)。建立一个整全的概念。

     代码如下

    复制代码 代码如下:

    1.1.4、其他更详细的介绍:()
    1.3、eclipse的安装和配置:
    1.3.1、下载Eclipse:( )
    1.3.2、Eclipse配置:
    1)配置jdk:点击"window"-->"preferences"-->"java"-->"installed JRES"
    2)配置tomcat:点击"window"-->"preferences"-->"Server"-->"Runtime Environment"-->"Add"
    2、各功能的实现
    2.1、连接数据库:
    多项功能都需要连接数据库,我们创建一个用于连接数据库的工具(util),命名为"SQLServerConnectiont"。
    1)加载JDBC驱动程序
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    2)创建数据库连接
    Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=test1","sa","sd951208");
    JDBC连接常用数据库和基本的CURD可参考(
    2.2、JavaBeen:
    创建"*.java",添加id、b_id、title、content、author、time、area、fileName、fileContent等属性。
    鼠标右键,依次选择弹出菜单中的"源码"/"生成Getter和Setter"菜单项。
    在弹出的"生成Getter和Setter"对话框中,单击"全部选中"按钮,并保留其它选项的默认值。
    点击"确定"按钮,生成属性的getXxx()与setXxx()方法。
    2.3、新闻的发布(添加):
    发布新闻时,将新闻的各种属性填写好进行发布。在jsp页面将数据提交到Servlet处理,调用sql语句insert储存进数据库。其中日期属性使用了My97DatePicker插件,简介使用textarea标签和ckeditor插件。
    2.3.1、My97DatePicker插件
    下载My97DatePicker插件(
    在页面中引入该组件js文件: <script type="text/JavaScript" src="/test/My97DatePicker/WdatePicker.js"></script>
    在添加日期时,<input id="1" type="text" name="time" class="Wdate" onfocus="WdatePicker({dateFmt:'yyyyMMdd HH:mm:ss',isShowClear:false,readOnly:true})">
    其他更详细的调用到官网查看(
    2.3.2、ckeditor插件
    下载ckeditor插件(
    在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src="ckeditor/ckeditor.js"></script>
    在使用编辑器时,textarea rows="10" cols="30" name="textarea1" class="ckeditor">简介内容</textarea>
    2.4、删除:
    在jsp显示页面通过超链接提交要删除的数据id到Servlet处理,调用sql语句delete删除相应的数据。在这里使用了事务的处理,避免删除书籍信息时没有删除书籍的附件。
    简单事务的详细使用方法(
    2.5、修改:
    根据id,通过查询的Servlet调用sql语句select查询出新闻数据,在修改的jsp页面显示。然后将修改后的数据发送到修改的Servlet调用sql语句insert将数据储存到数据库里。
    2.6、查询:
    按照id、关键字、日期等要求查询新闻的数据,在jsp页面发送到Servlet处理调用sql语句select查询出新闻数据。
    为了让查询数据显示时,将要求一同显示在页面上:在jsp显示页面String id = (String) request.getAttribute("id"); if (id == null) { id = ""; request.removeAttribute("id"); } 在Servlet处理,获取要求:String Id = request.getParameter("Id"); if (Id != null && !Id.equals("")) { sql1 = " and ID_=?"; } 然后if(Id != null && !Id.equals("")) { ps1.setString(i, Id); i ; System.out.println("Id" Id); }
    2.7、上传:
    在jsp发布页面将附件上传,通过Servlet处理分析将附件数据和其他数据区分,然后通过调用sql语句insert储存进数据库。
    1)上传附件需要使用commons-fileupload.jar和commons-io.jar两个包。
    2)文件上传必须满足的条件: 页面表单的method必须是post,因为get传送的数据太小了 ; 页面表单的enctype必须是multipart/form-data类型的; 表单中提供上传输入域
    3)具体代码可参考(
    2.8、下载:
    首先通过超链接将要下载的附件的id发送到Servlet处理,调用sql语句select查询出附件名和附件内容,然后将附件通过ServletOutputStream和InputStream和byte b[]将附件下载。
    具体代码可参考(
    2.9、中文字符乱码:
    方法一:tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的。resp.setContentType("text/html;charset=utf-8");//设置页面的字符编码,解决界面显示中文乱码的问题
    方法二:req.setCharacterEncoding("utf-8");//必须写在第一位,因为采用这种方式去读取数据,否则数据会出错。
    方法三:修改配置文件。也就是web.xml文件
    更加详细方法参考(
    2.10、特殊字符转义:
    String temp = news.getArea(); //获取需要转义的内容
    if (temp != null) { //内容不能为空
    temp = temp.replaceAll("<", "<"); //将特殊符号"<"转义为"<"
    temp = temp.replaceAll(">", ">"); //将特殊符号">"转义为">"
    temp = temp.replaceAll("&", "&"); //将特殊符号"&"转义为"&"
    temp = temp.replaceAll("“", """); //将特殊符号"“"转义为"""
    temp = temp.replaceAll(" ", " "); //将特殊符号" "转义为" "
    news.setArea(temp);
    }
    其他方式可参考(
    2.11、让CKEditor支持jsp上传图片
    思路是:1)准备一下JSP上传文件的JAR包:commons-fileupload.jar和commons-io.jar;2)编写一个JSP用于接收上传的文件(这里除上传图片功能外,需调用一个核心JS语句);3)编写一个JSP用于浏览文件(这里除上传图片功能外,需调用一个核心JS语句);4)修改CKEditor的config.js,将上传文件和浏览文件的JSP配置进去。
    具体代码可以参考(
    2.12、分页显示
    定义变量pageSize(每页显示多少条变量、用户指定)、pageNow(希望显示第几页、用户指定)、pageCount(总共有多少页、计算:if (rowCount % pageSize == 0) { pageCount = rowCount / pageSize; } else { pageCount = (rowCount / pageSize) 1; })、rowCount(总共有多少条变量、通过查询)。
    rowCount查询:select count(ID_) from news;
    显示select top " pageSize " * from news where ID_ not in(select top " (pageSize * (pageNow - 1)) " ID_ from news order by id_ desc)order by id_ desc
    设计首页、上一页、超链接跳转、下一页、末页、直接跳转XX页。
    详细代码可参考(
    2.13、复选框
    对属性设置复选框,可进行多选、全选来操作,可同时操作多条数据。这里使用了js的功能。复选框的类型type="checkbox"。思路如下:
    1)将前台jsp页面中的所有你要用到checkbox的name值设为相同。
    2)在后台获取参数时,使用数组获取。
    3)进行数组必要的格式转换,再进行sql操作。
    代码可参考(思路: | 复选框的设置: | 参考实例:)
    3、AJAX功能
    3.1、输出XML:
    当用户点击上面的"Get LIST info"这个按钮,就会执行 loadXMLDoc() 函数。 loadXMLDoc() 函数创建XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。当服务器响应就绪时,会构建一个 HTML 表格,从 XML 文件中提取节点(元素),最后使用已经填充了 XML 数据的 HTML 表格来更新 copy 占位符。
    Servlet中调用sql语句select查出数据,转换成XML格式输出。
    AJAX XML实例(
    输出XML文件代码可参考(
    3.2、输出JSON:
    当用户点击上面的"获取json"这个按钮,就会执行 loadXMLDoc() 函数。 loadXMLDoc() 函数创建XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。当服务器响应就绪时,会构建一个 HTML 表格,从 json 文件中提取节点(元素),最后使用已经填充了 json 数据的 HTML 表格来更新 copy 占位符。
    Servlet中调用sql语句select查出数据,转换成JSON格式输出。再转换成json格式时使用了jsonStringer类
    AJAX取得Servlet获取输出json文件可参考(
    输出JSON文件代码可参考(

    要成为一个java EE程序员,必须掌握的技术是java,servlet,jsp。这是基础。

    $nav='';//用来保存页数的一个变量
    for ($i=1;$i<=13;$i )
    {
      $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> ";
    }

    $nav='';//用来保存页数的一个变量
    for ($i=1;$i<=13;$i )
    {
      $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> ";
    }

    只有在上面的基础上再学 struts,hibernate,ejb,spring,webwork,jst等web框架。

    以上的for循环将输出如
    第1页,第2页,第3页,第4页,第5页,第6页,第7页,第8页,第9页,第10页,第11页,第12页,第13页
    如果我们只想每次只显示十个页面呢?比如1-10页,11-20页
    很简单,只要稍微修改下for循环即可实现

    以上的for循环将输出如
    第1页,第2页,第3页,第4页,第5页,第6页,第7页,第8页,第9页,第10页,第11页,第12页,第13页
    如果我们只想每次只显示十个页面呢?比如1-10页,11-20页
    很简单,只要稍微修改下for循环即可实现

    J2ee的十三种技术(规范)

     代码如下

    复制代码 代码如下:

    1.       java数据库连接(JDBC)。——JDBC定义了4种不同的驱动:1.JDBC-ODBC桥,2.JDBC-native驱动桥3,JDBC-network桥4.纯java驱动。

    $step= floor(($pageNow-1)/10)*10 1;
    for ($i=$step;$i<=$step 10;$i )
    {
      $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> ";
    }

    $step= floor(($pageNow-1)/10)*10 1;
    for ($i=$step;$i<=$step 10;$i )
    {
      $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> ";
    }

    2.       Java命名和目录接口(JNDI)(它是为了对高级网络应用开发中的使用的目录基础结构的访问。)。

    比如,当前页面$pageNow如何在1~10之间的话,那么$step=0
    当前页面$pageNow如何在11~20之间的话,那么$step=10
    当前页面$pageNow如何在21~30之间的话,那么$step=20
    参考具体的实现过程的代码,我们不难发现,for循环的第二个条件只需要加上10就可以实现每次只显示10也的情况了,我们将这一步分装在fenyePage类中的getLink()方法中
    话又说回来,如何才能得到$pageSize和$rowCount两个变量的值呢?
    $pageSize可以又程序员自己指定,$rowCount可以借助一个简单的执行sql语句的函数就能得到

    比如,当前页面$pageNow如何在1~10之间的话,那么$step=0
    当前页面$pageNow如何在11~20之间的话,那么$step=10
    当前页面$pageNow如何在21~30之间的话,那么$step=20
    参考具体的实现过程的代码,我们不难发现,for循环的第二个条件只需要加上10就可以实现每次只显示10也的情况了,我们将这一步分装在fenyePage类中的getLink()方法中
    话又说回来,如何才能得到$pageSize和$rowCount两个变量的值呢?
    $pageSize可以又程序员自己指定,$rowCount可以借助一个简单的执行sql语句的函数就能得到

    3.       企业Java Beans(Enterprise Java Beans,EJB)(它提供了一个架构来开发和配置到客户端的分布式商业逻辑,因此可以明显减少开发扩展性、高度复杂企业应用的难度。)。

     代码如下

    复制代码 代码如下:

    4.       JavaServer Pages(JSPs)。

    <?php
    /**
    * $sql语句:①获取数据②获取总记录数
    */
    class fenyePage{
    public $pageSize=5;//每页显示的数量-->程序员指定的
    public $rowCount;//这是从数据库中获取的(形如SELECT COUNT(id) FROM TABLE)用来保存总共有多少条记录
    public $pageNow;//通过$_GET['page']获取的,用来保存当前所在的页码
    public $pageCount;//计算得到的,用来保存总共有多少页
    public $res_arr;//用来保存要显示到页面的数据(比如保存SELECT * FROM TABLE LIMIT 0,10 检索的数据)
    public $nav;//显示第几页第几页的导航条
    /**
    * 取得当前页面的超链接
    *
    * @author 小飞 2012/5/30
    */
    public function getLink()
    {
    $this->nav='';
    $this->pageCount=ceil(($this->rowCount/$this->pageSize));
    $step= floor(($this->pageNow-1)/10)*10 1;
    if ($this->pageNow>10)
    {
    $this->nav.=" <a href='index.php?page=".($step-1)."'> << </a> ";//整体每10页向前翻
    }
    if ($this->pageNow!=1)
    {
    $this->nav.="<a href='index.php?page=".($this->pageNow-1)."'> 上一页</a> ";
    }
    if ($this->pageNow!=1)
    {
    $this->nav.="<a href='index.php?page=1'>首页</a> ";
    }
    for ($start=$step;$start<$step 10 && $start<=$this->pageCount;$start )
    {
    $this->nav.="<a href='index.php?page=".$start."'>".$start."</a> ";
    }
    if ($this->pageNow!=$this->pageCount)
    {
    $this->nav.="<a href='index.php?page=".$this->pageCount."'>末页</a> ";
    }
    if ($this->pageNow!=$this->pageCount)
    {
    $this->nav.=" <a href='index.php?page=".($this->pageNow 1)."'>下一页</a>";
    }
    if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){
    $this->nav.=" <a href='index.php?page=".($step 10)."'> >> </a>";//整体每10页向后翻
    }
    $this->nav.="/共有".$this->pageCount."页";
    }
    }
    ?>

    <?php
    /**
    * $sql语句:①获取数据②获取总记录数
    */
    class fenyePage{
    public $pageSize=5;//每页显示的数量-->程序员指定的
    public $rowCount;//这是从数据库中获取的(形如SELECT COUNT(id) FROM TABLE)用来保存总共有多少条记录
    public $pageNow;//通过$_GET['page']获取的,用来保存当前所在的页码
    public $pageCount;//计算得到的,用来保存总共有多少页
    public $res_arr;//用来保存要显示到页面的数据(比如保存SELECT * FROM TABLE LIMIT 0,10 检索的数据)
    public $nav;//显示第几页第几页的导航条
    /**
    * 取得当前页面的超链接
    *
    * @author 小飞 2012/5/30
    */
    public function getLink()
    {
    $this->nav='';
    $this->pageCount=ceil(($this->rowCount/$this->pageSize));
    $step= floor(($this->pageNow-1)/10)*10 1;
    if ($this->pageNow>10)
    {
    $this->nav.=" <a href='index.php?page=".($step-1)."'> << </a> ";//整体每10页向前翻
    }
    if ($this->pageNow!=1)
    {
    $this->nav.="<a href='index.php?page=".($this->pageNow-1)."'> 上一页</a> ";
    }
    if ($this->pageNow!=1)
    {
    $this->nav.="<a href='index.php?page=1'>首页</a> ";
    }
    for ($start=$step;$start<$step 10 && $start<=$this->pageCount;$start )
    {
    $this->nav.="<a href='index.php?page=".$start."'>".$start."</a> ";
    }
    if ($this->pageNow!=$this->pageCount)
    {
    $this->nav.="<a href='index.php?page=".$this->pageCount."'>末页</a> ";
    }
    if ($this->pageNow!=$this->pageCount)
    {
    $this->nav.=" <a href='index.php?page=".($this->pageNow 1)."'>下一页</a>";
    }
    if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){
    $this->nav.=" <a href='index.php?page=".($step 10)."'> >> </a>";//整体每10页向后翻
    }
    $this->nav.="/共有".$this->pageCount."页";
    }
    }
    ?>

    5.       Java servlets(servlets提供的功能大部分与JSP相同,JSP中大部分是HTML代码,其中只有少量的Java代码,而servlets则相反,它完全使用Java编写,并且产生HTML代码。)。

    由于zf中操作数据库的任务由model层来完成,所以,我将获取$rowCount的值的函数放在了对应的表model中
    比如:我是操作order表的
    那么当我要显示所有订单信息的时候,我通过order类中的showord新葡亰496net:新闻发布的一点小总结,理解php分页思路方法详解。er()方法取得$rowCount的值,并将其付给分页类中的$rowCount属性
    同样,将要显示在页面上的数据信息也一并付给了分页类中的$res_arr属性
    这样,我们就可以很容易的通过实例化一个分页类(fenyePage),然后将其通过参数传给showorder()函数,由该函数完成以下动作:
    ①要显示在页面上的信息
    ②表中总共有多少条记录

    由于zf中操作数据库的任务由model层来完成,所以,我将获取$rowCount的值的函数放在了对应的表model中
    比如:我是操作order表的
    那么当我要显示所有订单信息的时候,我通过order类中的showorder()方法取得$rowCount的值,并将其付给分页类中的$rowCount属性
    同样,将要显示在页面上的数据信息也一并付给了分页类中的$res_arr属性
    这样,我们就可以很容易的通过实例化一个分页类(fenyePage),然后将其通过参数传给showorder()函数,由该函数完成以下动作:
    ①要显示在页面上的信息
    ②表中总共有多少条记录

    6.       Java IDL/CORBA(用得不多)。

     代码如下

    复制代码 代码如下:

    7.       Java 事务体系(JTA)/Java事务服务(JTS)(用得不多)。

    /**
    * 根据指定的用户id,查询该用户的历史订餐记录
    *
    * @author 小飞 2012/5/30
    * @param $id 用户id
    * @param $fenye 实例化的一个对象,用来处理分页
    * @todo $sql1语句 "select * from table where * limit 0,10" 该sql语句主要用来检索数据库中的数据,用以显示在view层
    * @todo $sql2语句 "select count(id) from table" 该sql语句用来得出总的数据量
    */
    public function showorder($id=null,$fenye=null)
    {
    $db = $this->getAdapter();
    $select=$db->select();
    $select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price','o.order_time','o.order_state'));
    if ($id!=null){
    $select->where('o.user_id=?',$id);
    }
    $select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name');
    if($fenye!=null){
    $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize);
    }
    $sql1=$select->__toString();
    //该sql语句主要用来计算总的数据量
    $sql2="SELECT COUNT(id) FROM `order`";
    $fenye->res_arr=$db->fetchAll($sql1);//将要显示的数据存储到分页类的$res_arr属性当中,方便调用
    $rowCount=$db->fetchAll($sql2);//将表中的总数据量保存到分页类的rowCount属性当中
    $fenye->rowCount=$rowCount[0]['COUNT(id)'];
    $fenye->getLink();
    return $fenye->res_arr;
    }

    /**
    * 根据指定的用户id,查询该用户的历史订餐记录
    *
    * @author 小飞 2012/5/30
    * @param $id 用户id
    * @param $fenye 实例化的一个对象,用来处理分页
    * @todo $sql1语句 "select * from table where * limit 0,10" 该sql语句主要用来检索数据库中的数据,用以显示在view层
    * @todo $sql2语句 "select count(id) from table" 该sql语句用来得出总的数据量
    */
    public function showorder($id=null,$fenye=null)
    {
    $db = $this->getAdapter();
    $select=$db->select();
    $select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price','o.order_time','o.order_state'));
    if ($id!=null){
    $select->where('o.user_id=?',$id);
    }
    $select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name');
    if($fenye!=null){
    $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize);
    }
    $sql1=$select->__toString();
    //该sql语句主要用来计算总的数据量
    $sql2="SELECT COUNT(id) FROM `order`";
    $fenye->res_arr=$db->fetchAll($sql1);//将要显示的数据存储到分页类的$res_arr属性当中,方便调用
    $rowCount=$db->fetchAll($sql2);//将表中的总数据量保存到分页类的rowCount属性当中
    $fenye->rowCount=$rowCount[0]['COUNT(id)'];
    $fenye->getLink();
    return $fenye->res_arr;
    }

    8.       JavaMail和JavaBenas激活架构(JavaBeans Activation Framework,JAF)。(JavaMail是一个用来访问邮件服务的API)。

    总结分页最核心的几句代码

    至此,分页类的功能就已经实现了
    原创文章:WEB开发_小飞

    9.       Java信使服务(Java Messaging Service,JMS)(JMS是一个用来和面向信息的中层通信的API)。

     代码如下

    您可能感兴趣的文章:

    • Zend Framework实现留言本分页功能(附demo源码下载)
    • Zend Framework分页类用法详解
    • 非常好用的Zend Framework分页类
    • zf框架db类的分页示例分享
    • Zend Framework上传文件重命名的实现方法
    • zend framework配置操作数据库实例分析
    • zend framework多模块多布局配置
    • 解析如何使用Zend Framework 连接数据库
    • Zend Framework开发入门经典教程
    • 工厂模式在Zend Framework中应用介绍
    • Zend Framework页面缓存实例
    • Zend Framework框架实现类似Google搜索分页效果

    10.   扩展标记语言(Extensible Markup Language,XML)。

    $this->pageCount=ceil(($this->rowCount/$this->pageSize));
    $step= floor(($this->pageNow-1)/10)*10 1;

    11.   12. 13当前流行的及格框架 struts hibernate spring(ssh).

    再就是sql中的select * from table where * limit 0,10也就是本实例中的$select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); 了。

    Java ee的开发环境(eclipse)

    Eclipse是一个开源的、可扩展的集成开发环境,已经成为目前最流行的j2ee开发工具。

    Eclipse安装后就可以开发java se的项目了,但不能开发java ee项目,需要安装web开发插件(lomboz或是myeclipe)

    Eclipse的官网:http://www.eclipse.org

    myeclipse的官网:

    在java ee的开发中有几个重要的开发模式:

    1.Model1模式  2.model2模式(model2x模式(用得少))  3.mvc模式

    一、Model1模式

        Model1的基础是jsp文件,它由一些相互独立的jsp文件,和其它一些java class组成(不是必须的)。这些jsp从HTTPRequest中获得所需要的数据,处理业务逻辑,然后将结果通过Response返回前端浏览器。

        从上面分析我们可以看到model1模式可以分为两类:

    1.  Model1(纯jsp技术,不带任何java class)。

    2.  Model1(jsp java class)。

    Model1模式的缺点:

    1.  表现层和业务层混合在一起(乱!)。

    2.  在开发过程中,不利于多人协同开发。

    3.  不利于后期维护。

    Model1模式的优点:

    1.  简单,开发速度较快。

    2.  比较适合开发小的项目。

    二、model1(结合java class)开发模式,有些书上称:mv模式,即:màmodel模型(java class,业务逻辑层),vàview视图(jsp,界面层)。

    1.一个数据库应一个类:ConnDB.java(得到连接)。

        2.数据库中的每一张表对应两个类:(1)UserBean.java(表示users表)类。(2)UserBeanCl.java(业务逻辑,即对users表的操作)类。

        如:

          login.jsp输入数据,logincl.jsp通过调用java class(模型)处理数据,wel.jsp显示数据。这是一种多么完美的开发模式。

       不足之处:

    1.  Jsp技术主要做界面,但是logincl.jsp这里调用了java class(模型),完成对用户验证,显得有点怪怪的。

    2.  Wel.jsp是用于显示用户信息(显示数据),但,wel.jsp除了显示数据,还调用了java class(模型),代码的优雅就荡然无存了,也不得于将来的分工。

    3.  Servlet技术处理页面的跳转是最快捷和方便的,难道我们就此不用了吗?

          

    三、mvc开发模式:M(model模型),V(view视图),C(controller控制器)。

        MVC是一个设计模式,它强制性的使应程序的输入、处理、和输出分开。使用MVC应用程序分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

         M主要由java class来做,也可以是java bean、eib等

         V由jsp来做

         C由servlet来做

       对上的例子进行改进:

    1.       增加控制器(servlet):将logincl.jsp用servlet来替代,发挥servlet充当控制中转的优势。

    2.       在控制器(servlet)中去调用模型(model)去完成用户验证,并准备要显示的用户信息数据。

     

    MVC开发模式的总结:

    处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后调用模型来处理用户的请求并返回数据,最后控制器用相应的视图显示模型返回的数据,并通过浏览器呈现给用户。

    Mvc模式存在的缺点:

    1. 工作量增加了。

    由于开发者将一个应用程序分成了三个部件,所以使用MVC同时也意味着你将要管理比以前更多的文件,这一点是显而意见的。这样好像我们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提。

    2. 不适用小型项目,否则就是机关枪打蚊子。

    3. 调试应用程序难度加大。

    Mvc提倡模型和视图分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫不顾忌的重用它们了。

    数据库中用户名是中文,中文乱码问题(一般是要查询数据时,有中文字符才需要转码):

    当提交表单时,表单中有中文,也会产生乱码。

       解决中文乱码问题,有三种方法:

    1.  重新转码,如,有String u=”是中文”; u=new String(u.getBytes(“iso-8859-1”),”gb2312”);

    2.  使用过滤器来解决[详解]

    3.  通过修改Tomcat配置servlet.xml文件[不太稳定.],具体操作如下:

        <Connector port="8080" protocol="HTTP/1.1"  maxThreads="150"

    connectionTimeout="20000"  redirectPort="8443" />改为:

    <Connector port="8080" protocol="HTTP/1.1"  maxThreads="150"

    connectionTimeout="20000"  redirectPort="8443" URIEncoding=”gbk”/>

     

    在<Connector>元素中增加属性URIEncoding,其值为”gbk,表示客户端请求传送来的值均以gb2312的标准来编码,这样在业务处理中就不需要在对其编码进行转换,大在简化了程序,提高了执行效率。

    当request得到的是乱码时,可以这样解决(一定要这样写):

      name=new String(request.getParameter(“username”).getBytes(“ISO8859_1”),”gb2312”);

     

    图片链接边框去掉:用<a href="#"><img src="" border="0"></a>就去掉了.

     

     

    ---------------------------------------------------------Servlet部分-----------------------------------------------------------

    Servlet开发流程(这是servlet规范,没有理由,只有这么做)

    1.       在%TOMCAT_HOME%webapps下建一个文件夹如(myWebSite),然后在该文件夹下新建WEB-INF的文件夹下,写一个web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从加的目录ROOT下拷贝.

    2.       开servlet(引入servlet-api.jar,否则编绎不了)。

    3.       部署你的servlet,在web.xml文件中:添加代码(看例子)。

       <servlet>

    新葡亰496net,   <!--给你的servlet取名,任意的-->

            <servlet-name>hello</servlet-name>

                  <!--指明servlet的路径,(包名 类名)-->

            <servlet-class>com.tsinghua.Hello</servlet-class>

       </servlet>

     

       <servlet-mapping>

       <!--给你的servlet取名,任意的-->

            <servlet-name>hello</servlet-name>

                  <!--这是在浏览器中输入的访问该servlet的url,任意的-->

            <url-pattern>/sp</url-pattern>

       </servlet-mapping>

    4.       启动tomcat,访问你的servlet,在浏览器的地址栏输入,回车就可看到servlet的输出。

    开发servlet有三种方法

    1.       实现接口servlet来编写

    2.       继承GenericServet类(该写了servlet接口,所以有和servlet相同的方法service)。

    3.       继承HttpServlet类(该类有doGet,doPost方法)

    Servlet的生命周期

    1.       init()函数,用于初始化该servlet(类似于类的构造函数,该函数只会被调用一次(当用户第一次访问该页面的servlet时被调用。)。)。

    2.       业务逻辑函数(如:service,doGet,doPost等方法)(当用户每访问该servlet时,都会被调用,它有两个参数:ServletRequest—用于获取客户端的信息,ServletResponse—用于向客户端返回信息)。

    3.       destroy()函数,用于销毁servlet实例(释放内存),只有如下三种情况才会周用(1.reload该servlet(webApps),2.关闭tomcat,3.关机)值行了这个函数后,这个网站内的所有的session和conTest都被释放,为空。

    表单提交数据get请求和post请求的区别

    1.       从安全方面看get<post,因为get提交的数据会在浏览器地址栏显示

    2.       从提交的内容大小来看get<post, get提交的数据不能大于2K,面post提交的数据理论上不受限制,但是实际编程中建议不要大于64K。

    3.       从请求响应速度上看get>post,get要求服务器立即响应请求,而post请求可能形成一个队列请求。

    从以上几点看,表单提交方式(method)建议用post

    在sevlet中打印的html语句,可以不加引号

    同一用户的不同页面共享数据的四种方法

    1.  Cookie(小甜饼,在javax.servlet.http.*;这个包里面)(服务器在客户端保存用户的信息,比如登录名,密码…就是cookie,数据量并不大,服务器端在需要的时候可以从客户端读取。)。

    Cookie的使用方法:①Cookie有点像一张表,分两列一个是名字,一个是值,数据类型都是String。②创建Cookie(在服务器端创建):Cookie c=new Cookie(String name,String val);③将Cookie添加到客户端:response.addCookie(c); ④读取Cookie(从客户端读到服务器):Cookie[] allCookie=request.getCookies();c.getName();c.getValue();方法读取⑤修改Cookie存在时间:c.setMaxAge(30);单位秒,为负则该cookie不会存储,为0则删除该cookie,如果不设置存在时间,那第该Cookie将不会保存。

    2.  sendRedirect(地址跳转,注意中文处理)

    3.  Session(会话技术)(当用户打开浏览器,访问某个网站时,服务器就会在服务器内存为该浏览器分配一个空间,该空间被这个浏览器独占,这个空间就是session空间,其中的数据默认存在时间为30min,可以修改(在conf—web.xml中修改))。

    Session的使用方法:①得到session:HttpSession hs=request.getSession(true);

    ②向session添加属性:hs.setAttribut(String name,Object val);③从session得到某个属性:String name=hs.getAttribute(String name);④从session删除掉某个性性:hs.removeAttribute(String name);⑤修改session的存在的时间:hs.setMaxInactiveInterval(20);单位秒,为负则永远不超时,为0则马上超时。

    因为session的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用。

    注意:以文件—新建—窗口,的方式打开窗口,session的ID是不变的,也就是同一个session空间

     

    4.  隐藏表单提交(form)(input type=hidden name=““ value=““),在提交该表单时,能一并提交过去。(获取方式:req.getParameter(String name);)。

    Cookie VS session

    1.  存在的位置:cookie保存在客户端,session保存在服务器端。

    2.  安全性:比较而言,cookie的安全性比session要弱。

    3.  网络传输量:cookie通过网络在客户端与服务器端传输,而session保存在服务器端,不需要传输。

    4.  生命周期(20分钟为例)①cookie的生命周期是累计的,从创建时,就开始计时,20分钟后cookie生命周期结束,cookie就无效。②session的生命周期是间隔的,从创建时开始时计时,如在20分钟,没有访问过session,那么session信息无效,如果在20分钟内,比如第19分钟时,访问过session,那么它的生命周期将重新开始计算。③另外,关机会造成session生命周期结束,但是对session没有任何影响。

    使用ServletContext(和session一样,但是它所有的客户都可以访问)。

    1.       得到ServletContext实例:this.getServletContext();

    2.       你可以把它想像成一张表,这个和Session非常相似:每一行就是一个属性。添加属性:setAttribute(String name,Object ob); 

    得到值:getAttribute(Stringname); 返回Object。

    删除属性:removeAttribute(String name);

    3.       生命周期:ServletContext中的属性的生命周期从创建开始,到服务器关闭而结束。

    4.       使用ServletContext:的注意事项:因为存在ServletContext中的数据会长时间的保存在服务器,会占用内存,因此我们建议不要向ServletContext中添加过大的数据……. 切记

     

    Servlet操作数据库注意事项

    需要将连接数据库的3个jar包,拷贝到tomcat服务器

    具体有两种方法可以:

    (1).将.jar包拷贝到%tomcat%/lib文件夹

    (2).或者在你的webapps目录的WEB-INF文件夹下建立一个lib文件夹,然后

    把3个jar包拷贝到lib文件夹下

    两种方法的区别:

    第一种:所有webapps都可以使用3个jar包[公用库]。

    第二种:只有放如jar包的那个webapps能使用jar包[独用lib库]。

    特别要注意sql 注入漏洞:用户名和密码不能同时查询,可先用用户名查出密码,再用查出来的密码与输入的密码进行比较。

     

    分页技术(方法)

    我们先讲讲分页的算法:

    我们需要定义四个量,它们有各自的用处,如下:

    int pageSize:每页显示多少条记录

    int pageNow:希望显示第几页

    int pageCount:一共有多少页

    int rowCount:一共有多少条记录

    说明:

    pageSize是指定的(常量)。

    pageNow是用户选择的(变量)。

    rowCount是从表中查询得到的(是个变量)。

    pageCount是计算出来的,该计算式为:

        if(rowCount%pageSize==0)

        {

             pageCount=rowCount/pageSize;

    }

    else

    {

          pageCount=rowCount/pageSize 1;

    }

    然后查询数据库,我们可能很自然的想到,用

    select 字段列表 from 表名  where id between ? and ?

    但是如果表的某个id被删除了,那么某页可能就会少一条记录。

    因此最终解决方法是如下语句:

        select top pageSize 字段名列表  from 表名 where  id  not in

    (select top pageSize *(pageNow-1)  id  from 表名)

       翻页的链接可以用下拉框或输入文本

    网站框架问题分析

    1界面和业务逻辑放在一起(model1模式),有以下问题:

         (1).有很多页面逻辑相似(如:操作数据库),有重复代码(一般一段代码重复了三次或三次以上,就应该把这段代码封装到一个函数里面去)。

         (2).整个框架没有清晰的层次关系,显得非常乱。

         (3).代码一点也不优雅,可读性差,可维护性差。

    2.进行分层(界面层、业务逻辑层)[mv模式](m—>model模型,v—>view视图)

       (1).将常用的代码(比如边接数据库),封装到类中。(现在java中javaBean一般与数据库中表映射,充当表,如(UserBean.java(表示表),UserBeanCl.java(业务逻辑),ConnDB.java(得到连接)。))。

    3.在UserBeanCl中,查询数据库,返回查询结果集时,要返回ArrayList集合,而不是直接返回ResultSet,原因如下:(rs代表ResultSet的一个对象)

       (1).如果返回ResultSet,那么我们在使用ResutlSet时,是不能关闭该RestultSet相互关联的数据库连接等资源,从而造成资源浪费。

       (2).如果返回ResutlSet,我们只能使用rs.getInt(?),rs.getString(?)…,这样的方法来得到结果,代码的可读性不好,维护起来不方便。

       (3).返回ArrayList集合方法(ArrayList作为中转,就可以尽快的关闭rs,数据库连接,同时更能体现面向对象编程,代码可读性更好。)如下:

            ①将rs中的每一条记录,封装成一个UserBean对象ub。

    ②将封装成一个UserBean对象ub放入到ArrayList集合中,利于管理。③从ArrayList结合中取出ub,然后使用。

     

    Servlet中操作文件(和java 一样)

    tomcat的配置:

    1.       如何修改tomcat的端口(浏览器默认端口:80,可以不写)

    (1)    需要启动两份tomcat服务器、服务占用了8080端口时可改

    (2)    修改端口方法:修改%timcat%/conf/server.xml文件中port=“8080”数据修改成你需要的端口即可。

    (3)    端口号,是用两个字节存放,范围在1~65530,但是1~1024是有名端口,很有可能被用,所以尽量设大一些。

    2.       如何设置虚拟目录

    (1)    tomcat所在的磁盘空间不够用了、为了统一管理,希望放在某个特定的目录下,而不是默认目录。

    (2)    修改方法:修改%timcat%/conf/server.xml文件,在适当的位置(<Host></Host>中最后)添加如下信息:<Context path=“/mysite(站点文件夹名)” docBase=“c:mysite(站点目录)” debug=“0”/>

    3.       如何给tomcat的管理员设置密码

    (1)    修改方法:修改%timcat%/conf/tomcat-users.xml文件中可以给管理员设置密码,密码设置可以防止非法用户远程登录到tomcat。

    (2)    在默认情况下,管理员的密码是空密码,这样不法分子可能远程发布一个站点,并在某个servlet中加入一些可怕的语句(比如重启、关机…)。

    (3)    利用密码为空搞破坏,步骤如下:

    ①     利用jdk自带的jar工具将有破坏的站点打包成*.war文件。使用jar工具需要配置jdk的环境变量path=%JAVA_HOME%/bin; 或者在你编绎时写入 set path=%path%;你的jdk目录bin,这样即可在任何目录下使用jar命令,然后切换路径到需要打包的那个文件夹目录下;打包的命令是:jar –cvf war 文件名 *.*

    ②     通过tomcat管理页面将站点发布到tomcat

    ③     访问有破坏的代码的servlet,这样你就被黑了。

    4.       如何设置数据源和连接池(公司常用!)(因为JDBC连接速度太慢)没测试出来,网上查

    (1)    为什么使用:每次操作数据库,需要加载驱动才能得到一根连接,然后返回结果,加载驱动是要花时间的。

    (2)    解决方法:配置”连接池”与”队列池”。”连接池”事先与数据库连接好了,并有了几根(可配置)连接,如果连接也中有空闲的连接,tomcat就分配给请求客户端;如果没有空闲的连接,请求客户端将会在队列池中等待(时间可配置),直到有连接。因为直接取连接,所以速度快。

    (3)    修改方法:有两种方法(1)通过tomcat管理界面来配置(2)修改配置文件。修改%timcat%/conf/server.xml文件, 在指定的位置添加代码即可:

    //**************************************************************

    <Context path="/myWebSite1" docBase="D:Program FilesApache Software FoundationTomcat 6.0webappsmyWebSite1" debug="0">

    <!--name:给数据源设置名字(jndi) auth:表示该数据源是谁管理 type:类型-->

    <Resource name="xuefeng" auth="Container" type="javax.sql.DataSource"/>

    <ResourceParams name="xuefeng">

    <!--工厂设置-->

    <parameter>

    <name>factory</name>

    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

    </parameter>

    <parameter>

    <!--驱动设置,该驱动放在tomcat的common/lib下,或者放在该站点自己的lib目录下-->

    <name>driverClassName</name>

    <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

    </parameter>

    <parameter>

    <!--设置url-->

    <name>url</name>

    <value>jdbc:microsoft:sqlserver://192.168.190.2:1433;DatabaseName=spdb</value>

    </parameter>

    <parameter>

    <!--设置连接数据库的用户名-->

    <name>username</name>

    <value>sa</value>

    </parameter>

    <parameter>

    <!--设置连接数据库的密码-->

    <name>password</name>

    <value>430482</value>

    </parameter>

    <parameter>

    <!--在连接池中最大的激活连接数 -->

    <name>maxActive</name>

    <value>50</value>

    </parameter>

    <parameter>

    <!--在连接池中最大的保留(空闲)连接数,用的人少时-->

    <name>maxIdle</name>

    <value>10</value>

    </parameter>

    <parameter>

    <!--客户端在队列池中最大等待时间,按秒计算,-1指一直等,直到有连接-->

    <name>maxWait</name>

    <value>-1</value>

    </parameter>

    </ResourceParams>

    </Context>

    //**************************************************************

    如果要加中文注释,则必需得在最前加如下语句:

    <?xml version="1.0" encoding="gb2312"?>

    //*************************************************************

    (4)    如何使用:如果使用连接池的方式来连接数据库,那么就要这样: 

    Context ctt=new javax.naming.InitialContext();

    DataSource ds=(DataSource)ctt.lookup("java:comp/env/数据源的名");//粉红//色的是:得到配置环境保护,这是固定写法

    Connection Ct=ds.getConnection();

     

     -------------------------------------------------------jsp部分-------------------------------------------------------------

    jsp的概述

      jsp是servlet技术的补充,访问jsp的过程:如果是第一次访问,jsp文件被服务器翻译

      成一个对应的java文件(servlet),然后,再被编译成.class文件并加载到内存中。如果是以后访问jsp,那就直接调用内存中的jsp实例,所以,第一次访问jsp慢,后面访问jsp的速度就会变快了。

    为什么会出现jsp技术?

    程序员在开发过程中,发现servlet做界面非常不好àjsp

    一个公式:jsp=html java片段 jsp标签 javascript(css)à比较综合

    jsp功能的强大是因为可以与javabean结合使用(即:jsp作前台(界面),javabean作后台(逻辑层))。

    Jsp javabean的基础上再结合servlet,就会构成mvc的开发模式,Mvc模式是目前软件公司中相当通用的开发模式,是重点

     

    Jsp的基本语法(冒号后面是举例)

    (1)    指令元素---用于从jsp发送一个信息到容器,比如设置全局变量,文件字编码,引入包等,主要包括如下:

    ①       page指令:<%@page contentType=”text/html”;charset=gb2312%>

    ②       include指令:<%@include file=”filename”%>

    ③       taglib指令---这个指令允许在jsp页面使用自定义的标签:<myTag:yourTag num1=”123”>①①

    (2)    脚本元素---在一定程度上可能理解就是java的片段scriplet

    ①       scriplet:<%java代码,可以和写java一样写%>

    ②       表达式:<%=java表达式%>  <%=rs.getString(1)%>

    (3)    Declaration声明:<%!变量声明 %>比如:<%!int count=10%>

    <%!函数声明 %>比如:

    <%! int jssuan(int num)

    {

        int result=0;

        for(int i=0;i<num;i )

        {result=result i;}

    }

    %>

    (4)    动作元素---动作元素是使用xml语法写的,是jsp规定的一系列标准确性动作,在容器处理jsp时,当容器遇到动作元素时,就执行相应的操作。常用的几个如下:

    ①       <jsp:useBean> //创建一个jvabean实例

    ②       <jsp:setProperty> //给一个java实例设置初始值

    ③       <jsp:param> //给一个jsp设置参数,常常与<jsp:include>结合使用,如:

            <jsp:include file=”info.jsp”>

            <jsp:param name=”parameter1” value=”parameterValue”/>

            <jsp:param name=”parameter2” value=” parameterValue”>

            </jsq:include>

    ④       <jsp:getProperty> //取得一个javabean实例的成员变量

    ⑤       <jsp:include> //引入另外一个文件

    ⑥       <jsp:plugin> //使用插件

    ⑦       <jsp:forward> //转发

    ⑧       <jsp:fallback> //

    (5)    jsp的九大内置对象(可以直接使用,不用创建。)

    ①       out (是servlet中如:PrintWriter out=res.getWriter();)//向客户端输出数据,字节流,如:out.println(“”);

    ②       request //接受客户端的http请求,如:

          getParameter(String name); //name表示表单的参数名

          getParameterValues(String name); //使用得到是String []

          setAttribute(String name,Object obj); //设置名字为name的obj,值为obj

          getAttribute(String name); //返回由name指定的属性值如果不存在就返回null

          getCookie(); 

    ③       response //封装jsp产生的回应,如:

          addCookie(Cookie cookie);

          sendRedirect(“welcome.jsp”);

    ④       session(是servelt中HttpSessio类的实例) //用于保存用户的信息,跟踪用户的行为

          setAttribute(String name,Object obj);

          getAttribute(String name);

    ⑤       application //多个用户共享该对象,可以做计数器

    ⑥       pageContext //代表jsp页面的上下文

    ⑦       exception //代表运行时的一个异常

          getMessage();

    ⑧       page //代表jsp这个实例本身(使用比较少)。

    ⑨       config //代表jsp对应的servlet配置,可以得到web.xml中的参数

    jsp与servlet的区别:

     

    (1)    jsp和servlet是对应关系:jsp文件被服务器翻译成一个对应的servlet文件并编译成.class文件,对应的servlet文件放在work目录下。

    (2)    jsp是以servlet为基础的

    (3)    jsp文件改变时,服务器能自动重新加载该文件,不需要重启服务器。

    发送电子邮件(javamail)到用户信箱sd

     

    Js中验证字符串是否为数字:(1)可以Math.round(num)!=num  (2)使用正则表达式

     

    做项目(网上商城):

    一.系统分析与设计:

    1.需求分析:

       i.系统描述:[系统可以做什么];

           电子商声场包括两个基本本部分,一个是前台销售程序,一个是后台管理程充。

         用户可以在前端浏览,搜索商品,能够看到最新的公告(如活动、物价商品),

         用户可以使用购物车购买商品,可以对入入购物车的商品进行处理,如修改数据量,从购物车中去除商品等,用户购完商品必须到服务台结帐,也叫下定单,用 户下完订单,可以打印或E-mail保留订单,以便收到商品时查对;

           后台管理程序,商家在此管理本企业的相关信息发布,录入,更改商品细信息,订单查询处理,并管理在商城里注册的用户。

       ii.角色(按照类来划分用户):

           1.前端用户

           2.系统管理员:可以细化为:商品和公告管理者:订单管理者

       iii.用例识别:

          在角色的基础上,可以识别出与角色相关的用例。

          前台用户:

    系统管理员:

    2.用例图

    3.功能模块

     

     

    做项目的步骤:

    1.  界面(模仿)。

    2.  数据库(表的设计)[界面(功能)--à猜出表来??](用户表和商品表)。

    3.  建立web工程,testShopping

    4. 一步一步的画当前流程图

    5.  开始写主页面(index.jsp)[界面用dw,界面我使用”死去活来”法,即先是静态的,然后才连接数据库,把它写活。],在dw中我们建html--à在myeclips中我们建立jsp。在开发界面时,我们使用table css方式布局。在table css方式布局中,常驻用的一个技巧是:在某行列中嵌入一个表格,可做精确布局。

    CSS:是层叠样式表:控制网页的字体、颜色、大小、背景、边框……。

                           先会用,再会做。(flash,javascript,ps)

    6.  把静态的页面向动态的页面修改[死去活来法]。

    7.  Mvc 模式写 model和servlet部分的开发。

    8.  HashMap的集合

    a.       hashmap就像一张表

    b.       key值是不能重复

    c.       key值和value值,可以是java的object类型

     

    hashmap充当购物车是很好

    key值-------à书的id

    values值-------à书的数量

    hashmap提供了一堆好的函数

    select * from goods goodsId in(1,2,3,5)

    9.  对购物车可以增加,删除,清空,修改数量

           为了让servlet得到货物的id 的数量,可使用隐藏表单

    10.              a.设计订单(怎么设计???)

     

     

    表的设计:如设计定单表:如果设计为如下:

    定单表(orders)

    ordersId

    (订单号)

    userId

    (用户id)

    goodsId

    (商品id)

    Nums

    (数量)

    orderDate

    (时间)

    payMode

    (付款方式)

    isPayed

    (付款否)

    totallPrice

    (总价)

    1

    3

    5

    3

    2007-8-9

    货到付款

    890

    1

    3

    4

    4

    2007-8-9

    货到付款

    890

    1

    3

    3

    3

    2007-8-9

    货到付款

    890

    1

    3

    2

    4

    2007-8-9

    货到付款

    890

    以上订单表,很容易操作,但是出现在数据冗余。

     

    解决方法是:把重复的字段,单拿出来做一张表(订单表),把不重复的字段单拿出来做一张表(订单细节表)。如下图,两个表

    订单表(orders)

    ordersId

    (订单号)

    userId

    (用户id)

    orderDate

    (时间)

    payMode

    (付款方式)

    isPayed

    (付款否)

    totallPrice

    (总价)

    1

    2

    2007-8-9

    货到付款

    890

     

    订单细节表(orderDetail)

    ordersId(订单号)

    goodsId(商品id)

    Nums(数量)

    1

    5

    3

    1

    4

    4

    1

    3

    3

    1

    2

    4

     

    这是就很好的解决了:

     

    数据表的设计模式:表和表之间有多对多的关系时,就应当使用中间表来解决数据冗余的问题。

    总结:通过定单细节表,把订单表和货物表的多对多的关系,简化成了一对多的关系,从机达到解决数据冗余的问题。

     

    批量操作数据库:new Statement().addBatch(“sql语句”);

    本文由新葡亰496net发布于网络数据库,转载请注明出处:新葡亰496net:新闻发布的一点小总结,理解php分

    关键词:

上一篇:新葡亰496net函数用法一,的选取办法

下一篇:没有了