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

在一个实现将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 thoughts on “静态页面嵌入jsp动态页面的一些总结和疑问”

  1. 在一个实现将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日志中检测。

    这些上面的内容都可以暂且缓一下,把页面重新写一下是当务之急。因为,现在大部分页面就是一个表格,这会影响网页加载速度。要把它分成一个一个的小表格。

  2. 使用了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页面中。

    谢谢。

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

    我想了一个方法也许可以减少第一次查看的等待时间,就是紧接帖子提交进数据库,在发送邮件的那个线程里的前面,用程序调用一次页面查看使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!

  4. 我刚才提交了一篇日记首次查看花了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文件的时间了:)

Comments are closed.