`
TechBirds
  • 浏览: 82527 次
文章分类
社区版块
存档分类
最新评论

Java Servlet实现静态页面技术

 
阅读更多

1.背景

往往首页是包含多很内容的,对于讲究首页访问速度。动态请求生成jsp页面,往往略显吃力,这样对于服务器和db都有很大的压力。

为此,通过定时器定时请求生成静态页面,进行定时更新。

2.实现逻辑

我们需要解决下面一些技术问题:

一、静态请求的逻辑:

1.拼装jsp请求,发送请求
2.将请求到的结果进行流输出,jsp->html的转换过程
额外需求:
定时调用生成静态页面
问题:
1.如何知道jsp请求?
查看配置文件便可知道
2.如何发送jsp请求?
转发即可(保留request,response)
----------------------------------------
1.如何将请求的结果保存并进行流输出?
虽然有源码,但还是不怎么清楚原理

二、如何让其定时的自动发送生成静态页面的请求?

1.使用URLConnection进行发送请求(携带必要参数)
2.使用Timer进行定时访问
3.使用wrapper生成后台服务,自动发送请求


3.实现源码

-------------------------------------------web端-------------------------------------------------------------------

1.生成静态页面的servlet请求源码-ToHtmlServlet

public class ToHtmlServlet extends HttpServlet {
	/**
	 * 需要转换成静态页面的动态请求,相对路径(request)
	 */
	private String url = "";
	/**
	 * 生成的静态文件的绝对路径
	 */
	private String path = "";
	/**
	 * 需要转换成静态页面的动态请求名称(ps:不需要添加do后缀)
	 */
	private String actionName="";
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest
	 * , javax.servlet.http.HttpServletResponse)
	 */
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 则你访问这个servlet时加参数.如http://localhost/test/toHtml?actionName=index
		actionName = req.getParameter("actionName");// 你要访问的jsp文件名,如index,不包括扩展名
		url = "/" + actionName + ".do";
		path = this.getServletContext().getRealPath("/") + "index.htm";
		// 这是生成的html文件名,如index.htm.文件名字与源文件名相同。扩展名为htm
		RequestDispatcher rd = req.getRequestDispatcher(url);
		// 通过匿名类来创建一个stream实例,只引用其中write方法
		// 通过匿名类创建PrintWriter实例,使用上面输出客户端的流stream
		// 通过自定义实例化pw对象
		/**
		 * 个人觉得产生的匿名产生的stream和rep以及新实例化的pw对象,都与本身此请求的steam,rep,pw对象完全不同。
		 * 这些自定产生的对象是用于保存流并输出到指定的静态文件。
		 */
		// 静态处理开始....
		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(resp) {
			public ServletOutputStream getOutputStream() {
				return stream;
			}

			public PrintWriter getWriter() {
				return pw;
			}
		};
		// 用来记录保留request和response,以后不能再修改response里表示状态的信息
		rd.include(req, rep);
		pw.flush();
		FileOutputStream fos = new FileOutputStream(path); // 把jsp输出的内容写到xxx.htm
		os.writeTo(fos);
		fos.close();
		// 静态处理结束...
		// 下面是针对此请求对应客户端的响应方式
		resp.setCharacterEncoding("utf8");
		PrintWriter out = resp.getWriter();
		out.print("生成成功~");
	}
}

2.需要生成静态页面的动态请求-IndexServlet(url)

public class IndexServlet extends HttpServlet {

	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		RequestDispatcher rd=req.getRequestDispatcher("template.jsp");
		rd.forward(req, resp);
	}
	
}

3.web.xml配置详情

  <servlet>
  	<servlet-name>toHtml</servlet-name>
  	<servlet-class>com.techbirds.servlet.ToHtmlServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>toHtml</servlet-name>
  	<url-pattern>/toHtml.do</url-pattern>
  </servlet-mapping>
  
  <!-- 需要静态的首页请求 -->
  <servlet>
    	<servlet-name>toIndex</servlet-name>
  		<servlet-class>com.techbirds.servlet.IndexServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>toIndex</servlet-name>
  	<url-pattern>/toIndex.do</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>toIndexHtm.jsp</welcome-file>
  </welcome-file-list>

4.jsp页面列表



-------------------------------------------定时服务端-------------------------------------------------------------------

5.发送请求-Service

public class CallHtmlService {
	public void callHtml(String actionName) {
		try {
			String str = "http://localhost:8080/toHtml/toHtml.do?actionName="
					+ actionName;
			int httpResult;
			URL url = new URL(str);
			URLConnection connection = url.openConnection();
			connection.connect();
			HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
			httpResult = httpURLConnection.getResponseCode();
			if (httpResult != HttpURLConnection.HTTP_OK) {
				System.out.println("生成失败...");
			} else {
				System.out.println("生成成功...");
			}
		} catch (Exception e) {
		}
	}	
}

6.定时任务

public class CallHtmlTimer {
	/**
	 * 延迟几秒执行
	 */
	private static Long DELAYTIME=1000*10l;
	/**
	 * 间隔几秒执行
	 */
	private static Long PERIODTIME=1000*10l;
	public static void main(String[] args) {
			Timer timer=new Timer();
			timer.schedule(new CallHtmlTask(), DELAYTIME, PERIODTIME);
	}
}

class CallHtmlTask extends TimerTask{

	@Override
	public void run() {
		new CallHtmlService().callHtml("toIndex");
	}			
}

ps:做成windows服务参考:http://blog.csdn.net/techbirds_bao/article/details/8799528


分享到:
评论

相关推荐

    学生信息管理系统(实现增删改查操作)Java+Servlet+HTML+CSS+数据库

    Java+Servlet+HTML+CSS+数据库,实现的学生信息管理系统,实现了 新增和查询功能。 覆盖知识 java部分:程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、实用类、JDBC、三层架构...

    Servlet的运行机制

    1. 手动编写java代码,...4. 实现用Servlet实现伪静态页面的访问 5. 实现用缺省的Servlet实现对静态页面的访问。 6. 使用ServletConfig对象,访问web.xml中的数据库连接信息。 7. 使用ServletContext对象,实现转发操作

    大名鼎鼎的 java2s 静态网页打包下载

    大名鼎鼎的 java2s 静态网页打包下载 我只是知识的搬运工,版权归属原作者。 是全面学习java不可多得的素材,代码复制粘贴都可运行。 网友给的评论 这个网站非常好,分成三大类,分别是Example、Products、 ...

    jsp+servlet+mysql开发java web旅游网站,有后台管理系统

    项目描述 jsp+servlet开发的景点旅游网站 运行环境 jdk8+tomcat8+mysql+eclipse+maven 项目技术(必填) java servlet+mysql+jquery ajax ...3.前台大部分页面是静态的模板内容,有交互的比如留言是ajax写入数据

    Java实现的网站

    这是一个Java实现的新闻发布系统,小型的网站,包括源代码和静态的页面,主要用的servlet实现

    jsp生成静态页面的方法

    jsp生成静态页面的方法的最简单的代码,这儿的实现是通过Servlet代码,把客户端的请求以IO流创建静态的页面,响应客户端

    JSP(全称JavaServer Pages)

    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...

    java-servlet-api.doc

    一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。 所有的...

    Servlet动态网页技术详解

    一、Servlet简介:随着互联网技术的逐步普及,以及人们对互联网要求提高,以前那种静态网页已经不再是适应,我们看到今天的网页不但有flash,vide等等,显然以前的那种静态网页展示无法解决,为了解决这个问题,SUN公司...

    动态Jsp页面转换成静态Html页面

    动态Jsp页面转换成静态Html页面 ,通过一个servlet将指定的jsp转换成相对应的静态html页面。

    基于Java EE平台项目管理系统的设计与实现【源代码+论文+数据库】

    基于Java EE平台项目管理系统的设计与实现【源代码+论文+数据库】 java项目管理系统平台 此在这个系统中我综合应用了MySQL、Servlet、JSP等知识。网页界面的结构设计以实用性出发,具有易于操作、简洁、方便等特点。...

    java页面技术JSP详解

    JSP的特点 1、JSP里面可以嵌入Java代码 2、在运行的时候JSP被容器自动翻译成为一个servlet ...5、Servlet生成静态页面比较麻烦,适合做Control层,JSP生成页面比较容易,适合做view层,JSP本质上就是servlet。

    JAVA3D的网络三维技术的设计与实现(源代码+论文+说明).zip

    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...

    基于ServletJSP和XML技术的远程教学系统的研究与实现

    了处理动态网页的Java Servlet和JSP技术,较其 他的网上动态交互信息处理技术具有极其优越性。 而随着XML和相关标准的定型,全新的基于Java/ XML的发布框架逐渐走入人们的视野。因此,针对 现有远程教学系统的不足...

    JSP动态网页开发技术概述

     JSP(Java Server Pages)是建立在Servlet规范之上的动态网页开发技术,其实质是一个简化的Servlet。在JSP文件中,HTML和Java代码共同存在,其中,HTML代码用于实现网页中静态内容的显示,Java代码用于实现网页中...

    JAVA基于纠错码的冗余技术的研究-EVENODD码的设计与实现(源代码+论文).zip

    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...

    java Freemarker页面静态化实例详解

    它不仅可以用作表现层的实现技术,而且还可以用于生成 XML,JSP 或 Java 等。 目前企业中:主要用 Freemarker 做静态页面或是页面展示 总结:freemarker 模版引擎,可以使用 Freemarker 模版生成 html 页面。 ...

    Java Web应用开发:JSP技术基础.pptx

    纯Servlet编写的网站? ;JSP;HTML、servlet和JSP相比较;静态HTML页面的请求过程;Servlet的请求过程;JSP页面(hello.jsp);创建第一个JSP文件;JSP的请求和执行过程;JSP源文件和转译后的Servlet文件对比;JSP的执行过程;...

    21天学通java-web开发

    JSP是基于Java Servlet以及整个Java体系的Web开发技术,利用这一技术来构建安全的、跨平台的动态Web站点,而且目前在不断进行更新和优化。如果读者对微软的ASP技术比较熟悉,应该知道ASP的编程语言是VBScript和...

    Java Web应用开发:Servlet和JSP技术进阶.ppt

    如: 都属于非持久化会话方案 都使用页面动态修改技术,因此不支持静态HTML 代码编写方式很相似 Cookie技术 什么是Cookie? 一些网站会在您的计算机上的以小文本文件存储信息。这种文件称为cookie。 Cookie可以随着...

Global site tag (gtag.js) - Google Analytics