用在一个实现将JSP动态页面转为静态的方案(转帖)中后面的那种方法基本上完成了本站的动态页面静态化工作,下面是一些总结和疑问。希望能给碰到类似情况的朋友一点启发。也希望有朋友能够启发一下我在文中提到的疑问。谢谢。
1、页面菜单上部的用户信息是用iframe嵌入的,像下面:
|
/common/userState.jsp是从当前session中取出用户的相关信息显示出来。
不过,我发现: 在firefox中位置不动的信息条在IE中却可以用鼠标上下移动,而且,始终位置在底部,还把字脚给挡住了,搞不懂怎么做了?(注:这个问题已经解决,见:怎样控制iframe内嵌网页的位置
,2006年12月29日10:30分, littlebat)
2、显示日记或目标的帖子下面的游客回复框也是用iframe嵌入的,像下面:
|
这个有几点自己的总结:
1)、url中文参数的传递要编码:如:
|
使用时再解码,如:
|
2),当前页面处理的信息可以放入pageContext中(如:pageContext.setAttribute("defaultTitle", defaultTitle);),它的作用域应该是当前页面,可以用 <c:out value=""/> 之类的技术取出来,jsp的方法不知道。
3),为了使嵌入的jsp页面中的form提交后能够返回它的被嵌入的_parent页面,可以在form提交时加 target="_parent"解决,如下:
|
3、页面计数:
用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中禁止搜索引擎抓取这些没有实际意义的东西。像下面:
|
本站完整的robots.txt见:http://java.learndiary.com/robots.txt。
里面主要禁止搜索引擎访问一些个人才会用的功能,我是第一次写robots.txt,哪位朋友看了发现有问题请一定给我提示一下,谢谢。
在在一个实现将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日志中检测。
这些上面的内容都可以暂且缓一下,把页面重新写一下是当务之急。因为,现在大部分页面就是一个表格,这会影响网页加载速度。要把它分成一个一个的小表格。
使用了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页面中。
谢谢。
前面说过,提交新的日记或新目标后第一次查看(修改和提交评论不会)帖子会有一个等待编译的时间。今天,提交了一篇日记后,点击查看日记内容大约等了半分钟。时间有点久,但是这不是主要问题,因为提交新日记或目标的时候占总的系统使用时间极少。
我想了一个方法也许可以减少第一次查看的等待时间,就是紧接帖子提交进数据库,在发送邮件的那个线程里的前面,用程序调用一次页面查看使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!
我刚才提交了一篇日记首次查看花了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文件的时间了:)