当前位置: 首页 > 图文教程 > 网络编程 > JSP > 写一个对搜索引擎友好的文章SEO分页类

JSP
我认为JSP有问题(上)
我认为JSP有问题(下)
jsp“抓”网页代码的程序
关于在bean里面打印html的利弊看法
bean里面如何打印到html页面
jdbc3中的RowSet 接口规范
Apusic Application Server1.0中jsp源代码泄漏漏洞
Unify的eWave ServletExec拒绝服务漏洞
通过提交超长的GET请求导致IBM HTTP Server远程溢出
在HTTP请求中添加特殊字符导致暴露JSP源代码文件
Resin 1.2 重要源代码暴露漏洞
多中WEB服务器的通用JSp源代码暴露漏洞
Tomcat 暴露JSP文件内容
IBM WebSphere Application Server 暴露JSP文件内容
JRun 2.3.x 范例文件暴露站点安全信息
BEA WebLogic 暴露源代码漏洞
IBM WebSphere Application Server 3.0.2 存在暴露源代码漏洞
Tomcat 3.1 存在暴露网站路径问题
Sun Java Web Server 能让攻击者远程执行任意命令
Netscape 修复 JAVA 安全漏洞

JSP 中的 写一个对搜索引擎友好的文章SEO分页类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 82 ::
收藏到网摘: n/a

使用jsp/php/asp等动态程序生成的页面如何对搜索引擎友好呢?你可能想使用url_rewrite。不过,最好还是让同一个网址在任意时间对应的页面内容都是一样的或者相似的。因为搜索引擎不喜欢页面内容总是在变化的网址。

一般博客文章需要将新发表的文章显示在前面,所以会使用"order by id desc"类似的SQL语句来查询一页包含的多篇文章。例如下面在JAVA+MYSQL中:

public Article[] getArticleArray(int from, int size){
Article[] article = new Article[0];
String query = "SELECT * FROM blog ORDER BY DESC id LIMIT " + from + "," + size;
try{
ResultSet rs = st.executeQuery(query);
rs.last();
size = rs.getRow();
article = new Article[size];
rs.beforeFirst();
for(int i=0; rs.next(); i++){
article[i] = new Article(
rs.getInt("id"), rs.getString("time"),
rs.getString("name"), rs.getString("blog")
);
}
rs.close();
}catch(Exception e){
System.out.println(e);
}
return article;
}

这是我们的SEO分页类MySEOPager中的一个方法。如果我们想显示第一页,我们使用getArticleArray(0,10)来查询最新发表的10篇文章。

这有什么问题呢?问题是当你添加一篇文章之后,原来的所有分页都改变了。为了让getArticleArray(0,10)每一次查询显示相同的文章,应 该让getArticleArray(0,10)显示新先发表的10篇文章。我们可以这样改造我们的分页类。删除与将影响页面的内容,你删除越新的文章, 生成的页面改变越大。

public Article[] getArticleArray(int from, int size){
Article[] article = new Article[0];
String query = "SELECT * FROM blog ORDER BY id LIMIT " + from + "," + size;
try{
ResultSet rs = st.executeQuery(query);
rs.last();
size = rs.getRow();
article = new Article[size];
rs.beforeFirst();
for(int i=0; rs.next(); i++){
article[i] = new Article(
rs.getInt("id"), rs.getString("time"),
rs.getString("name"), rs.getString("blog")
);
}
rs.close();
}catch(Exception e){
System.out.println(e);
}
return article;
}

我们还需要得到数据库里到底有多少文章,所以再增加一个方法。

public int getArticleCount(){
int rowcount = 0;
String query = "SELECT COUNT(*) AS rowcount FROM ideabook";
try{
ResultSet rs = st.executeQuery(query);
if(rs.next()){
rowcount = rs.getInt("rowcount");
}
}catch(Exception e){
System.out.println(e);
}
return rowcount;
}

现在我们在JSP页面中显示最新发表的10篇文章。

int start = -1;
MySEOPager pager = new MySEOPager();
int artcount = pager.getArticleCount();
try{
Integer.parseInt(request.getParameter("start"));
}catch(Exception e){
start = artcount-10;
}
if(start > artcount - 10) start = artcount - 10;
if(start < 0) start = 0;
Article art = pager.getArticleArray(start, 10);
// do something with art here.
int previous = start + 10; // 传到上一页的start值
int next = start - 10; // 传到下一页的start值

这样,生成的页面的内容的是否改变与你是否删除了先发表的文章有关系。只要你不删除文章,showblog.jsp?start=0带有这个参数的 网址对应的页面都不改变。只要你删除的是第n篇文章,那么start<(n-pagesize)对应的页面都不改变。你添加文章只影响第一页。

在我编写的ideabook留言本使用了这种方法。