我想知道,现在很多网站都用了静态页面,有些是伪静面,表面是静态的,其实还是动态的,还有就是纯静态页面,不知道像SOHU这样的静态页面是怎么做到的???
freeer可以生成静态页面,但是刚才看了一下,它好像也是要从数据库中读取的,只是填充。像那种从后台添加一条新闻,就生成了一个静态页面,然后我们读取的就是一个静态页面。这个是怎么实现的,另外大家是怎么做成静态页面的????有源码的朋友还望发一源码过来???
freeer可以生成静态页面,但是刚才看了一下,它好像也是要从数据库中读取的,只是填充。像那种从后台添加一条新闻,就生成了一个静态页面,然后我们读取的就是一个静态页面。这个是怎么实现的,另外大家是怎么做成静态页面的????有源码的朋友还望发一源码过来???
<%@ include file=*** 静态?
>_<
我找了很多资料,freeer我不知道怎样用没有学所以不知道怎样用来生成静态页面,但是
http://axiii.blog.51cto.com/396236/126963这里有一个java生成静态html的方法,是通过替换的方法当你在后台做好之后生成一个新的静态页面,你自己预先把模板给做好,里面的js等都做好,然后通过替换里面的标题,内容就能生成一个静态页面了,但是如果有分页的话就要自己去看看怎样去实现了,呵呵
希望帮到lz吧还有很多生成html页面的方法,可以到网上去找找学学
package com.jetsum.mystatic;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class toHtml extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String url = request.getParameter("urls")!=null?request.getParameter("urls"):"";
//url是要生成htm的jsp页面
String name = "";
response.setContentType("text/html;charset=gb2312");
ServletContext sc = getServletContext();
System.out.println("request.getRealPath"+request.getRealPath(""));
name = request.getRealPath("") + "/index.htm"; /*生成htm页 位置在%服务器的根目录%/工程名/index.htm 例如:/tomcat5.0/webapp/studyteach/index.htm ,注意这里是在根目录生成,你可以生成后放到你想放的文件夹里,保证其它东西如图片的路径正确 这里就写成name = request.getRealPath("") + "/kszx/kszx.htm"; */
RequestDispatcher rd = sc.getRequestDispatcher(url);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ServletOutputStream stream = new ServletOutputStream()
{
public void write(byte[] data, int offset, int length) {
os.write(data, offset, length);
}
public void write(int b) throws IOException {
os.write(b);
}
};
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
HttpServletResponse rep = new HttpServletResponseWrapper(response)
{
public ServletOutputStream getOutputStream() {
return stream;
}
public PrintWriter getWriter() {
return pw;
}
};
rd.include(request, rep);
pw.flush();
FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
PrintWriter out = response.getWriter();
out.print("<p align=center><font size=3 color=red>首页已经成功生成!</font></p>");
}
}
web.xml
中添加
<servlet>
<servlet-name>tohtm</servlet-name>
<servlet-class>com.jetsum.mystatic.toHtml</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>tohtm</servlet-name>
<url-pattern>/web/tohtm</url-pattern>
</servlet-mapping>
使用方法很简单 mytest.jsp(wwwroot下)
<a href="web/tohtm?urls=/kszx/kszx.jsp">生成静态页</a> kszx.jsp为要生成htm的动态页
如果不在wwwroot下,在wwwroot/pp下
就要写成
<a href="../web/tohtm?urls=/kszx/kszx.jsp">生成静态页</a>
保存后,在发布队列中加入一个新闻ID,然后不断扫描这个队列,当不空时,开始发布这条新闻的静态页面,然后不断地递归生成新闻的父栏目一直到根结点。
静态页面分为2类 新闻正文属于正文页,其它非正文页都是列表页
现在门户网站都把页面拆分成一块块的碎片,当用户访问时使用ssi组件拼合起来。这就是静态发布的基本思想
而像新浪搜狐这样的门户都是真静态,他们配置的是服务器集群
有n个服务器每天专门来生成静态文件,然后丢到某台服务器上对外发布。
至于如何生成静态文件有好多方法
可以用urlconnection
可以用velocity
可以用free
都可以
我的主页用的伪静态:php的,采用的是apache url重写
http://www.unetlife.com
即使是真的生成了动态的页面,我想他势必会增加服务器的负担,
必须在服务器有一个静态的转化机制生成一个静态的页面包把这个包扔给客户端。
我觉得没有必要,什么杨的系统要求这么高 啊
累人!
目录下,在工程重新部署后,原来在这个目录下生成的文件将会全部被清掉。比如在 Tomcat 下这样配置一下:<Context docBase="f:/web/base" path="/news/resources"/>
<Context docBase="news" path="/news"/>工程是放在 webapps/news 目录下的,访问时采用 http://localhost:8080/news 这样访问。
而生成的静态页面是放在 f:/web/base 目录下的,访问时采用 http://localhost:8080/news/resources/xxxx.html 这样访问的。配置一个虚拟路径的话,那么在应用重新部署后不会影响到一些动态生成的资源。采用 FreeMarker 或者采用 Velocity 模板,都是采用 MVC 的结构将数据与模板进行合并的,
合并后将数据流写入到某个 HTML 文件中,这样静态页面就生成了。
* 生成静态页面
**************************************************************************/
public void convertJSP(String filepath, String template, String title,
String comments, String showtime, String filename, String keywords,
String desciption) { File htmlfile = new File(filename); StringBuilder sb = new StringBuilder();
try {
htmlfile.createNewFile();// 创建文件 template = template.replaceAll("#title#", title); // 替换预留字符
template = template.replaceAll("#comments#", comments);
template = template.replaceAll("#datetime#", showtime);
template = template.replaceAll("#keywords#", keywords);
template = template.replaceAll("#desciption#", desciption); sb.append(template); PrintStream printStream = new PrintStream(new FileOutputStream(
filepath + "/" + htmlfile)); printStream.println(sb.toString());// 将字符串写入文件 } catch (IOException e) {
e.printStackTrace();
}
}
比如说ext等等。。
其实说白了还是跟服务器数据交互同步的。。只是你感觉不到而已
public static void convertHtml(String sUrl, String charset,
String sSavePath, String sHtmlFile) throws IOException { int HttpResult;
URL url = new URL(sUrl);
URLConnection urlconn = url.openConnection();
// 抽象类 URLConnection
// 是所有类的超类,它代表应用程序和 URL
// 之间的通信链接,通过在 URL 上调用
// openConnection 方法创建连接对象
urlconn.connect(); // 使用 connect 方法建立到远程对象的实际连接
HttpURLConnection httpconn = (HttpURLConnection) urlconn;
// 每个
// HttpURLConnection
// 实例都可用于生成单个请求,
// 但是其他实例可以透明地共享连接到
// HTTP 服务器的基础网络
HttpResult = httpconn.getResponseCode();
// getResponseCode可以从 HTTP
// 响应消息获取状态码
if (HttpResult != HttpURLConnection.HTTP_OK) {
} else {
InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(),
charset);
BufferedReader in = new BufferedReader(isr);
String inputLine;
if (!sSavePath.endsWith("/")) {
sSavePath += "/";
}
FileOutputStream fout = new FileOutputStream(sSavePath + sHtmlFile);
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
fout.write((inputLine+"\n").getBytes());
}
in.close();
fout.close();
}