這篇文章主要介紹了動態JSP頁生成靜態HTML的方法,以實例形式較為詳細的分析了JSP生成靜態HTML頁面的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了動態JSP頁生成靜態HTML的方法。分享給大家供大家參考。具體如下:
具體實現:
利用Filter的過濾功能把*.jsp過濾出來,判斷是否存在對應的.html文件,如果不存在對應的.html文件,則將其內容讀出寫入指定的.html文件,再跳轉到對應的.html即可。如果存在對應的.html文件,則直接跳轉到對應的.html即可。
代碼:
JspFilter.java:
- 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.net.HttpURLConnection;
- import java.net.URL;
- 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:
- 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配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <filter>
- <filter-name>jspfilter</filter-name>
- <filter-class>com.beanutil.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.beanutil.ConversionServlet </servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>conversion</servlet-name>
- <url-pattern>/conversion</url-pattern>
- </servlet-mapping>
- </web-app>
希望本文所述對大家的JSP程序設計有所幫助。
新聞熱點
疑難解答