伪静态文件

伪静态html

  • 静态文件:真实存在的、内容不变的文件。指WebRoot下面的 html, js, css, jpg 这些文件,浏览器会认为,这些文件的内容是不会改变的,因而有可能会缓存在本地。
  • 伪静态文件:看后缀像是一个普通的静态文件,但实际上内容却是由 Servlet生成的。 

例如:

创建一个 Servlet,伪装成一个静态文件。http://127.0.0.1:8080/mid0401/test.html

package my;

import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/test.html")
public class TestHtmlService extends HttpServlet
{
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String timeStr=sdf.format(new Date());
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		Writer writer=response.getWriter();
		writer.write("当前时间:"+timeStr);
		writer.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGet(request, response);
	}

}

伪静态图片

使用 Servlet 技术,也可以生成一个伪静态的图片。比如生成一个二维码,要用到这两个jar包

package my;

import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

@WebServlet("/qr.png")
public class QRService extends HttpServlet
{
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// 设置 Content-Type
		response.setContentType("image/png");

		// 生成图片、并直接输出到应答中
		String content = "hello world";
		genQRCode(content, "png", response.getOutputStream());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// TODO Auto-generated method stub
		doGet(request, response);
	}

	/**
	 * 生成二维码 
	 * 
	 * @param content
	 *            要嵌入的内容文本,通常是一个URL
	 * @param format
	 *            图片格式, "jpeg" 或 "png"
	 * @param outputStream
	 *            输出数据
	 */
	private void genQRCode(String content, String format, OutputStream outputStream)
	{
		int width = 300;
		int height = 300;

		// 二维码的参数设置
		HashMap<EncodeHintType, Object> hints = new HashMap();
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 字符集
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 纠错级别
		hints.put(EncodeHintType.MARGIN, 2);// 空白
		// hints.put(EncodeHintType.QR_VERSION, 5);// 版本1-40,内部会自动适应,不用设置

		try
		{
			MultiFormatWriter writer = new MultiFormatWriter();
			BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
			MatrixToImageWriter.writeToStream(matrix, format, outputStream);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

}

伪静态JS

使用 Servlet 技术,生成一个伪静态的JS文件。

package my;

import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;

@WebServlet("/userinfo.js")
public class JSService extends HttpServlet
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		JSONObject user = new JSONObject();
		user.put("id", "20210001");
		user.put("name", "小明");
		user.put("email", "12345@163.com");
		user.put("time", sdf.format(new Date()));
		
		// 构造一段 JavaScript
		String jsContent = "var user = " + user.toString(2) + " ; ";
				
		// 应答
		response.setContentType("application/javascript");
		response.setCharacterEncoding("UTF-8");
		response.addHeader ("Cache-Control", "no-cache"); // 禁止客户端缓存此文件
		Writer writer=response.getWriter();
		writer.write(jsContent);
		writer.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGet(request, response);
	}

}

在HTML页面里包含这个JS文件 <script type="text/javascript" src="userinfo.js" ></script> 并使用它: $('.user').html ( user.name);

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<script type="text/javascript" src="js/jquery.min.js"></script>
	
	<script type="text/javascript" src="userinfo.js"></script>
</head>
<body>
	<div>
		当前用户: <span class='user'></span>
	</div>
</body>
	<script>
		$('.user').html ( user.name );
	</script>
</html>

注意

1 设置 Content-Type: application/javascript

2 设置 Cache-Control : no-cache    即告诉浏览器,不要缓存这个JS文件

3 在浏览器看来,它和一个真的JS没有区别 ,因此,可以加载它、并调用里面的变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值