登录站点

用户名

密码

静态页面嵌入jsp动态页面的一些总结和疑问

已有 847 次阅读  2006-12-21 21:58   标签学习日记  项目实施 
在一个实现将JSP动态页面转为静态的方案(转帖)中后面的那种方法基本上完成了本站的动态页面静态化工作,下面是一些总结和疑问。希望能给碰到类似情况的朋友一点启发。也希望有朋友能够启发一下我在文中提到的疑问。谢谢。

1、页面菜单上部的用户信息是用iframe嵌入的,像下面:

   <!-- show user state with iframe framework -->
   <iframe frameborder="0" name="user_state" width="771" height="30" scrolling="no" src="/common/userState.jsp"></iframe>


/common/userState.jsp是从当前session中取出用户的相关信息显示出来。
不过,我发现: 在firefox中位置不动的信息条在IE中却可以用鼠标上下移动,而且,始终位置在底部,还把字脚给挡住了,搞不懂怎么做了?(注:这个问题已经解决,见:怎样控制iframe内嵌网页的位置
,2006年12月29日10:30分, littlebat)

2、显示日记或目标的帖子下面的游客回复框也是用iframe嵌入的,像下面:

   <iframe frameborder="0" name="guest_reply" width="771" height="456" align="center" scrolling="auto" src="/common/guestReply.jsp?parentID=<c:out value=""/>&defaultTitle=<c:out value=""/> "></iframe>


这个有几点自己的总结:
1)、url中文参数的传递要编码:如:

<%
  //encode default title
  String oriTitle = "re:" + ((ArticleInfo)request.getAttribute("aGoal")).getArticleName();
  String encodedDefaultTitle= URLEncoder.encode(oriTitle, "UTF-8");
  pageContext.setAttribute("encodedDefaultTitle", encodedDefaultTitle);
%>


使用时再解码,如:

        String encodedDefaultTitle = request.getParameter("defaultTitle");
        String defaultTitle = URLDecoder.decode(encodedDefaultTitle, "UTF-8");
        pageContext.setAttribute("defaultTitle", defaultTitle);


2),当前页面处理的信息可以放入pageContext中(如:pageContext.setAttribute("defaultTitle", defaultTitle);),它的作用域应该是当前页面,可以用 <c:out value=""/> 之类的技术取出来,jsp的方法不知道。

3),为了使嵌入的jsp页面中的form提交后能够返回它的被嵌入的_parent页面,可以在form提交时加 target="_parent"解决,如下:

<html-el:form action="postGuestArtAction.do?typeID=3&goalID=" target="_parent" method="POST">
...
</html-el:form>


3、页面计数:
用script做的,如下:

<script language="javascript" src="/count.do?artID=<c:out value=""/>"></script>

疑问:

1)、怎样在script中调用程序,得到当前页面的实时点击数并写入页面的合适位置?上面的功能只能计数,然后统一生成页面更新计数;

2)、本来上面的count.do可以用count.jsp来做的,也许这样还要好点,但是我不知道怎样在jsp中调用struts中的数据源?用jdbc连接常常形成连接数超出空间允许的最大值而不能正确计数;
在struts的action中这样调用数据源:javax.sql.DataSource ds = getDataSource(request, "myDataSourceName");

4)、当用*.jsp后缀名作为静态文件时,提交新日记或目标后,第一次查看会有编译等待jsp的时间,但是写日记和目标毕竟是很少时候,99.99%的时候还是在看的。选用*.jsp是我动过脑子的,最终要是证明错了我也不后悔。因为,我曾经努力过。

4、因为,听说搜索引擎会跟进frame中的框架页面,也不知道会不会跟进iframe的页面,把那两个动态的jsp页面的url写进了robots.txt中禁止搜索引擎抓取这些没有实际意义的东西。像下面:

User-agent: *
Disallow: /common/userState.jsp
Disallow: /common/guestReply.jsp
Disallow: /count.do


本站完整的robots.txt见:http://java.learndiary.com/robots.txt
里面主要禁止搜索引擎访问一些个人才会用的功能,我是第一次写robots.txt,哪位朋友看了发现有问题请一定给我提示一下,谢谢。
分享 举报

