Technorati 标签:  java, javaee项目

    发现自己无法完整地写出一个网页的源代码,便只能借助别人的源码来研究当中涉及的技术,希望久而久之可以提高自己的技术水平。

一、概述

   许愿墙是指可以许愿或发送祝福的程序,通过该程序用户可以许下心中的愿望,并能得到他人的支持。在这个项目里,可以了解到的技术主要有:

1、应用 div + css 样式进行页面布局

2、通过过滤器解决中文乱码

3、定义生成指定范围随机数标签的方法

4、支持字条后人气自动增加的方法

5、利用Ajax 实现滚动显示最新10条许愿

6、无刷新添加字条并预览

7、关闭添加字条窗口时初始化菜单

二、系统预览

    主页效果图:

image

    贴子条窗口运行效果图:

image

    字条列表效果图:

image

三、应用 div + css 布局

    div + css 布局是网站开发常用的方式之一,是一种比较新的排版观念。采用 div + css 样式进行布局时,首先应将页面在整体上进行<div> 标签分块,然后对各个块进行css定位,最后再向各个块中添加相应的内容。

    页面布局的形式是多变的,可以根据网站的信息划分和排列进行布局划分。一般来说,一个页面可以包含以下几个板块:header(网站logo和图片),sidebar(边侧的工具栏),content(主要内容区域)和footer(脚注)等,当中sidebar有时会存在两个(左右工具栏)。在谈布局策略之前,了解几个在布局时常用的的名词:居中,固定和液态。“居中”顾名思义就是居中放置;“固定”指的是用 px 来指定宽度和高度(也可以指指定宽度或高度),指定后,其宽度或高度便固定为多少像素了;“液态”指的是使用百分比来指定宽度或高度,受当前字体或其内元素的长宽的影响。

    div + css 布局策略大概可以分为以下几大类:

1、列固定(液态),居中

2、列固定(液态),居中,标题和脚注

3、列固定(液态),居中,左侧栏,标题和脚注

4、列固定(液态),居中,右侧栏,标题和脚注

    现在给出四大布局的概览图:

image image image image

     下面给出列固定,居中,左侧栏,标题和脚注的布局代码,其他的类似:

<!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>无标题文档</title>
<style type="text/css">
<!--
body {
    font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;
    background-color: #42413C;
    margin: 0;
    padding: 0;
    color: #000;
}
.container {
     960px;
    background-color: #FFF;
    margin: 0 auto; /* 侧边的自动值与宽度结合使用,可以将布局居中对齐 */
}
/* ~~ 标题未指定宽度。它将扩展到布局的完整宽度。标题包含一个图像占位符,该占位符应替换为您自己的链接徽标 ~~ */
.header {
    background-color: #ADB96E;
}
.sidebar1 {
    float: right;
     180px;
    background-color: #EADCAE;
    padding-bottom: 10px;
}
.content {
    padding: 10px 0;
     780px;
    float: right;
}
.footer {
    padding: 10px 0;
    background-color: #CCC49F;
    position: relative;/* 这可以使 IE6 hasLayout 以正确方式进行清除 */
    clear: both; /* 此清除属性强制 .container 了解列的结束位置以及包含列的位置 */
}
</style></head>
<body>
<div class="container">
  <div class="header"><a href="#"><img src="" alt="在此处插入徽标" name="Insert_logo" ;180" height="90" id="Insert_logo" style="background-color: #C6D580; display:block;" /> 
    <!-- end .header --></div>
  <div class="sidebar1">
    <ul class="nav">
      <li><a href="#">链接一</a></li>
      <li><a href="#">链接二</a></li>
      <li><a href="#">链接三</a></li>
      <li><a href="#">链接四</a></li>
    </ul>
    <p> 以上链接说明了一种基本导航结构,该结构使用以 CSS 设置样式的无序列表。请以此作为起点修改属性,以生成您自己的独特外观。如果需要弹出菜单,请使用 Spry 菜单、Adobe Exchange 中的菜单构件 或其它各种 javascript 或 CSS 解决方案创建您自己的菜单。</p>
    <p>如果您想要在顶部进行导航,只需将 ul.nav 移到页面顶部并重新创建样式即可。</p>
    <!-- end .sidebar1 --></div>
  <div class="content">
    <h1>说明</h1>
    <p>请注意,这些布局的 CSS 带有大量注释。如果您的大部分工作都在设计视图中进行,请快速浏览一下代码,获取有关如何使用固定布局 CSS 的提示。您可以先删除这些注释,然后启动您的站点。要了解有关这些 CSS 布局中使用的方法的更多信息,请阅读 Adobe 开发人员中心上的以下文章:<a href=http://www.adobe.com/go/adc_css_layouts">http://www.adobe.com/go/adc_css_layouts</a>。您可以先删除这些注释,然后启动您的站点。若要了解有关这些 CSS 布局中使用的方法的更多信息,请阅读 Adobe 开发人员中心上的以下文章:<a href=http://www.adobe.com/go/adc_css_layouts">http://www.adobe.com/go/adc_css_layouts</a></p>
    <h2>清除方法</h2>
    <p>由于所有列都是浮动的,因此,此布局在 .footer 规则中采用 clear:both 声明。此清除方法强制使 .container 了解列的结束位置,以便显示在 .container 中放置的任何边框或背景颜色。如果您的设计要求您从 .container 中删除 .footer,则需要采用其它清除方法。最可靠的方法是在最后一个浮动列之后(但在 .container 结束之前)添加 <br class="clearfloat" /> or <div class="clearfloat"></div>。这具有相同的清除效果。</p>
    <h3>徽标替换</h3>
    <p>此布局的 .header 中使用了图像占位符,您可能希望在其中放置徽标。建议您删除此占位符,并将其替换为您自己的链接徽标。 </p>
    <p> 请注意,如果您使用属性检查器导航到使用 SRC 字段的徽标图像(而不是删除并替换占位符),则应删除内嵌背景和显示属性。这些内嵌样式仅用于在浏览器中出于演示目的而显示徽标占位符。 </p>
    <p>要删除内嵌样式,请确保将 CSS 样式面板设置为“当前”。选择图像,然后在“CSS 样式”面板的“属性”窗格中右键单击并删除显示和背景属性。(当然,您始终可以直接访问代码,并在其中删除图像或占位符的内嵌样式。)</p>
    <h4>背景</h4>
    <p>本质上,任何 div 中的背景颜色将仅显示与内容一样的长度。这意味着,如果要使用背景颜色或边框创建侧面列的外观,将不会一直扩展到脚注,而是在内容结束时停止。如果 .content div 将始终包含更多内容,则可以在 .content div 中放置一个边框将其与列分开。</p>
    <!-- end .content --></div>
  <div class="footer">
    <p>此 .footer 包含声明 position:relative,以便为 .footer 指定 Internet Explorer 6 hasLayout,并使其以正确方式清除。如果您不需要支持 IE6,则可以将其删除。</p>
    <!-- end .footer --></div>
  <!-- end .container --></div>
</body>
</html>

    更多的布局方式和代码设计可以参考 Dreamweaver cs6 的模板文件。

四、Ajax 中文乱码的解决方案

    Ajax 不支持多种字符集,其默认的字符集是 utf-8,因此在应用 ajax 时 应及时进行编码转换,否则程序就会出现乱码。一般情况下,有以下两种情况会产生中文乱码问题。

    1、发送路径中的参数有中文,在服务器段接收参数值时产生乱码,如:

 
    

var url="a.jsp?wishMan=小李"

xmlHTTP.open ("post",url,true); 

    将数据提交到服务器有两种方法, 一种是 get 方法, 另外一种是 post 方法。使用不同的方法提交数据,在服务器端接收参数时解决中文乱码的方法是不同的。具体如下;

    (1)当接收 get 方法提交的数据时,要将编码转换为 gbk,代码设计如下:

    String wishMan = request.getParameter(“wishMan”);

    out.println(“祝福对象:" + new String(wishMan.getBytes(“ISO-8859-1”),"gbk“));//解决中文乱码

   (2)由于应用 post 方法提交数据时,默认的字符编码是 utf-8,因此当接收使用 post 方法提交的数据时,要将编码转换为 utf-吧,如下:

    String wishMan = request.getParameter(“wishMan”);

    out.println(“祝福对象:" + new String(wishMan.getBytes(“ISO-8859-1”),"utf-8“));//解决中文乱码

    2、返回到 responseText 或 responseXML 的值中包含中文时会产生乱码

    在接收responseText 或 responseXML 的值时,如果包含中文,则需要将其转换为 gbk 或 gb2312 编码,并且将显示该值页面的编码格式设置为 gbk 或 gb2312,否则会产生乱码。

    jsp页面可以如下设置:

<%@ page contenttype="text/html;charset=gb2312%>

    html页面可以如下设置:

<meta http-equiv="content-type" content="text/html; charset=gb2312" />

    servlet 则可以如下设置:

response.setcontenttype("text/html;charset=gb2312"); 
request.setcharacterencoding("gb2312");