jsp 转成静态html

本文介绍了一个使用Java Servlet过滤器实现的JSP页面自动转换为HTML的技术方案。该方案通过自定义过滤器拦截所有JSP请求,在不改变现有应用程序的情况下,将JSP动态页面转换并保存为静态HTML文件,从而提升网页加载速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




package com.servlet;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class JspFilter implements Filter {

public void destroy() {

// TODO 自动生成方法存根

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest hreq = (HttpServletRequest) request;

HttpServletResponse hresp = (HttpServletResponse) response;

//String name = hreq.getRequestURL().substring(hreq.getRequestURL().lastIndexOf("/") + 1, hreq.getRequestURL().lastIndexOf("."));

if (hreq.getRequestURL().indexOf(".jsp") != -1 && (null == hreq.getParameter("type") || hreq.getParameter("type").equals(""))) {

hresp.sendRedirect(hreq.getContextPath()+"/conversion?name="+hreq.getRequestURL());
return ;

}

chain.doFilter(request, response);

}

public void init(FilterConfig arg0) throws ServletException {

// TODO 自动生成方法存根

}

}

ConversionServlet .java

package com.servlet;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.HttpURLConnection;

import java.net.URL;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class ConversionServlet extends HttpServlet {

public ConversionServlet () {

super();

}

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

//----获取请求的URL

String reqTarget = request.getParameter("name");

//----指定对应JSP的HTML名称

String name = reqTarget.substring(reqTarget.lastIndexOf("/") + 1,reqTarget.lastIndexOf("."));

//---判断是否存在对应的HTML文件

File file = new File(request.getRealPath("/") + name + ".html");



if (!file.exists()) { //--------如果不存在对应的HTML文件

try {



file.createNewFile(); //--------创建HTML文件

//-------将JSP的内容写入对应的HTML文件内

InputStream in;

StringBuffer sb = new StringBuffer("");

//----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环

URL url = new java.net.URL(reqTarget.toString()+"?type=11");

HttpURLConnection connection = (HttpURLConnection) url

.openConnection();

connection.setRequestProperty("User-Agent", "Mozilla/4.0");

connection.connect();

in = connection.getInputStream();

java.io.BufferedReader breader = new BufferedReader(

new InputStreamReader(in, "GBK"));

String currentLine;

FileOutputStream fos = new FileOutputStream(file);

while ((currentLine = breader.readLine()) != null) {

sb.append(currentLine);

fos.write(currentLine.getBytes());

}

if (null != breader)

breader.close();

if (null != fos)

fos.close();

//---------------转到与JSP对应的HTML页

response.sendRedirect(request.getContextPath()+"/"+name + ".html");

} catch (Exception e) {

e.printStackTrace();

}

}else{

//----------如果存在指定的HTML,直接跳转到指定的HTML页

response.sendRedirect(request.getContextPath()+"/"+name + ".html");

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

public void init() throws ServletException {

// Put your code here

}

}

web.xml

<servlet>
<servlet-name>ChangeHtml</servlet-name>
<servlet-class>com.servlet.ChangeHtml</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ChangeHtml</servlet-name>
<url-pattern>/changeHtml</url-pattern>
</servlet-mapping>
<filter>
<filter-name>jspfilter</filter-name>
<filter-class>com.servlet.JspFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jspfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>conversion</servlet-name>
<servlet-class>com.servlet.ConversionServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>conversion</servlet-name>
<url-pattern>/conversion</url-pattern>
</servlet-mapping>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值