发表评论 评论 (4 个评论)

  • littlebat 2006-12-22 11:02
    在一个实现将JSP动态页面转为静态的方案(转帖)中后面用程序调用页面不会连锁调用页面里面的iframe,我用程序确认的。但是会不会调用页面的<script language="javascript" src="/count.do?artID=1"/>还没有确定。
    所谓程序调用是像下面的形式:

                String str = "http://localhost:8080/test/toHtmlPath?file_name="                + fileName + "&&path=" + path + "&&realName=" + realName  
                   + "&&realPath=" + realPath;                               
                 int httpResult;                                             
                 URL url = new URL(str);                                     
                 URLConnection connection = url.openConnection();            
                 connection.connect();                                       


    在我现在正在使用的linux下的w3m游览器查看当前页面不会连锁调用里面的iframe内嵌的页面和script里面的内容。当然这是在默认设置的情况下,也不知道是否可以作一些设置使w3m调用这些内容?

    另外,搜索引擎在抓取当前页面时是否会连锁调用时而的iframe和script里面的内容还没有确定。

    google指南说它们的蜘蛛抓取页面跟lynx浏览器看到的方式一样,可以用lynx试一下。

    针对上面没有确定的问题:可以查一下有关资料,也可以在程序log日志中检测。

    这些上面的内容都可以暂且缓一下,把页面重新写一下是当务之急。因为,现在大部分页面就是一个表格,这会影响网页加载速度。要把它分成一个一个的小表格。
  • littlebat 2006-12-23 20:43
    使用了commons-dbcp-1.2.1.jar和commons-pool-1.3.jar的组件和mysql数据库,在struts-config.xml中这样设置的:


    <!--
     ============================================ Data Source Configuration
    -->
    <data-sources>
    <data-source key="myDataSourceName" type="org.apache.commons.dbcp.BasicDataSource">
        <set-property
          property="driverClassName"
          value="com.mysql.jdbc.Driver" />
        <set-property
          property="url"
          value="jdbc:mysql://localhost:3306/learndiarydb?useUnicode=true&characterEncoding=UTF-8" /><!--&必须使用转义字符&-->
        <set-property
          property="username"
          value="dbuser" />
        <set-property
          property="password"
          value="1234" />
        <set-property
          property="maxActive"
          value="10" />
        <set-property
          property="maxWait"
          value="5000" />
        <set-property
          property="defaultAutoCommit"
          value="true" />
        <set-property
          property="defaultReadOnly"
          value="false" />
        <set-property
          property="validationQuery"
          value="select CURRENT_DATE" />
    </data-source>
    </data-sources>


    在struts的action中这样调用数据源:javax.sql.DataSource ds = getDataSource(request, "myDataSourceName");

    但是,怎样在Struts的action之外通过Struts的数据源取得数据库连接呢?比如在一个jsp页面中。

    谢谢。
  • littlebat 2006-12-26 09:48
    前面说过,提交新的日记或新目标后第一次查看(修改和提交评论不会)帖子会有一个等待编译的时间。今天,提交了一篇日记后,点击查看日记内容大约等了半分钟。时间有点久,但是这不是主要问题,因为提交新日记或目标的时候占总的系统使用时间极少。

    我想了一个方法也许可以减少第一次查看的等待时间,就是紧接帖子提交进数据库,在发送邮件的那个线程里的前面,用程序调用一次页面查看使jsp页面自动编译。可能,这可以减少几秒等待查看的时间。(后注:已经采用这个方法,效果还是可以的,提交帖子后由程序调用一次页面使jsp页面编译完成的时间快的时候2~3秒,慢的时候10秒左右,这样,新提交帖子后第一次查看打开页面基本上只用几秒时间了。当然,比起没有用jsp静态页面之前提交帖子后查看帖子还是有点慢,继续试用和想办法改进中。。。littlebat: 2006年12月29日16:00分)

    现在,动态页面静态化后的系统基本可用。虽然还有一些小毛病,如:
    1、在目标中游客提交评论如果格式错误返回的页面不对;
    2、删除帖子后的页面重新静态化好像还不大稳定;
    3、曾经有一次页面重新静态化后主页和帖子页出现空白,但只有一次,而且是在程序调试的过程中出现的;
    4、更新帖子的网站地图的自动更新没写,每天用手动更新一次;
    5、更新帖子后的上一条帖子和下一条帖子和首条帖子的静态文件的“上一条、下一条”导航的链接自动更新没写,每天用手动更新一次;
    6、手动更新还有一个好处,守着系统更新(网站地图20秒以内,全部静态文件2~3分钟)再看一下更新成功没有心里要踏实点;总觉现在系统的静态化方案的可靠性不是很高;
    7、如果有必要,上面的小毛病以后可以写一下。

    但是,以后,以后还没有来到,以后太不可知了,以后再说。。。

    现在,我的注意要重新回到学习JAVA设计模式连带学习英语上了。将就现在外部条件非常适合学习,我要把握这可贵的时间。时间如流水,一旦放过,就不会再来。

    这篇日记也就此打住。Good luck!
  • littlebat 2006-12-30 22:28
    我刚才提交了一篇日记首次查看花了1分多钟,这可以从log中证实:

    2006-12-30 22:04:53,968 - connect success in CallHtml.callOnePage(String)!
    2006-12-30 22:04:53,968 - Call newly created artcle's static jsp file named: /diaries/2930.jsp in send mail thread used time : 75672ms.


    我想了一个方法,以后有必要时可以用:
    事先按帖子的ID生成jsp文件,里面动态包含以后要生成的静态文件,如1.jsp包含1.html等。由系统一次生成几百个这样的jsp文件,再集中时间编译,以后,提交了对应的静态文件就直接用就是了。隔一定时间把实际是评论的ID生成的jsp文件删除就是了。

    这样,采用这种预先编译的jsp文件,以后提交同ID的帖子后,第一次查看就没有等待编译jsp文件的时间了:)
涂鸦板